爬虫原理,分布式爬虫,爬虫部署等内容讲解
树图思维导图提供 第九章 分部爬虫 在线思维导图免费制作,点击“编辑”按钮,可对 第九章 分部爬虫 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:d3224c668111eb7ecbf0cd5e20ae267b
第九章 分部爬虫思维导图模板大纲
分布式爬虫是一个整体的框架,它通过多台计算机同时运行爬虫程序协同爬取数据而协同爬取数据的前提是共享爬取队列,每个爬虫程序从爬取队列中获取待爬取的 Request,并将未处理的Request 存入爬取队列中统一去重。爬虫程序有各自的 Downloader,分别完成下载任务。
安装 scrapy-redis库
Python分布式爬虫通常使用Scrapy框架加上 Redis数据库实现通过 scrapy-redis 模块实现统一任务调度,Redis 数据库则存储共享爬取队列。本章以第 8 章中使用 Scrapy 框架编写的 BaiduSpider 项目为例,介绍在两台 Windows 计算机中实现 Scrapy-Redis 分布式爬虫的方法。
Redis 数据库
Redis是一个开源(BSD许可)的,支持网络,可基于内存亦可持久化的日志型Key-Value数据库。它支持多种类型的数据结构,如列表 (lists)、集合 (sets)和有序集合(sorted sets)等,处理速度快。
redis-py库
Python 提供 redis-py 库用于连接 Redis 数据库。redis-py 库不是 Python 内置的标准库使用之前需要安装。
scrapy-redis 库
Python提供scrapy-redis库用于实现分布式爬虫。scrapy-redis 库不是 Python 内置的标准库,使用之前需要安装。
配置Scrapy-Redi
1.修改 spider 脚本 当使用 scrapy_redis 实现分布式爬虫时,需要将 spider 脚本中的类继承修改为scrapy_redisspiders.RedisSpider,同时设置初始 URL 列表在 Redis 数据库中的键值为“BaiduSpider;start urls”,故按如下修改newspy 文件。
2. 添加自动停止 spider 扩展 在Scrapy-Redis框架中,当 Reids 数据库中存储的共享爬取队列的 Request 为空时,程序还会一直运行,不会自动停止。这种情况下,可以自定义自动停止 spider 扩展,通过scrapy的spider_idle 信号 (spider idle 信号只有在共享爬取队列为空时才会被触发,触发间隔为5s)计算共享爬取队列为空的时间,实现根据设置的空闲时间来停止爬虫程序。本案例中,将自动停止spider扩展封装成extensions.py 文件,放入 BaiduSpider 项目的 settings.py 文件的同级目录中。
3.修改 settings 中设置 (1)启动自动停止 spider 扩展,并设置共享爬取队列空闲时间为6个 spider idle 信号触发时间(30s)。 EXTENSIONS=(' BaiduSpider.extensions,SpiderOpenCloseLogging': 540, ) EXTEN_ITEMCOUNT = 6 (2) 替换 Scrapy的 Scheduler,使用 scrapy_redis 模块中的调度器统一调度。 SCHEDULER ='scrapy_redis.scheduler.Scheduler' (3)使用 scrapy_redis 去重。 DUPEFILTER CLASS = 'scrapyredis.dupefilter.RFPDupeFilter' (4)设置 Redis 的连接信息,包括连接地址 (安装 Redis 数据库计算机的 IP 地址)和端口(6379)。 REDIS_URL='redis://192.168.1.104:6379' (5)设置 Redis 队列是否保存。默认设置为 False,如果设置为 True,则 scrapy_redis不会清空 Redis 里的去重队列和请求队列,它们会一直保存在 Redis 数据库中,用户可以暂停和启动爬生程序而不影响继续去重。 DUPEFILTER PERSIST = True (6)配置存储数据库。搭建一个 MongoDB 服务(确保计算机已经安装 MongoDB数据库),将两台计算机爬取结果存储到同一个 MongoDB 数据库中。 MONGO URI =192.168.1.104'MONGO DB =baidu!
4.配置 Redis 数据库 scrapy-redis 分布式爬虫需要远程连接 Redis 数据库,读取共享爬取队列。配置 Redis数据库的过程为:打开 Redis 安装目录 (如 C:Program FileslRedis)下的 redis.windows-service.conf 文件,修改“bind”参数为“0.0.0.0”,以允许远程连接 Redis数据库,然后重启 Redis 服务。
5.设置远程连接 MongoDB 数据库 打开MongoDB 数据库安装目录(如C:Program FilesMongoDB\Serverl4.2bin)下的mongod.cg文件,修改“bindIp”参数为“0.0.0.0”,以允许远程连接MongDB数据库,然后重启MongoDB 服务。 以管理员身份打开命今提示符窗口,输入“netsh advfirewall firewall addrulename ="MongoDB"dir-in localport-27017 protocol=tcp action=allow”命令,按回车键,在Windows 的防火墙中添加端口入站规则,如果返回“确定”,表示添加成功。
运行Scrapy-Redis 分布式爬虫
将修改好的爬虫项目复制到两台计算机中(确保两台计算机都安装了运行环境,包括redis-py库、scrapy-redis 库和pymongo 库等),并启动爬虫程序后,在安装 Redis数据库的计算机中手动向Redis的初始URL队列中添加URL,队列的名称为 BaiduSpider;start uris其过程为:在命令提示符中切换到 Redis 目录,然后输入命令“redis-cli ipushBaiduSpider:start urls http://www.baidu.com/”。
添加完成后,爬虫程序开始运行,它们将获取的数据保存到 MongoDB 数据库中,直到共享队列为空,等待一段时间 (设置的空闲时间) 后,爬虫程序停止运行。保存到MongoDB数据库中的内容。
按照上述部署分布式爬虫的方法,需要复制代码到每台计算机,这样非常繁杂,也不方便管理。例如,更新爬虫程序版本,可能需要对所有服务器的具体代码进行更新:用户 也不方便查看每个爬虫程序的运行情况。此时,可以使用 Scrapyd 工具部署分布式爬虫以解决此类问题。Scrapyd 是一个部署和运行Scrapy 爬虫的工具,它能够在网页端查看正在执行的任务,能够通过JSONAPI上传工程和控制工程中的爬虫程序,如新建爬虫任务、终止爬虫任务等。
安装和运行Scrapyd
Scrapyd 库不是 Python 内置的标准库,使用之前需要安装,安装方法与 requests 库的安装类似。 安装完成后,打开 scrapyd 安装目录(如 C:Userslwy\anaconda3\envslconda_Test\Lib\site-packages\scrapyd)下的 default_scrapyd.conf文件,修改“bind address”参数为“0.0.0.0,允许远程连接。 配置完成后,打开命令提示符窗口,输入“scrapyd”命令,运行 Scrapyd。
安装 Scrapyd-Client
要将代码上传并部署到 Scrapyd,还需要使用一个专门的打包上传工具 Scrapyd-Client。scrapyd-client库不是 Python 内置的标准库,使用之前需要安装,安装方法与requests库的安装类似。
配置 Scrapyd-Client
scrapyd-client 库为用户提供了 scrapyd-deploy 命令来打包和上传爬虫代码。在使用scrapyd-deploy 命令打包上传代码前,需要先配置 Scrapy 项目中的 scrapy.cfg 文件。 其中,pcl 和 pc2 表示配置计算机的别名: ur 表示要部虫程序的计算机 P 地和端口号;project表示项目名称。 如果是在 Windows 中,运行部署命令 scrapyd-deploy,可能会报错。 解决这个问题的方法如下。 (1)进入项目虚拟环境目录下的 Scripts 目录中,创建 scrapy.bat和 scrapyd-deploy.bat两个新文件。 (2)编辑这两个文件。 在scrapy.bat文件中输入如下内容,保存并退出。 @echo off C:\Users\wy\anaconda3\envs\conda Test\python C:\Users\wylanaconda3\envs\conda Test\Scripts scrapy %* 在scrapyd-deploybat 文件中输入如下内容,保存并退出。 @echo off C:\Users\wy\anaconda3\envs\conda_Test\python C:\Users\wylanaconda3\envs\conda Test\Scripts scrapyd-deploy %* 另外,运行部署命令 scrapyd-deploy 时,会出现警告信息。此时,可以在项目虚拟环境目录下的 Scripts 目录中,打开 scrapyd-deploy 文件,将“fomscrapy.utils.http import basic_auth header”修改为“ from w3lib.http import basic auth header"。
使用 Scrapyd-Client 部署爬虫
在PyCharm的Terminal窗口中切换到scrapycfg 文件所在的目录中,输入“scrapyd-deploypcl”命令,表示在IP地址为192.1681104的计算机上部署BaiduSpider项目,如果部署的结果中“status”为ok,表示爬虫部署成功。 同样,输入“scrapyd-deploypc2”命令,表示在IP地址为192.168.156的计算机上配置BaiduSpider项目,如果部署的结果中“status”为ok,表示爬虫部署成功。 如果想要启动爬虫,可输入如下命令。 curl http://192.168.1.56:6800/schedule.json -d project=BaiduSpider-d spider=news 其中,project 后面是项目名称,spider 后面是爬虫名称。执行完上述命令后,可以在浏览器中访闻http://192,168.1.56:6800/,查看爬虫运行情况。例如,单击“Jobs”文字,查看爬虫的部署情况。如果代码发生改变,可以重新打包部署,Scrapyd 默认执行最新的版本。 Scrapy 还提供了很多命令,如执行如下命令可停止一个爬虫程序。 curl http://192.168.1.56:6800/cancel.json -d project=PROJECT NAME-d job=JOB ID 其中,JOB ID可以从 Web 控制台的 PID 获取。此外,读者可以查看 Scrapyd 官方文档,了解详细的API。
(1)分布式爬虫是一个整体的框架,它通过多台计算机同时运行爬虫程序协同爬取数据。
(2)Python 分布式爬虫通常使用 Scrapy 框架加上 Redis 数据库实现,通过 scrapy-redis模块实现统一任务调度,Redis 数据库则存储共享爬取队列。
(3)Scrapyd 是一个部署和运行 Scrapy 爬虫的工具,它能够在网页端查看正在执行的任务,能够通过JSONAPI上传和控制工程中的爬虫程序。
(4) 通过专门的打包上传工具 Scrapyd-Client 可以将代码上传并部署到 Scrapyd。
将修改好的爬虫项目复制到两台计算机中(确保两台计算机都安装了运行环境,包括redis-py库、scrapy-redis 库和pymongo 库等),并启动爬虫程序后,在安装 Redis数据库的计算机中手动向Redis的初始URL队列中添加URL,队列的名称为 BaiduSpider;start uris其过程为:在命令提示符中切换到 Redis 目录,然后输入命令“redis-cli ipushBaiduSpider:start urls http://www.baidu.com/”。思维导图模板大纲
树图思维导图提供 python爬虫在企业当中业务变现体系与行业发展 在线思维导图免费制作,点击“编辑”按钮,可对 python爬虫在企业当中业务变现体系与行业发展 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:cfa548ac4e8ecfa2928ff4f5539e2403
树图思维导图提供 Python爬虫入门 在线思维导图免费制作,点击“编辑”按钮,可对 Python爬虫入门 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:06f561dd6963bedc948259d62b99f312