学科分类
目录
网络爬虫

通过Rule类决定爬取规则

CrawlSpider类使用rules属性来决定爬虫的爬取规则,并将匹配后的URL请求提交给引擎。所以在正常情况下,CrawlSpider不需要单独手动返回请求了。

在rules属性中可以包含一个或多个Rule对象,每个Rule对象都对爬取网站的动作定义了某种特定操作,比如提取当前相应内容里的特定链接,是否对提取的链接跟进爬取,对提交的请求设置回调函数等。如果包含了多个Rule对象,那么每个Rule轮流处理Response。

每个Rule对象可以规定不同的处理item的parse_item方法,但是一般不使用Spider类已定义的parse方法。

如果多个Rule对象匹配了相同的链接,则根据规则在本集合中被定义的顺序,第一个会被使用。

Rule类的构造方法定义如下所示。

class scrapy.spiders.Rule(
     link_extractor, 
     callback = None, 
     cb_kwargs = None, 
     follow = None, 
     process_links = None, 
     process_request = None
)

Rule类的构造方法一共有6个参数,对这些参数的详细介绍如下:

  • link_extractor:是一个Link Extractor对象,用于定义链接的解析规则。

  • callback:指定了回调方法的名称。从link_extractor中获取到链接时,该参数所指定的值作为回调方法。该回调方法必须接收一个response对象作为其第一个参数,并且返回一个由Item、Request对象或者它们的子类所组成的列表。

注意:当编写爬虫规则时,避免使用parse作为回调函数。由于CrawlSpider使用parse方法来实现其逻辑,如果覆盖了parse方法,crawl spider将会运行失败。

  • cb_kwargs:是一个字典,包含了传递给回调方法的参数,默认值是None。

  • follow:是一个布尔(boolean)值,指定了根据本条Rule从response对象中提取的链接是否需要跟进。如果callback参数值为None,则follow 默认值为True ,否则默认值为False。

  • process_links:指定回调方法的名称,该回调方法用于处理根据link_extractor从response对象中获取到的链接列表。该方法主要用来过滤链接。

  • process_request:指定回调方法的名称,该回调方法用于根据本rule提取出来的request对象,其返回值必须是一个request对象或者None(表示将该request过滤掉)。

点击此处
隐藏目录