crawlspider的使用

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
'''

你可能感兴趣的:(crawlspider的使用)