1、crawlspider
crawlspider是什么?
就是一个类,CrawlSpider是spider的子类;还有自己的一个独有功能,提取链接的功能,在提取链接的时候,是根据规则提取的
如何使用crawlspider?
1、需要导入连接提取器类的对象
from scrapy.linkextractors import LinkExtractor
2、实例化一个链接提取器
lk = LinkExtractor(allow=XXX,restrict_xpaths=XXX,restrict_css=XXX)
解析:
allow:正则表达式
restrict_xpaths:xpath路径
restrict_css:选择器
正则表达式:
lk = LinkExtractor(allow=r'正则表达式')
ret = lk.extract_links(response)
xpath:
lk = LinkExtractor(restrict_xpaths='xpath路径')
ret = lk.extract_links(response)
css:
lk = LinkExtractor(restrict_css='css选择器')
ret = lk.extract_links(response)
目前这个Crawlspider只是用来提取a链接的
生成crawlspider爬虫文件的命令:
scrapy genspider -t crawl 爬虫名字 域名
提取规则过来,是callback处理每个页面的提取的具体信息,follow是跟进,要不要继续在在处理的页面里面,继续按照规则提取
如果只是想提取链接,callback可以为空,会自动提交给parse来自动提取链接
如果有callback会先给callback去处理页面的信息,再给parse提取信息链接
如果有两个处理的规则,第一个规则没有callback处理函数,会自动给parse函数提取链接,如果follw为False,第二个规则是处理每个页面的具体信息,会先处理第一个页面过来的信息,但是如果第一个规则的follw为False,那么第二页的链接就不会提取,要不要提取链接,是根据fllow决定的,为True,则继续提取,为False则不会提取
'''
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
'''
Rule:规则类,意思是,向链接提取器提取的链接发送请求之后,得到响应,
通过Rule规则来执行响应的处理和规则的接着提取
'''
class DoudouSpider(CrawlSpider):
name = 'doudou'
allowed_domains = ['douban.com']
start_urls = ['http://douban.com/']
#规则原则,可以写多个规则;里面都是规则对象
'''
Rule规则对象创建需要3个参数
参数1:链接提取器
参数2:回调函数,和spider的区别,spider的callback要写self.paser_XXX
而crawlspider的callback要写'parse__XXX'
参数3:follow,跟进
提取的链接,响应来了之后,通过callback处理完之后,要不要接着按照
这个规则提取连接,如果要,就是True,如果不要,就是False
注意:follow有默认值,如果有callback,follow默认为False.如果没有callback,follow默认为True
没有parse函数,parse函数就是用来提取链接的,parse函数不能重写,如果重写,Crawlspider
就不能用了
'''
rules = (
Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
)
def parse_item(self, response):
i = {}
#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
#i['name'] = response.xpath('//div[@id="name"]').extract()
#i['description'] = response.xpath('//div[@id="description"]').extract()
return i
'''