CrawlSpider
CrawlSpider类
CrawlSpider类常用于爬取一般的网站,其定义了一些规则(rule)来提供跟进链接的功能,使用非常方便。处理从Spider继承过来的属性外,还提供了一个新的属性ruels,该属性是一个过多个Rule对象的元组(list),每个Rule都对爬取网站的动作定义了特定的规则。如果多个Rule匹配了相同的链接,则根据它们在rules属性中被定义的顺序,第一个会被使用。CrawlSpider也提供了一个可复写的方法parse_start_url(response),当start_urls的请求返回时,该方法被调用。该方法分析最初的响应,返回一个Item对象或者一个Reqeust对象或者一个可迭代的包含二者的对象。
爬取规则Rule
class scrapy.contrib.spiders.Rule(link_extractor,callback=None,cb_kwargs=None, follow=None, process_links=None, process_request=None)
构造参数说明:
□ link_extractor : 是一个LinkExtractor对象,其定义了如何从爬取到的页面提取链接。
□ callback : 是一个callable 或 string,该spider中与string同名的函数将被调用。每次从link_extactor中获取到链接时将会调用该函数。该函数接收一个response最为第一个参数,并返回Item或Request对象。当编写爬虫规则时,应避免使用parse最为回调函数。由于CrawlSpider使用parse方法来实现其逻辑,如果您覆盖了parse方法,crawlspider将会运行失败。
□ cb_kwargs : 包含传递给回调函数的参数(keyword argument)的字典。
□ follow :是一个布尔值,指定了改规则从response提取的链接是否需要跟进。如果callback为None,follow默认设置为True,否则为False。
□ process_links : 是一个callable或string(该spider中同名的函数将会被调用)。从link_extractor中获取到链接列表时将会调用该函数。该方法主要用来过滤。
□ process_request:是一个callable或string(该spider中同名的函数将会被调用)。该规则提取到每个reqeust是都会调用该函数。该函数必须返回一个request会None。(用来过滤request)
LinkExtractor对象
LinkExtractor对象的构造,用来产生过滤规则。LinkExtractor常用的参数有:
□ allow : 提取满足正则表达式的链接。
□ deny : 排除正则表达式匹配的链接,优先级高于allow。
□ allow_domains : 允许的域名,可以是str或list。
□ deny_domains : 排除的域名,可以是str或list。
□ restrict_xpaths : 提取满足XPath选择条件的链接,可以是str或list。
□ restrict_css : 提取满足CSS选择条件的链接,可以是str或list。
□ tags : 提取指定标记下的链接,默认从a和area中提取,可以是str或list。
□ unique : 链接是否去重,类型为Boolean。
□ process_value : 值处理函数,优先级大于allow。
rules属性中即使只有一个Rule实例,后面也要用逗号 “ , ” 分隔。