CrawlSpider
它是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则Rule来提供跟进链接的方便的机制,从爬取的网页结果中获取链接并继续爬取的工作.
通过下面的命令可以快速创建 CrawlSpider模板 的代码:
- scrapy genspider -t crawl 爬虫文件 域名
rules
CrawlSpider使用rules属性来决定爬虫的爬取规则,并将匹配后的url请求提交给引擎,完成后续的爬取工作。
在rules中包含一个或多个Rule对象,每个Rule对爬取网站的动作定义了某种特定操作,比如提取当前相应内容里的特定链接,是否对提取的链接跟进爬取,对提交的请求设置回调函数等。
class scrapy.spiders.Rule(
link_extractor,
callback = None,
cb_kwargs = None,
follow = None,
process_links = None,
process_request = None
)
主要参数
LinkExtractor:设置提取链接的规则(正则表达式)
allow=(), : 设置允许提取的目标url
deny=(), : 设置不允许提取的目标url(优先级比allow高)
allow_domains=(), :设置允许提取url的域
deny_domains=(), : 设置不允许提取url的域(优先级比allow_domains高)
restrict_xpaths=(),:根据xpath语法,定位到某一标签下提取链接
restrict_css=(),:根据css选择器,定位到某一标签下提取链接
unique=True, :如果出现多个相同的url,只会保留一个
strip=True:默认为true,表示去除url首尾空格
link_extractor,:link_extractor对象
callback=None, :设置回调函数
follow=None, :是否设置跟进
process_links=None, :可以设置回调函数,对所有提取到的url进行拦截
process_request=identity:可以设置回调函数,对request对象进行拦截
如果多个rule匹配了相同的链接,则根据规则在本集合中被定义的顺序,第一个会被使用
- LinkExtractors 的目的很简单: 提取链接。
每个LinkExtractor有唯一的公共方法是 extract_links(),它接收一个 Response 对象,并返回一个 scrapy.link.Link 对象。
LinkExtractors要实例化一次,并且 extract_links 方法会根据不同的 response 调用多次提取链接。