《Python网络爬虫技术案例教程》(林忠会) 第9章.Python网络爬虫_第1页
《Python网络爬虫技术案例教程》(林忠会) 第9章.Python网络爬虫_第2页
《Python网络爬虫技术案例教程》(林忠会) 第9章.Python网络爬虫_第3页
《Python网络爬虫技术案例教程》(林忠会) 第9章.Python网络爬虫_第4页
《Python网络爬虫技术案例教程》(林忠会) 第9章.Python网络爬虫_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.Python网络爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫Python网络爬虫技术案例教程PythonWangluoPachongJishuAnliJiaochengCOMMITTEDCOMMITTEDCOMMITTECOMMITTECONTENTS目录COMMITTED第1章网络爬虫入门

第2章爬虫基础第3章网页解析基础第4章爬取动态加载数据第5章反爬虫策略第6章模拟登录和处理验证码

第7章爬取App和PC客户端第8章爬虫框架Scrapy第9章分布式爬虫第10章项目实战COMMITTEDCOMMITTEDCOMMITTECOMMITTECOMMITTED扫码下载文旌课堂APP扫码签到(202X.XX.XXXX:XX至202X.XX.XXXX:XX)签到方式教师通过“文旌课堂APP”生成签到二维码,并设置签到时间,学生通过“文旌课堂APP”扫描“签到二维码”进行签到。签到.Python网络爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫第9章分布式爬虫本章导读当遇到大型的爬虫程序时,由于受CPU、I/O和宽带等多重限制,单台计算机难以满足爬虫需求,此时可以将爬虫程序部署到多台计算机上,共同完成一个任务,以提高爬虫的效率,这就是分布式爬虫。本章从分布式爬虫原理入手,介绍分布式爬虫的实现和部署方法,包括Scrapy-Redis分布式爬虫和Scrapyd部署分布式爬虫等内容。学习目标理解分布式爬虫原理。掌握实现Scrapy-Redis分布式爬虫的方法。掌握使用Scrapyd部署分布式爬虫的方法。能使用Scrapy-Redis实现分布式爬虫。能使用Scrapyd部署分布式爬虫。9.1分布式爬虫原理9.2Scrapy-Redis分布式爬虫9.3使用Scrapyd部署分布式爬虫第9章分布式爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫SectionTitle9.1分布式爬虫原理分布式爬虫是一个整体的框架,它通过多台计算机同时运行爬虫程序协同爬取数据,而协同爬取数据的前提是共享爬取队列,其架构如图9-1所示。图9-1分布式爬虫架构9.1分布式爬虫原理9.1分布式爬虫原理从图9-1可以看出,每个爬虫程序从爬取队列中获取待爬取的Request,并将未处理的Request存入爬取队列中统一去重。爬虫程序有各自的Downloader,分别完成下载任务。.Python网络爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫SectionTitle9.2Scrapy-Redis分布式爬虫Python分布式爬虫通常使用Scrapy框架加上Redis数据库实现,通过scrapy-redis模块实现统一任务调度,Redis数据库则存储共享爬取队列。本章以第8章中使用Scrapy框架编写的BaiduSpider项目为例,介绍在两台Windows计算机中实现Scrapy-Redis分布式爬虫的方法。Scrapy-Redis分布式爬虫9.2Scrapy-Redis分布式爬虫9.2.1安装和配置Redis数据库Redis是一个开源(BSD许可)的,支持网络,可基于内存亦可持久化的日志型Key-Value数据库。它支持多种类型的数据结构,如列表(lists)、集合(sets)和有序集合(sortedsets)等,处理速度快。9.2Scrapy-Redis分布式爬虫步骤一:访问/microsoftarchive/redis/releases,在打开的页面中单击“Assets”文字,如图9-2所示。图9-2下载页面1.下载Redis9.2Scrapy-Redis分布式爬虫步骤二:打开下载列表,选择“Redis-x64-3.2.100.msi”选项,下载安装文件,如图9-3所示。图9-3下载列表9.2Scrapy-Redis分布式爬虫步骤一:双击下载好的Redis-x64-3.2.100.msi文件,在打开的对话框中单击“Next”按钮,如图9-4所示。图9-4欢迎安装2.安装Redis9.2Scrapy-Redis分布式爬虫步骤二:显示“End-UserLicenseAgreement”界面,勾选“IacceptthetermsintheLicenseAgreement”复选框,单击“Next”按钮,如图9-5所示。图9-5同意安装许可9.2Scrapy-Redis分布式爬虫步骤三:显示“DestinationFolder”界面,直接使用默认路径,勾选“AddtheRedisinstallationfoldertothePATHenvironmentvariable”复选框,以添加Redis目录到环境变量PATH中,单击“Next”按钮,如图9-6所示。图9-6添加环境变量9.2Scrapy-Redis分布式爬虫步骤四:显示“PortNumberandFirewallException”界面,直接使用默认端口号(6379),勾选“AddanexceptiontotheWindowsFirewall”复选框,以选择防火墙例外,从而保证外部设备可以正常访问Redis服务,单击“Next”按钮,如图9-7所示。图9-7设置端口号和防火墙9.2Scrapy-Redis分布式爬虫步骤五:显示“MemoryLimit”界面,勾选“SettheMaxMemorylimit”复选框,在显示的“MaxMemory”编辑框中输入“2000”,以设置Redis最大内存为2000MB(可根据需求设置,但不可超过系统内存),单击“Next”按钮,如图9-8所示。图9-8设置最大内存9.2Scrapy-Redis分布式爬虫步骤六:显示“ReadytoinstallRedisonWindows”界面,单击“Install”按钮,如图9-9所示。图9-9开始安装步骤七:等待一段时间后,在显示的界面中单击“Finish”按钮即可完成安装。9.2Scrapy-Redis分布式爬虫步骤一:打开命令提示符窗口,切换至Redis安装目录(如C:\ProgramFiles\Redis),输入“redis-cli”命令,按回车键,如果显示正确路径(包括端口号),则表示已经启动服务并连接了Redis数据库,如图9-10所示。图9-10连接Redis数据库3.验证Redis9.2Scrapy-Redis分布式爬虫如果远程连接Redis数据库,则须在命令redis-cli后增加Redis数据库的连接地址(安装Redis数据库的IP地址)和端口号(6379),即redis-cli-hIP-p6379。9.2Scrapy-Redis分布式爬虫步骤二:输入“setmykeyhello”命令,按回车键,如果返回显示“OK”,表示成功保存一个键值;输入“getmykey”命令,按回车键,可读取键值(此处显示“hello”),如图9-11所示。图9-11读写Redis9.2Scrapy-Redis分布式爬虫常用的Redis服务命令如下。卸载服务:redis-server--service-uninstall。开启服务:redis-server--service-start。停止服务:redis-server--service-stop。9.2Scrapy-Redis分布式爬虫9.2.2安装redis-py库Python提供redis-py库用于连接Redis数据库。redis-py库不是Python内置的标准库,使用之前需要安装,安装方法与requests库的安装类似(请参考2.3.2节),此处不再赘述。9.2Scrapy-Redis分布式爬虫9.2.3安装scrapy-redis库Python提供scrapy-redis库用于实现分布式爬虫。scrapy-redis库不是Python内置的标准库,使用之前需要安装,安装方法与requests库的安装类似(请参考2.3.2节),此处不再赘述。9.2Scrapy-Redis分布式爬虫9.2.4配置Scrapy-Redis当使用scrapy_redis实现分布式爬虫时,需要将spider脚本中的类继承修改为scrapy_redis.spiders.RedisSpider,同时设置初始URL列表在Redis数据库中的键值为“BaiduSpider:start_urls”,故按如下修改news.py文件。1.修改spider脚本fromscrapy_redis.spidersimportRedisSpiderclassNewsSpider(RedisSpider):name='news'allowed_domains=['']redis_key='BaiduSpider:start_urls'……9.2Scrapy-Redis分布式爬虫在Scrapy-Redis框架中,当Reids数据库中存储的共享爬取队列的Request为空时,程序还会一直运行,不会自动停止。这种情况下,可以自定义自动停止spider扩展,通过scrapy的spider_idle信号(spider_idle信号只有在共享爬取队列为空时才会被触发,触发间隔为5s)计算共享爬取队列为空的时间,实现根据设置的空闲时间来停止爬虫程序。本案例中,将自动停止spider扩展封装成extensions.py文件(详细代码见本书配套资料第9章中的extensions.py),放入BaiduSpider项目的settings.py文件的同级目录中。2.添加自动停止spider扩展9.2Scrapy-Redis分布式爬虫(1)启动自动停止spider扩展,并设置共享爬取队列空闲时间为6个spider_idle信号触发时间(30s)。3.修改settings中设置EXTENSIONS={'BaiduSpider.extensions.SpiderOpenCloseLogging':540,}EXTEN_ITEMCOUNT=69.2Scrapy-Redis分布式爬虫(2)替换Scrapy的Scheduler,使用scrapy_redis模块中的调度器统一调度。SCHEDULER='scrapy_redis.scheduler.Scheduler'(3)使用scrapy_redis去重。DUPEFILTER_CLASS='scrapy_redis.dupefilter.RFPDupeFilter'(4)设置Redis的连接信息,包括连接地址(安装Redis数据库计算机的IP地址)和端口(6379)。REDIS_URL='redis://04:6379'9.2Scrapy-Redis分布式爬虫(5)设置Redis队列是否保存。默认设置为False,如果设置为True,则scrapy_redis不会清空Redis里的去重队列和请求队列,它们会一直保存在Redis数据库中,用户可以暂停和启动爬虫程序而不影响继续去重。DUPEFILTER_PERSIST=True(6)配置存储数据库。搭建一个MongoDB服务(确保计算机已经安装MongoDB数据库),将两台计算机爬取结果存储到同一个MongoDB数据库中。MONGO_URI='04'MONGO_DB='baidu'9.2Scrapy-Redis分布式爬虫scrapy-redis分布式爬虫需要远程连接Redis数据库,读取共享爬取队列。配置Redis数据库的过程为:打开Redis安装目录(如C:\ProgramFiles\Redis)下的redis.windows-service.conf文件,修改“bind”参数为“”(见图9-12),以允许远程连接Redis数据库,然后重启Redis服务。4.配置Redis数据库图9-12配置Redis9.2Scrapy-Redis分布式爬虫步骤一:打开MongoDB数据库安装目录(如C:\ProgramFiles\MongoDB\Server\4.2\bin)下的mongod.cfg文件,修改“bindIp”参数为“”(见图9-13),以允许远程连接MongDB数据库,然后重启MongoDB服务。图9-13配置MongoDB数据库5.设置远程连接MongoDB数据库9.2Scrapy-Redis分布式爬虫步骤二:以管理员身份打开命令提示符窗口,输入“netshadvfirewallfirewalladdrulename="MongoDB"dir=inlocalport=27017protocol=tcpaction=allow”命令,按回车键,在Windows的防火墙中添加端口入站规则,如果返回“确定”,表示添加成功,如图9-14所示。图9-14添加端口入站规则9.2Scrapy-Redis分布式爬虫9.2.5运行Scrapy-Redis分布式爬虫将修改好的爬虫项目复制到两台计算机中(确保两台计算机都安装了运行环境,包括redis-py库、scrapy-redis库和pymongo库等),并启动爬虫程序后,在安装Redis数据库的计算机中手动向Redis的初始URL队列中添加URL,队列的名称为BaiduSpider:start_urls。其过程为:在命令提示符中切换到Redis目录,然后输入命令“redis-clilpushBaiduSpider:start_urls/”,如图9-15所示。9.2Scrapy-Redis分布式爬虫图9-15向Redis的BaiduSpider:start_urls队列中添加初始URL9.2Scrapy-Redis分布式爬虫启动爬虫程序后,如果没有在设置的空闲时间内向Redis的初始URL队列中添加URL,爬虫程序会停止运行。9.2Scrapy-Redis分布式爬虫添加完成后,爬虫程序开始运行,它们将获取的数据保存到MongoDB数据库中,直到共享队列为空,等待一段时间(设置的空闲时间)后,爬虫程序停止运行。保存到MongoDB数据库中的内容如图9-16所示。图9-16数据库中的内容9.2Scrapy-Redis分布式爬虫每次启动爬虫程序都需要重新向Redis的初始URL队列中添加URL,因为爬虫程序运行完成后,初始URL队列为空。可以通过在命令行提示符中输入“redis-clilrangeBaiduSpider:start_urls0-1”命令查看初始URL队列,如图9-17所示。图9-17查看初始URL列表9.2Scrapy-Redis分布式爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫.Python网络爬虫SectionTitle9.3使用Scrapyd部署分布式爬虫9.3使用Scrapyd部署分布式爬虫按照上述部署分布式爬虫的方法,需要复制代码到每台计算机,这样非常繁杂,也不方便管理。例如,更新爬虫程序版本,可能需要对所有服务器的具体代码进行更新;用户也不方便查看每个爬虫程序的运行情况。此时,可以使用Scrapyd工具部署分布式爬虫以解决此类问题。Scrapyd是一个部署和运行Scrapy爬虫的工具,它能够在网页端查看正在执行的任务,能够通过JSONAPI上传工程和控制工程中的爬虫程序,如新建爬虫任务、终止爬虫任务等。本节以9.2节Scrapy-Redis分布式爬虫为例,介绍使用Scrapyd部署分布式爬虫程序的方法。9.3使用Scrapyd部署分布式爬虫9.3.1安装和运行ScrapydScrapyd库不是Python内置的标准库,使用之前需要安装,安装方法与requests库的安装类似(请参考2.3.2节),此处不再赘述。安装完成后,打开scrapyd安装目录(如C:\Users\wy\anaconda3\envs\conda_Test\Lib\site-packages\scrapyd)下的default_scrapyd.conf文件,修改“bind_address”参数为“”(见图9-18),允许远程连接。9.3使用Scrapyd部署分布式爬虫图9-18配置Scrapyd9.3使用Scrapyd部署分布式爬虫配置完成后,打开命令提示符窗口,输入“scrapyd”命令,运行Scrapyd,如图

