zoukankan      html  css  js  c++  java
  • Scrapy之CrawlSpider

    问题:如果我们想要对某一个网站的全站数据进行爬取?
    解决方案:
      1. 手动请求的发送
      2. CrawlSpider(推荐)

    CrawlSpider概念:CrawlSpider其实就是Spider的一个子类。CrawlSpider功能更加强大(链接提取器,规则解析器)。

    创建:

    scrapy genspider –t crawl 爬虫名称  起始url

    爬虫相关操作

    # -*- coding: utf-8 -*-
    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    
    
    class ChoutiSpider(CrawlSpider):
        name = 'chouti'
        # allowed_domains = ['dig.chouti.com']
        start_urls = ['https://dig.chouti.com/']
    
        # 实例化了一个链接提取器对象
        # 链接提取器:用来提取指定的链接(url)
        # allow参数:赋值一个正则表达式
        # 链接提取器就可以根据正则表达式在页面中提取指定的链接
        # 提取到的链接会全部交给规则解析器
        link = LinkExtractor(allow=r'/all/hot/recent/d+')
        rules = (
            # 实例化了一个规则解析器对象
            # 规则解析器接收了链接提取器发送的链接后,就会对这些链接发起请求,获取链接对应的页面内容,就会根据指定的规则对页面内容指定的数据值进行解析
            # callback:指定一个解析规则(方法/函数)
            # fallow:是否将链接提取器继续作用到链接提取器提取出的链接所表示的页面数据中。
            # 比如提取到12页,那它就会提取12前面和12后面的页码,这样会有很多重复,但是不用担心,它会自动帮我们去重
            # 如果对全战数据进行爬取,需要让follow=True
            Rule(link, callback='parse_item', follow=True),
        )
    
        def parse_item(self, response):
            print(response)

    配置

    BOT_NAME = 'crawlSpiderPro'
    
    SPIDER_MODULES = ['crawlSpiderPro.spiders']
    NEWSPIDER_MODULE = 'crawlSpiderPro.spiders'
    
    # Crawl responsibly by identifying yourself (and your website) on the user-agent
    # USER_AGENT = 'crawlSpiderPro (+http://www.yourdomain.com)'
    USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    
    # Obey robots.txt rules
    ROBOTSTXT_OBEY = False
  • 相关阅读:
    【问题】SUSE已经安装了libsodium,安装zeromq时出现下面的错误?
    将博客搬至CSDN
    iOS开发之self.abc = nil与[_abc release]的区别
    Swift编程语言入门教程
    如何使用NSData处理数据
    集合之間的轉換
    數組排序
    集合类的用法总结(NSArray、NSDictionary、NSSet)
    NSString的各种用法总结(创建、截取、判断比较、转化数据类型、拼接、替换、添加、追加、读取、写入、删去、改变)
    instancetype和id的区别
  • 原文地址:https://www.cnblogs.com/lshedward/p/10711410.html
Copyright © 2011-2022 走看看