爬虫--Scrapy-CrawlSpider&分布式爬虫

Posted foremostxl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫--Scrapy-CrawlSpider&分布式爬虫相关的知识,希望对你有一定的参考价值。

CrawlSpider

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

之前的事基于Spider类

CrawlSpider概念:CrawlSpider其实就是Spider的一个子类。CrawlSpider功能更加强大(链接提取器,规则解析器)。 代码: 1. 创建一个基于CrawlSpider的爬虫文件 a) scrapy genspider –t crawl 爬虫名称 起始url

-------

scrapy.spiders.CrawlSpider

   创建项目:scrapy startproct

   创建爬虫:scrapy genspider –t crawl

   核心处理规则: from scrapy.spiders import CrawlSpider, Rule

 核心处理提取: from scrapy.linkextractors import LinkExtractor

 

创建工程scrapy startproject crawlSpiderPro

cd crawlSpiderPro

创建爬虫文件  scrapy genspider -t crawl chouti  dig.chouti.com

基于scrapySpider爬虫文件的和基于spider的不同之处

爬虫文件chouti.py

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:指定一个解析规则(方法/函数)
        #follow:是否将链接提取器继续作用到连接提取器提取出的链接所表示的页面数据中
        Rule(link, callback=parse_item, follow=),
    )

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

     # 对应的编写response.xpath()---存到items ----将items传给管道---在管道进行持久化存储
# follow=True 所有的页面数据

 

技术分享图片

技术分享图片

技术分享图片

 link = LinkExtractor(allow=r/all/hot/recent/d+)

 ---------------------------------------------

Rule(link, callback=parse_item, follow=True),

技术分享图片

分布式爬虫

分布式爬虫:
1.    概念:多台机器上可以执行同一个爬虫程序,实现网站数据的分布爬取。
2.    原生的scrapy是不可以实现分布式爬虫?
  a)    调度器无法共享
  b)    管道无法共享
3.    scrapy-redis组件:专门为scrapy开发的一套组件。该组件可以让scrapy实现分布式。
  a)    下载:pip install scrapy-redis
4.    分布式爬取的流程:
  a)    redis配置文件的配置:
    i.    bind 127.0.0.1 进行注释
    ii.    protected-mode no   关闭保护模式
  b) redis服务器的开启:基于配置配置文件----
技术分享图片

  c)    创建scrapy工程后,创建基于crawlSpider的爬虫文件
  d)    导入RedisCrawlSpider类,然后将爬虫文件修改成基于该类的源文件
  e)    将start_url修改成redis_key = ‘XXX’
  f)    在配置文件中进行相应配置:将管道配置成scrapy-redis集成的管道
  g)    在配置文件中将调度器切换成scrapy-redis集成好的调度器
  h)    执行爬虫程序:scrapy runspider  xxx.py
  i)    redis客户端:lpush 调度器队列的名称 “起始url”


【补充】
#如果redis服务器不在自己本机,则需要在setting中进行如下配置
REDIS_HOST = redis服务的ip地址
REDIS_PORT = 6379


【注意】近期糗事百科更新了糗图板块的反爬机制,更新后该板块的页码链接
/pic/page/2/s=5135066,末尾的数字每次页面刷新都会变化,
因此爬虫文件中链接提取器的正则不可写为/pic/page/d+/s=5135066而应该修改成/pic/page/d+

 

以上是关于爬虫--Scrapy-CrawlSpider&分布式爬虫的主要内容,如果未能解决你的问题,请参考以下文章

爬虫请求相关

解决爬虫中文乱码问题

pythonp爬虫 爬取百度音乐

C#写爬虫,版本V2.0

scrapy爬虫天猫笔记本电脑销量前60的商品

Python实训day07am爬取数据接口webdriver自动化测试工具selenium