一、CrawlSpider
CrawlSpider除了从Spider继承过来的属性外,还提供了新的rules属性,提供跟进链接功能,
rules属性是一个包含一个或多个Rule对象的集合,
每个Rule对爬取网站的动作定义了特定的规则,
对于多个Rule匹配相同的链接,根据它们在rules属性中被定义的顺序,第一个被使用。
可以复写parse_start_url(response)方法,当start_url的请求返回时,该方法被调用。
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从link_extractor中获取的链接将会调用改函数,避免使用parse作为回调函数
cb_kwargs传递给回调函数的参数的字典
follow一个布尔值,指定提取的链接是否需要跟进
process_links从link_extractor中获取的链接将会调用改函数,用来过滤链接
process_request提取到的每个Request都会调用该函数,用来过滤Request
class CnblogsSpider(CrawlSpider):
name = "blogs"
allowed_domains = ["blogs.com"]
start_urls = [
"http://www.blogs.com/boy/default.html"
]
rules = (
Rule(LinkExtractor(allow=("/boy/default.html")),
follow=True,
callback="parse_item"
),
)
def parse_item(self, response):
pass
rules属性中只有一个Rule实例,也要在后面用逗号“,”分隔
关于LinkExtractor对象的构造参数:
allow:提取满足正则表达式的链接
deny:排除满足正则表达式的链接
allow_domains:允许的域名
deny_domains:排除的域名
restrict_xpaths:提取满足XPath选择条件的链接
restrict_css:提取满足css选择条件的链接
unique:链接是否去重,布尔类型
二、XMLFeedSpider
通过迭代各个节点来分析XML源,
迭代器可以选择:Iternodes、XML、HTML,默认是Iternodes
属性:
iterator:选择迭代器
itertag:开始迭代的节点名
namespaces:命名空间
可被重写方法:
adapt_response(response):Spider分析Response前被调用,返回一个Response
parse_node(response,selector):当节点符合提供的itertag时,被调用
process_results(response,results):当Spider返回Item或Request时,被调用,在结果返回给框架核心前做最后的修改处理如修改Item的内容。返回一个结果列表。
class XMLSpider(XMLFeedSpider):
name = "xmlspider"
allowed_domains = ["blogs.com"]
start_urls = [
"http://www.blogs.com/boy/default.html"
]
iterator = "html"
itertag = "entry"
def adapt_response(self, response):
return response