提示:最新Python爬虫资料/代码练习>>戳我直达
前言
lxml 解析库的应用
在编写此程序的过程中,您将体会到 lxml 解析库
的实际应用。
话不多说,开练!
用爬虫收集公开数据
编写程序流程分析
打开网站后,第一步,确定网站是否为静态网站,通过在网页源码内搜索关键字的方法,可以确定其为静态网站;第二步,确定要抓取页面的 URL 规律,第三步,根据要抓取的数据确定 Xpath 表达式;最后一步,编写 Python 爬虫程序。
通过简单的分析可知 URL 具有以下规律:
确定Xpath表达式
使用 Chrome 开发者工具对页面元素进行审查,从而确定 Xpath 表达式。首先根据要抓取的数据确定“基准表达式”。通过审查一处房源的元素结构,可以得知房源信息都包含在以下代码中:
1) 确定基准表达式
待抓取的信息都包含在相应的
<div class="positionInfo">..</div>
<div class="address">...</div>
<div class="priceInfo">...</div>
而每个页面中都包含 30 个房源,因此我们要匹配以下节点的父节点或者先辈节点,从而确定 Xpath 基准表达式:
<div class="info clear"></div>
通过页面结构分析可以得出每页的 30 个房源信息全部包含以下节点中:
<ul class="sellListContent" log-mod="list">
<li class="clear LOGVIEWDATA LOGCLICKDATA">
房源信息..
</li>
</ul>
接下来,使用调试工具定位上述元素,然后滚动鼠标滑。这时候神奇的一幕出现了,你会发现li
标签的class
属性值发生了变化,其结果如下:
<ul class="sellListContent" log-mod="list">
<li class="clear LOGCLICKDATA">
房源信息..
</li>
</ul>
发生变化的原因是由于 JS 事件触发导致的。因此就需要去页面的源码页进行匹配。
下面使用Ctrl+F
分别对 class 变化前后的属性值进行检索,最后发现源码页只存在如下属性:
class="clear LOGVIEWDATA LOGCLICKDATA"
因此 Xpath 基准表达式如下所示:
//ul[@class="sellListContent"]/li[@class="clear LOGVIEWDATA LOGCLICKDATA"]
2) 确定抓取信息的表达式
根据页面元素结构确定待抓取信息的 Xpath 表达式,分别如下:
小区名称:name_list=h.xpath('.//a[@data-el="region"]/text()')
房屋介绍:info_list=h.xpath('.//div[@class="houseInfo"]/text()')
地址信息:address_list=h.xpath('.//div[@class="positionInfo"]/a/text()')
单价信息:price_list=h.xpath('.//div[@class="unitPrice"]/span/text()')
其中房屋介绍,主要包含了以下信息:
因此,匹配出的 info_list 列表需要经过处理才能得出我们想要的数据,如下所示:
info_list=h.xpath('.//div[@class="houseInfo"]/text()')
if