scrapy爬虫-scrapy-redis分布式
1、如何将一个scrapy爬虫项目修改成为一个简单的分布式爬虫项目
官方文档:https://scrapy-redis.readthedocs.io/en/stable/
只用修改scrapy项目的两个文件就可以了
一个是爬虫组件文件:
# -*- coding: utf-8 -*-
import scrapy
from scrapy_redis.spiders import RedisSpider # 自定义爬虫类的继承类不再是scrapy.spiders下面的爬虫类,
# 而是scrapy-redis.spiders下面的爬虫类
class DistributedSpiderSpider(RedisSpider):
name = 'distributed_spider'
allowed_domains = ['wh.lianjia.com']
# 将start_urls替换为redis_key
# start_urls = ['https://wh.lianjia.com/ershoufang/']
redis_key = "myspider:start_urls" def parse(self, response):
print(response.meta)
item = dict()
item["province"] = "湖北"
item["city"] = "武汉"
blocks = response.xpath("//div[@class='position']/dl[2]/dd/div[1]/div/a")
for block in blocks:
title = blocks.xpath("./@title").get()
url = "https://wh.lianjia.com" + block.xpath("./@href").get() print(title, url, "=====================================") yield scrapy.Request(url=url, callback=self.parse_block, meta={"item": item}) def parse_block(self, response):
print(response.meta)
url = response.url + "pg%dco32/"
index = 1
while index < 100:
new_url = url % index
print(new_url)
yield scrapy.Request(url=new_url, callback=self.parse_item, meta={"item": response.meta["item"]})
index += 1 def parse_item(self, response):
print(response.meta)
sellLinks = response.css("ul.sellListContent>li>a")
for link in sellLinks:
url = link.xpath("./@href").get()
print(url)
yield scrapy.Request(url=url, callback=self.parse_detail, meta={"item": response.meta["item"]}) def parse_detail(self, response):
item = response.meta["item"]
print(response.meta)
item["url"] = response.url
item["block"] = response.css("div.areaName>span.info").xpath("./a[1]/text()").get().strip()
item["smallBlock"] = response.css("div.areaName>span.info").xpath("./a[2]/text()").get().strip()
item["price"] = response.xpath("//span[@class='total']/text()").get().strip() + "万"
item["unitPrice"] = response.xpath("//span[@class='unitPriceValue']/text()").get().strip() + "元/平米"
print(item)
另一个是设置文件(settings.py):
在设置文件中添加几个设置项就可以了
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
ITEM_PIPELINES = {
   'DistributedSpider.pipelines.DistributedspiderPipeline': 300,
   'scrapy_redis.pipelines.RedisPipeline': 400
}
REDIS_HOST = "localhost"  # 要连接的redis数据库的地址
REDIS_PORT = ""  # redis数据库启动时的默认端口
scrapy爬虫-scrapy-redis分布式的更多相关文章
- [scrapy-redis] 将scrapy爬虫改造成分布式爬虫 (2)
		1. 修改redis设置 redis默认处在protection mode, 修改/etc/redis.conf, protected-mode no, 或者给redis设置密码, 将bind 127 ... 
- <scrapy爬虫>scrapy命令行操作
		1.mysql数据库 2.mongoDB数据库 3.redis数据库 1.创建项目 scrapy startproject myproject cd myproject 2.创建爬虫 scrapy g ... 
- python - scrapy 爬虫框架 ( redis去重 )
		1. 使用内置,并加以修改 ( 自定义 redis 存储的 keys ) settings 配置 # ############### scrapy redis连接 ################# ... 
- 自己动手实现爬虫scrapy框架思路汇总
		这里先简要温习下爬虫实际操作: cd ~/Desktop/spider scrapy startproject lastspider # 创建爬虫工程 cd lastspider/ # 进入工程 sc ... 
- (5)分布式下的爬虫Scrapy应该如何做-windows下的redis的安装与配置
		软件版本: redis-2.4.6-setup-64-bit.exe — Redis 2.4.6 Windows Setup (64-bit) 系统: win7 64bit 本篇的内容是为了给分布式下 ... 
- Scrapy+Scrapy-redis+Scrapyd+Gerapy 分布式爬虫框架整合
		简介:给正在学习的小伙伴们分享一下自己的感悟,如有理解不正确的地方,望指出,感谢~ 首先介绍一下这个标题吧~ 1. Scrapy:是一个基于Twisted的异步IO框架,有了这个框架,我们就不需要等待 ... 
- 爬虫---scrapy分布式和增量式
		分布式 概念: 需要搭建一个分布式的机群, 然后在每一台电脑中执行同一组程序, 让其对某一网站的数据进行联合分布爬取. 原生的scrapy框架不能实现分布式的原因 调度器不能被共享, 管道也不能被共享 ... 
- (8)分布式下的爬虫Scrapy应该如何做-图片下载(源码放送)
		转载主注明出处:http://www.cnblogs.com/codefish/p/4968260.html 在爬虫中,我们遇到比较多需求就是文件下载以及图片下载,在其它的语言或者框架中,我们可能 ... 
- (2)分布式下的爬虫Scrapy应该如何做-关于对Scrapy的反思和核心对象的介绍
		本篇主要介绍对于一个爬虫框架的思考和,核心部件的介绍,以及常规的思考方法: 一,猜想 我们说的爬虫,一般至少要包含几个基本要素: 1.请求发送对象(sender,对于request的封装,防止被封) ... 
随机推荐
- Linux 进程信号量
			#include<stdlib.h> #include<stdio.h> #include<sys/types.h> #include<sys/ipc.h&g ... 
- redis数据库写入数据时提示redis.exceptions.ResponseError错误
			今天运行Django项目在redis数据库写入数据时提示如下错误: ERROR log 228 Internal Server Error: /image_code/cf9ccd75-d274-45c ... 
- 二十八、rsync同步工具深入
			1.将rsync服务加入到自启动文件rc.local echo "/usr/bin/rsync --daemon" >>/etc/rc.local tail -l rc ... 
- F. Maximum Weight Subset(贪心or树形dp解法)
			题:https://codeforces.com/contest/1249/problem/F 题意:给一颗树,边权为1,节点有点权,问取到一个点集,俩俩之间路径超过k,是点权和最大 思路:贪心地取点 ... 
- PAT甲级——1011 World Cup Betting
			PATA1011 World Cup Betting With the 2010 FIFA World Cup running, football fans the world over were b ... 
- Win7如何查看nvidia显卡(GPU)的利用率
			1.在文件夹C:\Program Files\NVIDIA Corporation\NVSMI里找到文件nvidia-smi.exe2.把该文件拖到命令提示符窗口(win+R,再输入‘CMD’进入), ... 
- mysql安装后,进DOS输入命令mysql,提示错误:mysql ERROR 1045 (28000)的解决办法
			一.修改my.ini文件,并重启mysql服务 找到配置文件my.ini ,然后将其打开,可以选择用记事本打开 打开后,搜索mysqld关键字,找到后,在mysqld下面添加skip-grant-t ... 
- OpenCV C++常用功能介绍
			显示图片 IplImage* img = cvLoadImage("-/temp.jpeg", 1); //create a window to display the image ... 
- Rip路由实验
			以上是实验要求和实验拓扑图 (实验拓扑自己重新连线) 1.在R1-R4,4台路由器上各设置一个回环口 2.略 3.在四个路由器上配置rip(rip的基本命令) #rip 1 #version 2 #u ... 
- prototype与__proto__
			__proto__是每个对象都有的一个属性,而prototype是函数才会有的属性!!! 使用Object.getPrototypeOf()代替__proto__!!! 一.prototype 几乎所 ... 