9-19所示。图9-19运行Scrapyd9.3使用Scrapyd部署分布式爬虫部署爬虫程序的计算机必须安装和运行Scrapyd,否则无法完成部署。9.3使用Scrapyd部署分布式爬虫9.3.2安装Scrapyd-Client要将代码上传并部署到Scrapyd,还需要使用一个专门的打包上传工具Scrapyd-Client。scrapyd-client库不是Python内置的标准库,使用之前需要安装,安装方法与requests库的安装类似(请参考2.3.2节),此处不再赘述。9.3使用Scrapyd部署分布式爬虫9.3.3配置Scrapyd-Clientscrapyd-client库为用户提供了scrapyd-deploy命令来打包和上传爬虫代码。在使用scrapyd-deploy命令打包上传代码前,需要先配置Scrapy项目中的scrapy.cfg文件,如图9-20所示。图9-20配置scrapy.cfg文件9.3使用Scrapyd部署分布式爬虫其中,pc1和pc2表示配置计算机的别名;url表示要部署爬虫程序的计算机IP地址和端口号;project表示项目名称。如果是在Windows中,运行部署命令scrapyd-deploy,可能会报错,如图9-21所示。图9-21错误提示9.3使用Scrapyd部署分布式爬虫解决这个问题的方法如下。(1)进入项目虚拟环境目录下的Scripts目录中,创建scrapy.bat和scrapyd-deploy.bat两个新文件。(2)编辑这两个文件。在scrapy.bat文件中输入如下内容,保存并退出。@echooffC:\Users\wy\anaconda3\envs\conda_Test\pythonC:\Users\wy\anaconda3\envs\conda_Test\Scripts\scrapy%*9.3使用Scrapyd部署分布式爬虫在scrapyd-deploy.bat文件中输入如下内容,保存并退出。@echooffC:\Users\wy\anaconda3\envs\conda_Test\pythonC:\Users\wy\anaconda3\envs\conda_Test\Scripts\scrapyd-deploy%*9.3使用Scrapyd部署分布式爬虫文件中的路径要替换成自己的项目环境路径。9.3使用Scrapyd部署分布式爬虫另外,运行部署命令scrapyd-deploy时,会出现警告信息,如图9-22所示。此时,可以在项目虚拟环境目录下的Scripts目录中,打开scrapyd-deploy文件,将“fromscrapy.utils.httpimportbasic_auth_header”修改为“fromw3lib.httpimportbasic_auth_header”,如图9-23所示。图9-22警告提示9.3使用Scrapyd部署分布式爬虫图9-23配置scrapyd-deploy文件9.3使用Scrapyd部署分布

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论