闲来无事突然想爬一下汽车之家上面的数据,看来看去觉得上面最有价值的就是上面的价格数据,汽车之家上面有指导价和不同地方的经销商和二手商家的价格数据,该爬虫实现了汽车之家上的所有车型的价格数据的爬取。

目录

一,分析网站上的数据并确定自己的爬取目标
<https://blog.csdn.net/SherlockSong/article/details/83549062#%E4%B8%80%EF%BC%8C%E5%88%86%E6%9E%90%E7%BD%91%E7%AB%99%E4%B8%8A%E7%9A%84%E6%95%B0%E6%8D%AE%E5%B9%B6%E7%A1%AE%E5%AE%9A%E8%87%AA%E5%B7%B1%E7%9A%84%E7%88%AC%E5%8F%96%E7%9B%AE%E6%A0%87>

二,通过抓取json包来获取经销商报价和二手车商家报价
<https://blog.csdn.net/SherlockSong/article/details/83549062#%E4%BA%8C%EF%BC%8C%E9%80%9A%E8%BF%87%E6%8A%93%E5%8F%96json%E5%8C%85%E6%9D%A5%E8%8E%B7%E5%8F%96%E7%BB%8F%E9%94%80%E5%95%86%E6%8A%A5%E4%BB%B7%E5%92%8C%E4%BA%8C%E6%89%8B%E8%BD%A6%E5%95%86%E5%AE%B6%E6%8A%A5%E4%BB%B7>

三,屏蔽的页面记录和再次爬取
<https://blog.csdn.net/SherlockSong/article/details/83549062#%E4%B8%89%EF%BC%8C%E5%B1%8F%E8%94%BD%E7%9A%84%E9%A1%B5%E9%9D%A2%E8%AE%B0%E5%BD%95%E5%92%8C%E5%86%8D%E6%AC%A1%E7%88%AC%E5%8F%96>

一,分析网站上的数据并确定自己的爬取目标

网站地址:汽车之家 <https://car.autohome.com.cn/>

通过分析我们确定要爬取的数据如下所示:



其中要分析好其中的逻辑结构,把要爬取的数据进行分层:

          在写之前还要按照网页上的数据进行层数划分:

             然后就通过网页上的标签对各个型号的价格数据进行抓取就行了。

二,通过抓取json包来获取经销商报价和二手车商家报价

这里要注意经销商报价是动态更新的,如果单纯的抓取页面的话是抓不到的,所以要打开network分析经销商报价的json包

分析可得有一个叫做LoadDealerPrice的json包里面有我们想要的数据



分许它的url

           发现可以通过改变seriesid,也就是车型的id来得到我们想要的数据,后面的city是城市的id,根据自己的爬取需求可以改变它

这时我们打开该api包,发现里面的数据不是单纯的json格式的数据,而是加了一些前后缀



这时候不便于我们直接获取该包里面的数据,我们用写一个处理函数简单处理一下
def deliver_current_change(content): con = re.sub(r"LoadDealerPrice", "",
str(content))#去掉前缀 con2 = con[1:-1]#去掉后缀 last = json.loads(con2)#把文本转化成json格式
deliver_key = {} for i in last['body']['item']: deliver_key[i["SpecId"]] =
i["Price"] return deliver_key
即将销售的车型里面也是经销商报价,和在售的数据一样

然而停售的车型不是经销商报价了,变成了二手商报价json包是LoadUsedCarPrice开头的那个,url类似,只是数据类型有些变化

           这时候在爬取停售界面的主函数中加上几句处理的代码:
con = re.sub(r"LoadUsedCarPriceGetUsedCarData", "", str(deliver)) con2 =
re.sub("," + i, "", str(con[-10:-1]))#去掉后缀的数字 con3 = con[1:-10] + con2 last =
json.loads(con3) deliver_key = {} for ki in last['body']['items']:
deliver_key[ki["specId"]] = ki["priceArea"]
三,屏蔽的页面记录和再次爬取

     
 ​​爬了几次发现了这个网站的几个规律,发现他会非常严格的限制一个ip爬取的数量和速度(可能是因为我懒得注册这个网站搞一套登录的post请求),然后呢,有时候第一次访问时会被403,同样的请求再请求一次就行了,所以代码里面加了一个屏蔽之后再爬一次的功能,但是即使是这样,跑完一遍仍然会有几个url被403。这时候把这几个被屏蔽的url再爬一次就ok了(真蠢啊啊啊啊)

代码效率实在是太低了,爬几个不同界面的函数全封装到一个文件里面了。。。。不忍心发出来,有兴趣的去GitHub看吧

GitHub地址:https://github.com/Tju-Bibibo/autohome-spider
<https://github.com/Tju-Bibibo/autohome-spider>