页面的数据是后端通过接口的形式传给前端,直接去抓后端数据包,发送请求并解析响应。
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的寻找元素方式是以标签为节点的树。
最后导出为表格:
菜鸡一枚,仅仅记录与分享。欢迎大佬多多指正,也欢迎交流。