二手汽车爬虫的三种实现方式

   日期:2024-12-26    作者:syrsjd 移动:http://mip.riyuangf.com/mobile/quote/36518.html

页面的数据是后端通过接口的形式传给前端直接去抓后端数据包发送请求并解析响应。

2.1页面分析

【昆明二手车】昆明二手车交易市场_昆明二手车报价_昆明二手车市场-昆明瓜子二手车 (guazi.com)

进入该页面,暂时称为列表页(汽车信息条数多,每一条汽车信息较少

点击每一个红框,进入对应该车的详情页面 

可以看到详情页里面汽车信息很多,满足要求,红框框住的clueid为每辆车对应的标识(就像每个人对应每一个身份证一样,因此,要从标题页进入详情页,就要找到每一辆汽车的clueid。

寻找方式一般为:右键——>检查——>网络——>Fetch/XHR——>刷新网页——>观察数据包响应

找到响应数据量较大的去寻找clueid,这里我找到之后截图如下

 可以发现和上图所示详情页的clueid一样。并且这个数据包响应是列表形式,这个列表中就会有这个网页对应的20辆车的clueid。

下一步是对详情页提取需要的信息,还是抓取数据包,步骤如上(从右键检查到观察数据包响应)截图如下

 还是列表包着每一辆车的参数信息,因此只要观察这个接口的url和参数,发送请求,解析响应。

2.2代码

 

先导入库,创建二维表。

 

第一个大循环1到50控制的是标题页面数量

如上所示的1到50。headers的设置用来模拟浏览器(这里是随机模拟的,防止反扒,保存信息以及设置响应编码等。

对每个标题页面请求后,对其响应设置json格式,然后一层一层循序渐进找到需要的clueid(在这里我还保存了车名,找到clueid又拼接成正确的详情页url,对详情页发送请求,并把响应同样设置为json格式。

最后就在循环中解析json中我们需要的数据,保存在DataFrame,n表示控制行数,循环结束执行+1操作

值得注意的是

1.if else条件分支语句是根据响应数据本身的特征来写,目的是精准定位我们所需要的数据。

2.try except异常捕获语句是爬取过程中,有的车辆没有质保信息,抛出空异常。

3.代码中第一个for循环是拼接不同标题页面的url,第二个for循环是拼接详情页的url,第三个for循环是定位数据用的。

最后在循环体外导出为表格。

 

抓包方式找不到的情况下,数据是通过html、css、javascript写在了网页上,此时就需要去网页定位数据通过html的标签关系以及css的选择方式抓取数据

2.1页面分析

全国二手车_二手车之家 (autohome.com.cn)

右键——>检查——>元素——元素最左边的框框——>去网页框数据——>查看对应的html、css代码

 很明显,根据前端经验,这里的每一辆车对应一个盒子,对应右边的一个ul儿子li标签

 因此,对该网页发送请求,定位到每一个li标签,从li标签里面解析出车名、年份、里程、价格。

2.2代码

 

代码导入request、BeautifulSoup、pandas库,设置headers,创建data表。

第一个循环控制的是网页的翻页,从第一页到第四十页,拼接url字符串实现的 

对每一个url发送请求,.text设置响应为文本格式并利用它实例化一个BeautifulSoup对象。

 

这句代码定位到所有的li标签。

在下面一个for循环就是对每一个li标签的循环。每一个li标签解析出相应的内容。

值得注意的是

1.查找元素可以利用语法find(“标签”,class_ = “类名”),class是python关键字,因此用class_。

2.find方法返回的是元素本身,find_all方法返回的是元素列表,比如

 
 

 find_all此处返回的列表装有公里和年份,列表取[0]代表公里,取[1]代表年份。

3.代码中的try——except语句是由于有的li标签不存在汽车信息,如果名称没有解析到执行continue关键字跳过这个元素,执行下一个元素的解析。

最后导出为表格。

 

抓包方式找不到的情况下,数据是通过html、css、javascript写在了网页上,不仅仅可以通过beautifulsoup定位,还能利用selenium控制浏览器并且自动定位提取。

2.1页面分析

同上一小节

2.2代码

 

导入所需要的库之后创建一个谷歌浏览器对象,创建表格。

循环控制翻页,书写正确的url,调用get方法自动请求网页,输出网页标题。

然后查找元素,利用xpath方法此处的xpath可以直接在浏览器右键复制。

第二个循环同样是对一个网页内的不同车辆信息的循环。在循环中利用刚刚定位的li标签列表为父元素,继续寻找子元素标题、公里、年份、价格等。

值得注意的是

1.此处selenium控制谷歌浏览器,需要给谷歌浏览器安装驱动才能被代码自动控制。

2.在selenium解析html时候,浏览器的xpath路径是可以直接复制使用的,尔使用lxml的etree树解析的时候,是不能直接右键复制xpath的,大概率定位不到元素。

3.列表切片是为了让数据更好看,解析出来不加切片,就是  公里: 3.5万公里。加了切片直接是3.5公里,年份也是这样一个效果。

 

4.xpath的寻找元素方式是以标签为节点的树。 

最后导出为表格

 

菜鸡一枚,仅仅记录与分享。欢迎大佬多多指正,也欢迎交流。


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号