Spider的用法
在Scrapy中,要抓取网站的链接配置、抓取逻辑、解析逻辑等其实都是在Spider中配置的
Spider运行流程
实现Scrapy爬虫项目时,最核心的类便是Spider类,它定义了如何爬取某个网站的流程和解析方式
Spider要做的事就是如下两件:
1.定义爬取网站的动作
2.分析爬取下来的网页
对于Spider类来说,整个爬取循环如下所述
1.以初始的URL初始化Request,并设置回调函数。当该Request成功请求返回时,将生成Response,并作为参数传给该回调函数
2.在回调函数内分析返回的网页内容,返回结果可以有两种形式
1.解析到的有效结果返回字典或Item对象,下一步可经过处理后(或直接)保存
2.解析到的下一个链接,可以利用此链接构造Request并设置新的回调函数,返回Request
3.如果返回的是字典或Item对象,可通过Feed Exports等形式存入文件。如果设置Pipeline,可以经由Pipeline处理(如过滤、修正等)并保存
4.如果返回的是Request,那Request执行成功得到Response之后会再次传递给Request中定义的回调函数,可以再次使用选择器来分析新得到的网页内容并根据分析的数据生成Item
Spider类分析
Spider继承自scrapy.spiders.Spider
这个类是最简单最基本的Spider类,每个其他的Spider必须继承自这个类
基础属性
name:爬虫名称 是定义Spider名字的字符串,Spider的名字定义了Scrapy如何定位并初始化Spider,所以必须是唯一的
allowed_domains:允许爬取的域名 是可选配置,不在此范围的链接不会被跟进爬取
start_urls:起始URL列表 当没有实现start_requests方法时,默认会从这个列表开始抓取
custom_settings:是一个字典 是专属于本Spider的配置,此设置会覆盖项目全局的设置,而 且此设置必须在初始化前被更新,所以它必须定义成类变量
crawler:此属性是由from_crawler方法设置的
代表的是本Spider类对应的Crawler对象,Crawler对象中包含了很多项目组件利用它可以获取项目的一些配置信息,如最常见的就是获取项目的设置信息,即Settings
settings:是一个Settings对象 利用它我们可以直接获取项目的全局设置变量
Spider常用方法
start_requests:用于生成初始请求,必须返回一个可迭代对象
parse:当Response没有指定回调函数时,该方法会默认被调用负责处理Response,处理返回结果,并从中提取出想要的数据和下一步的请求,然后返回该方法需要返回一个包含Request或Item的可迭代对象
closed:当Spider关闭时,该方法会被调用,在这里一般会定义释放资源的一些操作或其他收尾操作