# 01、案例实现
下面以综合实战项目为例,从“北京链家网”爬取包括城区名(district)、街道名(street)、小区名(community)、楼层信息(floor)、有无电梯(lift)、面积(area)、房屋朝向(toward)、户型(model)和租金(rent)等租房信息。
爬取数据的程序流程图如图1所示。
■ 图1 “北京链家网”租房数据爬取流程图
(1) 导入库。代码如下。首先导入爬取过程中所需的库,这里仅对库进行简单说明,后面会详细讲解。
import csv
import random
import time
import requests
import pandas as pd
from Ixml import etree
其中,requests库用于请求指定页面并获取响应,etree库对返回的页面进行XPath解析,以获取指定的数据,random库和time库用于爬取过程中的一些设置,Pandas库和csv库用于处理和保存文件。
(2) 输入“北京链家网”的城市简称和要爬取的房源页面的页码范围。打开租房页面,首先展现的是房源列表页,通过观察不同城市的链家网租房页面的URL链接可知,一个房源列表页的URL链接主要分为3部分:城市的拼音简写、页码和其他相同部分,例如下面给出三个房源列表页的URL。
#北京
https://bj.lianjia.com/zufang/pg4/#contentList
#重庆
https://cq.lianjia.com/zufang/pg5/#contentList
#上海
https://sh.lianjia.com/zufang/pg6/#contentList
其中,第一条URL中的“bj”表示城市北京的拼音简写,“pg4”表示第4页。通过设置房源列表页URL的城市拼音简写,除了可以爬取北京的租房数据外,也可以爬取其他城市的租房数据。
本案例使用城市(如bj)和页码(pg4)的拼音简称构造一条房源列表页的URL链接,其中“#contentList”用于页内定位,可以忽略。
(3) 爬取并解析房源列表页。由于本案例拟爬取的房源信息在房源列表页和每一个房源的详情页均有分布,因此首先需要获取每一个房源详情页的URL链接。另外,房源列表页中还包含每一个房源所在的地理位置(所在城区、街道和小区)。下面介绍如何对房源列表页的页面信息进行分析,以获得房源详情页的URL链接和每一个房源的地理位置。
使用火狐浏览器打开“北京链家网”的租房页面https://bj.lianjia.com/zufang/ ,在页面空白位置右击,在弹出的快捷菜单中选择“检查”功能,单击页面最左侧小箭头形状的按钮,随后指向其中的一个房源信息,在“查看器”子窗口中右击蓝色文字的MTML代码,选择“复制”→“整体HTML”,得到如下的HTML内容(为简化分析难度,仅保留部分代码)。
<div class="content list">
<div class="content list--item">
<div class="content list--item--main"><p class="content list--item--title"><a class="twoline" target=" blank"href="/zufang/BJ2840486736310837248.html">整租·长阳国际城二区 3 室 1厅南/北< /a>
</p><p class="content list--item--des"><a target="blank"href="/zufang/fangshan/">房山</a>-<ahref="/zufang/changyang1/"target=" blank">长阳</a>-<atitle="长阳国际城二区"href="/zufang/c1111053458322/"target=" blank">长阳国际城二区< /a>
<i>/</i>
89.00m2
<i> /< /i>南北<i> /< /i>
3室1厅1卫<span class="hide"><i>/</i>
中楼层(20 层)</span></p>
< /div>
</div>
</div>
通过观察会发现,房源详情页的URL链接包含在