scrapy与全站爬虫

创建crawlscrapy的模版:

>>>scrapy genspider --list

scrapy与全站爬虫_第1张图片
scrapy genspider --list

其中crawl模版就是本次用于编写全站爬虫所用。

创建模版

使用该模版创建爬虫的命令:

>>>scrapy genspider -t crawl XXX(脚本名) XXX(目标网站域名)

于是在spiders下出现量一个脚本:

scrapy与全站爬虫_第2张图片
爬虫脚本

在settings.py中将项目的根目录插入python的环境变量中,方便后面路径的引用等操作。

插入

编写Rule

打开spider下的脚本,填充Rule部分的内容,Rule的作用是用正则表达式匹配对应的URL并进行回调,可以是一个正则表达式字符串或者是一个正则表达式元组:

scrapy与全站爬虫_第3张图片
填充Rules部分

然后在main.py中启动脚本

编写Items

在items.py中构造一个对应的数据类:

scrapy与全站爬虫_第4张图片
items.py

为Item配置数据

打开spider下的脚本,引入item并配置好数据。

scrapy与全站爬虫_第5张图片
配置好数据

selenium加载动态页面

将Selenium集成到scrapy

配置中间键

在middlewares.py中引入selenium,用于处理特定的页面,并返回一个response

scrapy与全站爬虫_第6张图片
配置中间键

别忘了在settings.py中设置一下:

scrapy与全站爬虫_第7张图片
settings.py

优化一下,我们可以把selenium启动浏览器后的状态写到一个类实例的初始化函数里,这样以后就不需要频繁启动浏览器了:

scrapy与全站爬虫_第8张图片
优化

但是这样做后还是有一个小问题,就是浏览器访问页面完成后,spider都finished了,浏览器却没有关闭。基于此,我们进一步优化一下,把浏览器打开的过程直接写到spider里面。然后在middlewares.py中把self.broswer改成spider.broswer。

scrapy-splash加载动态页面:

scrapy自带一个加载动态页面的工具,scrapy-splash。

你可能感兴趣的:(scrapy与全站爬虫)