美文网首页
crawlspider的常见操作

crawlspider的常见操作

作者: sheyou2019 | 来源:发表于2018-05-29 18:30 被阅读0次

    创建项目

    scrapy startproject 项目名称
    

    模板创建

    scrapy genspider -t crawl 模板名称 域名
    

    CrawlSpider继承于Spider类,除了继承过来的属性外(name、allow_domains),还提供了新的属性和方法:

    LinkExtractors

    class scrapy.linkextractors.LinkExtractor
    

    每个LinkExtractor有唯一的公共方法是 extract_links(),它接收一个 Response 对象,并返回一个 scrapy.link.Link 对象。
    Link Extractors要实例化一次,并且 extract_links 方法会根据不同的 response 调用多次提取链接。

    主要参数:
        
            allow:满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。
            
            deny:与这个正则表达式(或正则表达式列表)不匹配的URL一定不提取。
            
            allow_domains:会被提取的链接的domains。
            
            deny_domains:一定不会被提取链接的domains。
            
            restrict_xpaths:使用xpath表达式,和allow共同作用链接
    

    rules

    rules包含了一个或多个连接对象,每个rule对爬取网站的规则做了特定的操作
    rles中的主要参数link_extractor:是一个Link Extractor对象,用于定义需要提取的链接。
    callback: 从link_extractor中每获取到链接时,参数所指定的值作为回调函数,该回调函数接受一个response作为其第一个参数。

     注意:当编写爬虫规则时,避免使用parse作为回调函数。由于CrawlSpider使用
                     
     parse方法来实现其逻辑,如果覆盖了 parse方法,crawl spider将会运行失败。
    
      follow:是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否
    
    需要跟进。 如果callback为None,follow 默认设置为True ,否则默认为False。
    

    案例


    # -*- coding: utf-8 -*-
    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    
    
    class DemoSpider(CrawlSpider):
        name = 'demo'
        allowed_domains = ['foods1.com']
      #初始url
        start_urls = ['http://www.foods1.com/sort?sort=AAA&st=product&page=1']
    
        rules = (
            获取下一页链接
            Rule(LinkExtractor(restrict_xpaths=u"//a[text()='»']"), callback='parse_item', follow=True),
            获取详情页链接
            Rule(LinkExtractor(restrict_xpaths="//div[@class='bt_zi']/a"), callback='parse_info', follow=True),
        )
    
        def parse_item(self, response):
            title=response.xpath("//div[@class='bt_zi']/a/text()").extract().extract()#提取目标数据
            for x in title:
                print "--------------",x(Python2中输入括号会变成uncode编码)
        def parse_info(self,response):
            name=response.xpath("//div[@class='name_bt']/text()").extract()[0]
            print name
    

    相关文章

      网友评论

          本文标题:crawlspider的常见操作

          本文链接:https://www.haomeiwen.com/subject/dliajftx.html