此次爬虫参考了https://blog.csdn.net/weixin_39679004/article/details/83023963
本次爬虫选用Scrapy框架爬取链家网北京二手房(https://bj.lianjia.com/ershoufang/)的相关信息。爬取思路为:二手房信息共100页,生成每页的网址;对每页二手房信息爬取每套房的链接;对每套房的链接页面爬取房屋价格、面积、位置等房屋信息。
下面 将介绍整个爬虫过程:
一、建立爬虫项目"lianjia"
在项目文件夹下执行"scrapy startproject lianjia_beijing"。执行该语句即可建立项目“lianjia_beijing”。
执行完后项目结构如下所示:
接着进入到项目文件夹lianjia_beijing(cd lianjia_beijing),执行"scrapy genspider lianjia https://bj.lianjia.com/ershoufang/"来建立爬虫文件 lianjia.py,执行完后的项目结构如下所示:
其中lianjia.py 用来书写爬虫程序,即从网页中抽取所需信息的程序;items.py用来书写项目的数据存储模型,即需要存储哪些字段;middlewares.py用来定义项目所需的中间件,在建立项目时会自行生成“爬虫中间件”和“下载中间件”,一般无需自己再书写;pipelines.py用于书写管道函数,进而处理爬取到的数据;settings.py用于书写爬虫项目的配置信息,包括数据库信息、编码信息等。
二、下面将分别介绍爬虫的各代码文件。
1、items.py文件
2、lianjia.py文件
lianjia.py 用来书写信息爬取逻辑
#设置抓取规则
'''
linkExtractor是链接提取器,对于访问到的网页A,提取网页A中符合筛选条件的链接,用于筛选的参数用两个:allow和restrict_xpath,其中allow用于限定url的范围,restrict_xpath用于限定在网页中的什么位置提取链接;follow参数设置为True时意味着从A中提取到的链接B等继续访问,把B中符合条件的链接提取出来,以此类推取出全站符合筛选条件的链接;
callback函数设置请求网页得到response后需要调用的函数,这里不要调用建立项目时默认生成的parse函数,需要自己新建立一个新的函数,否则调用会出问题;
Rule书写完后需要在括号后面添加逗号",",即使是仅有一个Rule,否则运行时会报错。
'''
3、pipelines.py文件
4、settings.py 文件
三、启动爬虫
输入启动命令 "scrapy crawl lianjia"。
这里在执行时遇到了问题,由于lianjia.py文件中没有删除创建项目自动生成的“parse”函数,虽然在Rule中指定了callback="parse_house",但是在执行爬虫时生成的response仍然会交给“parse”函数处理,影响爬虫的执行。删除"parse"函数后执行爬虫,爬虫可以正常执行。
下图显示的是爬取的北京链家二手房信息: