python爬虫要安装什么_python爬虫之分布式爬虫和部署
分布式爬虫:爬虫共用同一个爬虫程序,即把同一个爬虫程序同时部署到多台电脑上运行,这样可以提高爬虫速度。
在默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queue去重和set集合都是在本机上创建的,其他的电脑无法访问另外一台电脑上的内存的内容;想要让多台机器共用一个queue队列和set集合,可以让scrapy结合scrapy_redis来完成。
要实现分布式爬虫,首先要配置服务器主从:
配置主从的目的:
1、达到一个备份的功能,一旦master出现崩溃,而数据库中还有数据的话
可以将其中的一个slave重新设置为主服务器,从而恢复Redis的正常运行
2、一个Redis服务器负责读写,性能较低,通过主从来减轻一个Redis的压力
scrapy 和scrapy-redis的关系
scrapy-redis 与 Scrapy的关系就像电脑与固态硬盘一样,是电脑中的一个插件,能让电脑更快的运行。
Scrapy 是一个爬虫框架,scrapy-redis 则是这个框架上可以选择的插件,它可以让爬虫跑的更快。
为什么使用 scrapy-redis
首先,在实际开发中,我们总会对爬虫速度表示不满,为啥这么慢,能不能跑快点。除了爬虫本身的优化,我们就要引入分布式爬虫的概念。Scrapy本身是不支持分布式的,因为它的任务管理和去重全部是在机器内存中实现的。
我自己对分布式爬虫的理解就是:多个爬虫执行同一个任务
在 Scrapy 中最出名的分布式插件就是scrapy-redis了,scrapy-redis的作用就是让你的爬虫快、更快、超级快。
!
分布式爬虫的实现
1.redis 服务
2.确保scrapy-redis 环境已经安装
3.确定单机scrapy 能够正常运行
4.配置setting.py 文件
setting.py 配置代码如下
# url指纹过滤器
'DUPEFILTER_CLASS' : "scrapy_redis.dupefilter.RFPDupeFilter",
# 调度器
'SCHEDULER' : "scrapy_redis.scheduler.Scheduler",
# 设置爬虫是否可以中断
'SCHEDULER_PERSIST' : True,
'SCHEDULER_QUEUE_CLASS' : "scrapy_redis.queue.SpiderQueue", # 按照队列模式
# redis 连接配置
'REDIS_HOST' : '10.15.112.29',
'REDIS_PORT' :6379,
#密码和选择的库号
'REDID_PARAMS' = {
'password': '12324345',
'db' : 0,
}
## 配置redis管道文件,权重数字相对最大
'ITEM_PIPELINES' = {
'scrapy_redis.pipelines.RedisPipeline': 3, # redis管道文件,自动把数据加载到redis
}
SCHEDULER是任务分发与调度,把所有的爬虫开始的请求都放在redis里面,所有爬虫都去redis里面读取请求。 DUPEFILTER_CLASS是去重队列,负责所有请求的去重,REDIS_START_URLS_AS_SET指的是使用redis里面的set类型(简单完成去重),如果你没有设置,默认会选用list。
5 接下来就是设置你的爬虫文件了
在spider文件下找你写好的爬虫文件
然后导入
from scrapy_redis.spiders import RedisCrawlSpider
你的class类要继承RedisCrawlSpider
class BosszpSpider(RedisCrawlSpider):
然后设置属性
设置爬虫的rediskey(这个个自己取名,要和redis的键名一样)
redis_key = 'boss_url'
接下来连接redis
启动redis的命令是redis-server /etc/redis.cfon
l连接好redis后,添加一个列表
键名就是你爬虫属性里设置的名字
值就是你首次请求的url
配置完后就可以启动你的爬虫了
命令 scrapy runspider 爬虫文件名
scrapy-redis 优点
速度快
scrapy-redis 使用redis这个速度非常快的非关系型(NoSQL)内存键值数据库,速度快是最重要原因(但是也会产生负面想过,下面会说到)。
为什么是scrapy-redis而不是scrapy-mongo呢,大家可以仔细想想。
用法简单
前人已经造好轮子了,scrapy-redis。 我们直接拿来用就好,而用法也像上面提到的在 settings.py 文件中配置。在文档中还有另一种用法,即Feeding a Spider from Redis
run the spider: scrapy runspider myspider.py
push urls to redis: redis-cli lpush myspider:start_urls http://google.com(建议把lpush换为zset)
其实这种用法就是先打开一个爬虫,他会一直在redis里面寻找key为 myspider:start_urls,如果存在,就提取里面的url。当然你也可以在爬虫中指定redis_key,默认的是爬虫的名字加上:start_urls
去重简单
爬虫中去重是一件大事,使用了scrapy-redis后就很简单了。上面提到过使用redis的set类型就可以很容易达到这个目标了,即REDIS_START_URLS_AS_SET = True。
scrapy-redis 缺点
内存问题
为什么使用分布式爬虫,当然是因为会有很多链接需要跑,或者说会存放很多个myspider:start_urls到redis中,Redis是key-value数据库,面对key的内存搜索,优势明显,但是Redis吃的是纯内存
分布式爬虫的部署
1.下载scrapy_redis模块包
2.打开自己的爬虫项目,找到settings文件,配置scrapy项目使用的调度器及过滤器
3.修改自己的爬虫文件
4.如果连接的有远程服务,例如MySQL,Redis等,需要将远程服务连接开启,保证在其他主机上能够成功连接
5.配置远程连接的MySQL及redis地址
6.上面的工作做完以后,开启我们的redis服务器
进入到redis文件下打开我们的cmd窗口:输入:redis-server redis.windows.conf
如果出现错误:# Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
解决方法:在命令行中运行
redis-cli
127.0.0.1:6379>shutdown
not connected>exit
然后重新运行redis-server redis.windows.conf,启动成功!
7.修改redis.windows.conf配置文件,修改内容如下:
# 配置远程IP地址,供其他的电脑进行连接redis
bind: (当前电脑IP) (192.168.40.217)
# 关闭redis保护模式
protected-mode: no
8.所有爬虫都启动之后,部署redis-server服务的电脑再打开一个命令窗口,输入redis-cli.exe -h 127.0.0.1(如果是自己的ip改成自己的IP地址) -p 6379连上服务端
9.连上之后会有127.0.0.1:6379>这样的字样提示,然后输入如下命令
10.lpush 爬虫文件里面自己定义的爬虫名字:start_urls 爬虫的网址
12.数据写不进去数据库里面:
修改MySQL的my.ini文件,以MySQL8为例
路径在C:\ProgramData\MySQL\MySQL Server 8.0
找到sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"这一行
把里面的STRICT_TRANS_TABLES,删除,逗号也删除,保存文件
修改过之后需要重启mysql服务
在windows命令窗口中使用net stop mysql80先停止服务,再使用net start mysql80启动服务
如果my.ini文件不修改,爬虫的数据写入不了数据库
python爬虫要安装什么_python爬虫之分布式爬虫和部署相关推荐
- python爬虫实训日志_Python学习学习日志——爬虫《第一篇》(BeautifulSoup)
爬虫简介(学习日志第一篇) 一.爬虫介绍 爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息. 二.Pyyhon爬虫架构 Python 爬虫架构主要由五个部分组成,分别是调度器.U ...
- python之pygame安装教程_Python中pygame安装方法图文详解
搜索热词 本文实例讲述了Python中pygame安装方法.分享给大家供大家参考,具体如下: 这里主要描述一下我们怎样来安装pygame 可能很多人像我一样,发现了pygame是个好东东,但是就是不知 ...
- python pip下载安装教程_Python下的常用下载安装工具pip的安装方法
1.pip下载安装1.1 pip下载 # wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=8 ...
- python第三方模块安装路径_Python第三方Window模块文件的几种安装方法
python安装第三方模块 使用软件管理工具pip python自带了包管理工具,就像手机app商城,91助手等软件的功能一样. python2与python3安装模块的方法相似,值得注意的是,你在p ...
- python库的安装方法_Python库的安装方法
Python库的安装方法 Python的解释器CPython是开源的,我们可以下载查看其源代码,同时,Python语言的各种库也都是开源的.利用Python语言编程,可用的库有很多,在Python官方 ...
- 三十五 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点
1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题 转载于:https://www.cnblogs.com/meng-wei-zhi/p/8182813.html
- python爬虫优势和缺点_三种分布式爬虫策略的优缺点
三种分布式爬虫策略: (1)Slaver端从Master端拿任务(Request/url/ID)进行数据抓取,在抓取数据的同时也生成新任务,并将任务分配给Master端.Master端只有一个Redi ...
- python爬虫网页数据案例_python+vue实现网站爬虫数据分析案例
项目描述 基础环境:python + flask + vue + element-ui + echarts python_spiders -- 爬虫后台项目 python_spiders_web -- ...
- python爬虫反爬机制_Python Scrapy突破反爬虫机制(项目实践)
对于 BOSS 直聘这种网站,当程序请求网页后,服务器响应内容包含了整个页面的 HTML 源代码,这样就可以使用爬虫来爬取数据.但有些网站做了一些"反爬虫"处理,其网页内容不是静态 ...
最新文章
- 转元组 python_Python基础教程,第三讲,列表和元组
- Python6:oriented objective programming
- mr图像翻转的原因_MR图像质量与成像参数的相关性及控制对策
- ubuntu: no module named _sqlite
- Jmeter中一些概念的理解——90%响应时间、事务、并发
- Xmanager企业版激活成功全过程
- python单行注释用什么符号_Python多行注释和单行注释用法说明
- slf4j mysql_能显示sql语句,没有报错,但是MySQL里没有表?还有,slf4j是必须的吗?...
- Hdu-5053 the Sum of Cube(水题)
- 从数据流角度管窥 Moya 的实现(二):处理响应
- vagrant给vmbox创建虚拟机及docker安装mysql和redis
- WindowsXP系统安装
- 写给在校的GISER
- c语言调用oracle存储过程,Oracle存储过程
- 程序员应该多久跳槽一次?为何贵圈跳槽如此频繁?
- 部分国外顶级会议论文没有关键词
- 抽象类含有构造器吗?
- Spring工具包下载
- 我国AGV工业编年史(图谱)从1975年第一台磁导航AGV开始
- 音视频传输协议众多, 5G时代不同业务应该如何选择?