scrapy之分布式
分布式爬虫
- 概念:多台机器上可以执行同一个爬虫程序,实现网站数据的分布爬取。
- 原生的scrapy是不可以实现分布式爬虫?
a) 调度器无法共享
b) 管道无法共享
工具
scrapy-redis组件:专门为scrapy开发的一套组件。该组件可以让scrapy实现分布式。
a) 下载:pip install scrapy-redis
分布式爬取的流程
1)redis文件的配置 bind 127.0.0.1 进行注释 protected-model no 关闭保护模式
2)redis数据库的开启:要基于配置文件进行开启
服务器端redis-server.exe redis.windows.conf
客户端redis-cli
3)创建scrapy工程后,创建基于crawlSpider的爬虫文件
4)导入RedisCrawlSpider类,然后将爬虫文件修改成继承该类的源文件
5)将start_url修改成redis_key
6)将项目的管道和调度器配置成基于scrapy_redis组件的配置
7)执行爬虫文件:进入到爬虫文件目录内,执行scrapy runspider 爬虫文件.py
程序进入监听状态
8)将起始url扔进调度器中 redis数据库客户端执行 lpush 调度器名称 url
keys * 》》lrange qiubai:items 0 -1
代码
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from redisPro.items import RedisproItem
from scrapy_redis.spiders import RedisCrawlSpider
from redisPro.items import RedisproItem class QiubaiSpider(RedisCrawlSpider):
name = 'qiubai'
#allowed_domains = ['https://www.qiushibaike.com/pic/']
#start_urls = ['https://www.qiushibaike.com/pic/'] #调度器队列的名称
redis_key = 'qiubaispider' #表示跟start_urls含义是一样
# 链接提取器
link = LinkExtractor(allow=r'/pic/page/\d+')
rules = (
# 规则解析器
Rule(link, callback='parse_item', follow=True),
) def parse_item(self, response):
#将图片的url进行解析 div_list = response.xpath('//*[@id="content-left"]/div')
for div in div_list:
img_url = div.xpath('./div[@class="thumb"]/a/img/@src').extract_first()
item = RedisproItem()
item['img_url'] = img_url yield item
配置
除了之前的设置外,还需要如下设置
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
#'redisPro.pipelines.RedisproPipeline': 300,
'scrapy_redis.pipelines.RedisPipeline': 300,
} .... # 使用scrapy-redis组件的去重队列
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 是否允许暂停
SCHEDULER_PERSIST = True
【补充】
#如果redis服务器不在自己本机,则需要在setting中进行如下配置
REDIS_HOST = 'redis服务的ip地址'
REDIS_PORT = 6379
然后按流程操作执行就可以了!
scrapy之分布式的更多相关文章
- Scrapy 框架 分布式 爬虫
分布式 爬虫 scrapy-redis 实现 原生scrapy 无法实现 分布式 调度器和管道无法被分布式机群共享 环境安装 - pip install scrapy_redis 导包:from sc ...
- scrapy简单分布式爬虫
经过一段时间的折腾,终于整明白scrapy分布式是怎么个搞法了,特记录一点心得. 虽然scrapy能做的事情很多,但是要做到大规模的分布式应用则捉襟见肘.有能人改变了scrapy的队列调度,将起始的网 ...
- Scrapy-redis改造scrapy实现分布式多进程爬取
一.基本原理: Scrapy-Redis则是一个基于Redis的Scrapy分布式组件.它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule),并对爬取产生的项目(it ...
- 基于scrapy的分布式爬虫抓取新浪微博个人信息和微博内容存入MySQL
为了学习机器学习深度学习和文本挖掘方面的知识,需要获取一定的数据,新浪微博的大量数据可以作为此次研究历程的对象 一.环境准备 python 2.7 scrapy框架的部署(可以查看上一篇博客的简 ...
- scrapy进行分布式爬虫
今天,参照崔庆才老师的爬虫实战课程,实践了一下分布式爬虫,并没有之前想象的那么神秘,其实非常的简单,相信你看过这篇文章后,不出一小时,便可以动手完成一个分布式爬虫! 1.分布式爬虫原理 首先我们来看一 ...
- 16 Scrapy之分布式爬虫
redis分布式部署 1.scrapy框架是否可以自己实现分布式? - 不可以.原因有二. 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls ...
- scrapy补充-分布式爬虫
spiders 介绍:在项目中是创建爬虫程序的py文件 #1.Spiders是由一系列类(定义了一个网址或一组网址将被爬取)组成,具体包括如何执行爬取任务并且如何从页面中提取结构化的数据. #2.换句 ...
- cnblogs 博客爬取 + scrapy + 持久化 + 分布式
目录 普通 scrapy 分布式爬取 cnblogs_spider.py 普通 scrapy # -*- coding: utf-8 -*- import scrapy from ..items im ...
- 爬虫--scrapy+redis分布式爬取58同城北京全站租房数据
作业需求: 1.基于Spider或者CrawlSpider进行租房信息的爬取 2.本机搭建分布式环境对租房信息进行爬取 3.搭建多台机器的分布式环境,多台机器同时进行租房数据爬取 建议:用Pychar ...
随机推荐
- 连接Mysql时出现java.math.BigInteger cannot be cast to java.lang.Long问题
今天遇见这样一个坑.在连接数据库进行查询数据时,大家可能会遇见这样一个问题:java.math.BigInteger cannot be cast to java.lang.Long,然后去检查代码中 ...
- 微信小程序入门开发文档
第一步:下载微信小程序开发者工具并安装,下载路径: https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html 进到下载界面后,根 ...
- Android Studio 创建虚拟机失败 Failed to load 解决办法
Name: Nexus_S_API_21 CPU/ABI: ARM (armeabi) Path: H:\Users\Pavkoo\.android\avd\Nexus_S_API_21.avd Er ...
- Lync二次开发关于Lync启动退出问题
以前使用C++开发的version.dll文件,由于各个用户环境的不同,造成某些用户加载不了我们开发的插件,并且写version.dll的同事还没找到好的解决办法,所以得换一种思路去解决这个问题,就是 ...
- JavaScript平台Platypi悄然登场
几个月前,一个新的JavaScript平台Platypi悄然诞生.它为开发者提供的不仅仅是一套标准的MVC框架而已,由于它是基于TypeScript构建的,因此对开发者而言在熟悉之中透露出与众不同的感 ...
- 西门子 SINAMICS S120 Web server 用户名和默认密码
sinamics web server可以通过浏览器查看驱动器故障等信息,是一个比较方便的辅助工具. 1. 一般用户 SINAMICS 密码 无 2. 管理员 Administrator 密码 Adm ...
- Selenium入门16 获取页面源代码
页面源代码:page_source属性 获取源代码之后,再用正则表达式匹配出所有的链接,代码如下: #coding:utf-8 from selenium import webdriver impor ...
- Gym 100090M Jumping along the Hummocks
题意: 从 前往后跳,要么跳一步,跳到相邻的位置,要么跳到下一个数字相同的位置,求跳到最后的最少步数. dp,但是会tle,我用map优化了一下. #include <bits/stdc++.h ...
- 富文本 文字图片点击,(TextView)
textview上的富文本支持 文字,图片的点击事件 - (void)protocolIsSelect:(BOOL)select { NSMutableAttributedString *attrib ...
- 错误:javax.servlet.http.HttpServlet" was not found on the Java Build Path
我们在用Eclipse进行Java web开发时,可能会出现这样的错误: The superclass javax.servlet.http.HttpServlet was not found on ...