爬取某家网二手房数据(详细教程)
今天分享一篇爬虫教程,文章比较细致,适合刚上手的小白,老读者可以酌情加速阅读
文中涉及的代码已经测试过,可以正常跑通,文章案例的所有数据也已经成功爬取。
项目描述:
今天要分享的教程是爬取各大城市的二手房数据,实现这篇爬虫也可融汇贯通到其他相关项目。
项目实施:
1. 确定目标
我们的目标官网链接是:https://www.lianjia.com/
对应的某个城市的二手房页面应该是:https://sz.lianjia.com/ershoufang/
JN 代表城市济南的简写,对应的青岛是 QD。
⚠️⚠️⚠️:有两个页面需要注意,第一个页面是打开某个地区二手房链接之后显示的列表页面,第二个页面是点击某个二手房的链接之后跳转的房屋详细数据页面
列表页面
房屋详细信息页面
1.1 先来说第一个页面
这个页面包括三部分,最上面的搜索部分、中间的列表部分、下面的翻页部分。
上面的搜索部分看似无用,但也暗藏玄机。
举个最直观的例子:在某个搜索条件下,例如济南,对应的清单中有 55809 条记录
而你将页面拉到最下面进行翻页,发现实际只有 100 页可供操作
根据每一页只有 30 条数据的官方设置,如果不设置搜索条件,只能拿到 3000 条数据
所以,要想获取全部数据,第一个搜索功能就派上用场了。
但是,添加搜索必然会提高整个程序的复杂度,特别是现在有如此多的搜索条件
综上,我们可以选择的解决方式是筛选出重要且能完美区分的搜索条件,例如:区域+户型+朝向
上述设置的目的是:
通过条件设置之后,通过筛选 xx区 的数据,发现数据大于 3000条,则利用户型是 x居室 的进行二次筛选,如果发现仍大于 3000条,再次通过朝x向进行第三次筛选,基本上到了第三次筛选之后,我们可以拿到我们想要的数据。
筛选条件除了每个城市的区域没法固定外,居室和朝向都是固定的
通过F12查看源码可以看到居室和朝向对应的定位如下:
所以我们可以在代码中这样呈现:
# 户型:一室、二室、三室、四室、五室、五室+
self.rooms_number = ['l1', 'l2', 'l3', 'l4', 'l5', 'l6']
# 朝向:朝东+朝南+朝西+朝北+南北
self.orientation = ['f1', 'f2', 'f3', 'f4', 'f5']
1.2中间的列表部分
列表部分有 3 个信息需要注意,如下图:
分别是:小区名+区域、价格以及其他标签
如果这些信息已经可以满足数据需求,那对应的爬虫只需要获取这个页面的数据,不需要分析第二个页面了,工作难度就下降了
如果还需要更详细的二手房指标,例如:挂牌时间、抵押情况、产权等数据,那就需要分析第二个页面了
下面的翻页部分:
翻页部分原理比较简单,通过多次点击下一页按钮,观察新页面的 url 链接就能发现规律
例如:https://sz.lianjia.com/ershoufang/luohuqu/pg2l1/ 中的 pg2 对应的是第二页的数据而 l1 在前面我们已经知道是一居室的意思,所以对应的翻页页面的 url 规则应该是:
主网页+区域+pg页码+居室
在翻页遍历的过程中只需要更改 pg页码 即可。
1.3 第二个页面
第二个页面是通过第一个页面点击跳转的:
通过点击图中的标签,