Scrapy框架之CrawlSpider操作 2018-11-0

2018-11-04  本文已影响0人  Mr_Du_Biao

CrawlSpider

一.简介

CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能。其中最显著的功能就是”LinkExtractors链接提取器“。Spider是所有爬虫的基类,其设计原则只是为了爬取start_url列表中网页,而从爬取到的网页中提取出的url进行继续的爬取工作使用CrawlSpider更合适。

二.使用

class ChoutiSpider(CrawlSpider):
    name = 'chouti'
    #allowed_domains = ['www.xcxx.com']
    start_urls = ['https://dig.chouti.com/r/scoff/hot/1']

    #实例化了一个链接提取器对象:allow:正则表达式
    #作用:将起始url对应的页面数据中符合allow指定的正则表达式的链接进行提取
    link = LinkExtractor(allow=r'/r/scoff/hot/\d+')
    rules = (
        #Rule规则解析器
        #作用:可以将连接提取器提取到的链接对应的页面数据进行指定规则的数据进行解析
        #参数follow作用:将连接提取器继续作用到连接提取器提取出的链接所对应的页面中
        Rule(link, callback='parse_item', follow=True),
    )

    def parse_item(self, response):
       print(response)

CrawlSpider类和Spider类的最大不同是CrawlSpider多了一个rules属性,其作用是定义”提取动作“。在rules中可以包含一个或多个Rule对象,在Rule对象中包含了LinkExtractor对象。

 LinkExtractor(

         allow=r'Items/',# 满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。
         deny=xxx,  # 满足正则表达式的则不会被提取。
         restrict_xpaths=xxx, # 满足xpath表达式的值会被提取
         restrict_css=xxx, # 满足css表达式的值会被提取
          deny_domains=xxx, # 不会被提取的链接的domains。 
    )

例题:提取糗事百科全站的作者和文章,
难点:使用crawlspider爬取是提取不到第一页

class QiubaiSpider(CrawlSpider):
    name = 'qiubai'
    #allowed_domains = ['www.xxx.com']
    start_urls = ['https://www.qiushibaike.com/pic/']
    link = LinkExtractor(allow=r'/pic/page/\d+\?s=\d+')
    #提取第一页的页码连接
    link1 = LinkExtractor(allow=r'/pic/page/1/')
    rules = (
        Rule(link1, callback='parse_item', follow=True),
        Rule(link, callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        print(response)
上一篇下一篇

猜你喜欢

热点阅读