• 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
  • 相关阅读:
    kickstart自动化安装
    linux双网卡绑定
    作死实验,删除libc.so.6
    安装centos6及安装redhat6后的配置
    交换机、linux光衰查询
    ansible的简单使用
    linux安全配置学习
    vm的三种网络模式
    Recylerview的使用系列教程
    Android自定义组合控件
  • 原文地址:https://www.cnblogs.com/lshedward/p/10711410.html
Copyright © 2020-2023  润新知