Day21 21.2:CrawlSpider-redis分布式爬虫
CrawlSpider-redis分布式
分布式在日常开发中并不常用,只是一个噱头!
概念:
- 可以使用多台电脑搭建一个分布式机群,使得多台对电脑可以对同一个网站的数据进行联合且分布的数据爬取。
声明:
- 原生的scrapy框架并无法实现分布式操作!why?
- 多台电脑之间无法共享同一个调度器
- 多台电脑之间无法共享同一个管道
- 原生的scrapy框架并无法实现分布式操作!why?
如何是的scrapy可以实现分布式呢?
- 借助于一个组件:scrapy-redis
- scrapy-redis的作用是什么?
- 可以给原生的scrapy框架提供可被共享的调度器和管道!
- 环境安装:pip install scrapy-redis
- 注意:scrapy-redis该组件只可以将爬取到的数据存储到redis数据库
编码流程(重点):
1.创建项目
2.cd 项目
3.创建基于crawlSpider的爬虫文件
3.1 修改爬虫文件
导包:from scrapy_redis.spiders import RedisCrawlSpider
修改当前爬虫类的父类为 RedisCrawlSpider
class FbsSpider(RedisCrawlSpider):
将start_urls替换成redis_key的操作
redis_key变量的赋值为字符串,该字符串表示调度器队列的名称
# start_urls = ["http://www.xxx.com/"]
#redis_key的赋值为字符串,该字符串表示调度器队列的名称
redis_key = '队列名称'
进行常规的请求操作和数据解析
4.settings配置文件的修改
常规内容修改(robots和ua等),先不指定日志等级
USER_AGENT : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
指定可以被共享的管道类
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 400
}
指定可以被共享的调度器
# 使用scrapy-redis组件的去重队列
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 是否允许暂停
SCHEDULER_PERSIST = True
指定数据库
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
5.修改redis数据库的配置文件--redis数据库文件目录(redis.windows.conf)
在配置文件中改行代码是没有被注释的:
bind 127.0.0.1
#将上述代码注释即可(解除本机绑定,实现外部设备访问本机数据库 如果配置文件中还存在:protected-mode = true,将true修改为false,
修改为false后表示redis数据库关闭了保护模式,表示其他设备可以远程访问且修改你数据库中的数据
6.启动redis数据库的服务端和客户端
- CMD运行:redis-server和redis-cli
7.运行项目,发现程序暂定一直在等待,等待爬取任务
8.需要向可以被共享的调度器的队列(redis_key的值)中放入一个起始的url
在redis数据库的客户端执行如下操作:
CMD:lpush 队列名称 起始的url
起始url:https://wz.sun0769.com/political/index/politicsNewest?id=1&page=1
Day21 21.2:CrawlSpider-redis分布式爬虫的更多相关文章
- 【Python3爬虫】学习分布式爬虫第一步--Redis分布式爬虫初体验
一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...
- 【Python3爬虫】爬取美女图新姿势--Redis分布式爬虫初体验
一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...
- 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询
第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...
- 四十四 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询
1.elasticsearch(搜索引擎)的查询 elasticsearch是功能非常强大的搜索引擎,使用它的目的就是为了快速的查询到需要的数据 查询分类: 基本查询:使用elasticsearch内 ...
- Scrapy+redis实现分布式爬虫
概述 什么是分布式爬虫 需要搭建一个由n台电脑组成的机群,然后在每一台电脑中执行同一组程序,让其对同一网络资源进行联合且分布的数据爬取. 原生Scrapy无法实现分布式的原因 原生Scrapy中调度器 ...
- Python分布式爬虫打造搜索引擎完整版-基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站
Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 https://github.com/mtianyan/Artic ...
- 爬虫07 /scrapy图片爬取、中间件、selenium在scrapy中的应用、CrawlSpider、分布式、增量式
爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 目录 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy ...
- Python36 使用Redis 构建分布式爬虫(未完)
很长时间未更新了,人懒了. 最近有不少的东西,慢慢写吧,最近尝试了一下python 使用Redis 来构建分布式爬虫: 单体爬虫有很多缺点,但是在学习过程中能够学习爬虫的基本理念与运行模式,在后期构建 ...
- 基于Python,scrapy,redis的分布式爬虫实现框架
原文 http://www.xgezhang.com/python_scrapy_redis_crawler.html 爬虫技术,无论是在学术领域,还是在工程领域,都扮演者非常重要的角色.相比于其他 ...
- Golang分布式爬虫:抓取煎蛋文章|Redis/Mysql|56,961 篇文章
--- layout: post title: "Golang分布式爬虫:抓取煎蛋文章" date: 2017-04-15 author: hunterhug categories ...
随机推荐
- 类型提示和python函数中'->'的用法
一.类型提示 在python中,我们定义一个有参函数,调用该函数时需要传入参数,如下所示: # 定义一个简单的函数 def get_full_name(first_name, last_name): ...
- vue.use的原理
接收一个vue组件 该组件应该有个方法,install customComponent.install=function(Vue){ vue.Component('name',custemCompon ...
- 【面试题】面试突击71:GET 和 POST 有什么区别?
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情 GET 和 POST 是 HTTP 请求中最常用的两种请求方法,在日常开发的 RESTful 接口中,都能 ...
- CVE-2018-8174漏洞复现(IE浏览器远程代码执行漏洞)
漏洞介绍:CVE-2018-8174这个漏洞是针对IE浏览器的一个远程代码执行漏洞,是Windows VBScript Engine 代码执行漏洞,由于VBScript脚本执行引擎(vbscript. ...
- Docker部署Springboot+Vue项目
1 docker使用nginx部署vue项目 1.1 打包vue项目 npm run build vue项目路径下会增加一个dist文件夹,里面就是网页文件 1.2 使用docker 拉取nginx ...
- P2016题解
P2016题解 题目描述 Bob要建立一个古城堡,城堡中的路形成一棵无根树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能瞭望到所有的路. 注意,某个士兵在一个结点上时,与该结点相连的所有边将 ...
- TypeScript - 属性的修饰符
class Person { /** * TS 可以再属性前增加属性的修饰符 * public 修饰的属性可以再任意位置访问(修改)默认值 * private 私有属性,私有属性只能在类内部进行访问和 ...
- Ubuntu 添加新用户并制定目录和shell
Ubuntu 添加新用户并制定目录和shell 分类: LINUX 2011-07-07 15:22:54 ubuntu新建的用户并没有新建相应的home目录和对应的shell环境. 下面就总结 ...
- js 处理大数相减
function sub(num1, num2) { if(num1 === num2) return '0' function lt(num1, num2) { if (num1.length &l ...
- Pytorch之数据处理
使用TensorDataset和DataLoader来简化 from torch.utils.data import TensorDataset from torch.utils.data imp ...