CrawlSpider是spider的派生类,其设计原理是爬取start_url列表中的网页,CrwalSpider定义了一些规则Rule提供跟进连接的机制,从爬取的网页中获取连接并继续爬取的工作。
1、创建通用爬虫的爬虫文件
scrapy genspider -t crawl 爬虫文件 域名
2、CrawlSpider继承与Spider类
class XcfcrawlspiderSpider(CrawlSpider):
#爬虫名称
name = 'xcfCrawlSpider'
#设置允许爬取的域
allowed_domains = ['xiachufang.com']
#设置起始的url
start_urls = ['http://www.xiachufang.com/category/']
rules = (
Rule(
LinkExtractor(allow=r'.*?/category/\d+/'),
callback='parse_item',
follow=True,
process_links='check_category_url'
),
)
3、rules
CrawlSpider使用rules属性决定爬虫爬取的规则,并将匹配后的url请求提交给引擎,完成后续的爬取工作。
link_extractor:
是一个Link Extractor对象,用于定义需要提取的链接
callback:
从link_extractor中每获取到链接得到Response时,会调用参数所指定的值作为回调参数,该回调函数接收一个response作为一个参数
follow:
是一个boolean值,指定了根据该规则从response提取的链接是否需要跟进
process_links:
指定spider中那个的函数将会被调用,从link_extractor中获取到链接列表时将会调用该函数,此方法用来过滤
process_request:
指定处理函数,根据该Rule提取到的每个Request时,该函数将会被调用,可以对Request进行处理,该函数必须返回Request或者None
注意:当编写爬虫规则时,避免使用parse作为回调函数
4、LinkExtractor
目的是提取连接
主要参数:
allow
满足括号中“正则表达式”的url会被提取,如果为空,则全部匹配
deny
满足括号中“正则表达式”的url一定不提取(优先级高于allow)
allow_domains
会提取的链接的domains
deny_domains
一定不会被提取连接的domains
restrict_xpaths
使用xpath表达式,和allow共同作用过滤连接