计算机科学与技术-基于scrapy框架的腾讯招聘信息网络爬虫设计与实现_第1页
计算机科学与技术-基于scrapy框架的腾讯招聘信息网络爬虫设计与实现_第2页
计算机科学与技术-基于scrapy框架的腾讯招聘信息网络爬虫设计与实现_第3页
计算机科学与技术-基于scrapy框架的腾讯招聘信息网络爬虫设计与实现_第4页
计算机科学与技术-基于scrapy框架的腾讯招聘信息网络爬虫设计与实现_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

目录第1章绪论 11.1研究背景和意义 11.1.1选题的目的及意义 11.1.2国内外发展状况 11.2研究的基本内容与拟解决的主要问题 11.3研究的方法与技术路线 21.3.1研究方法 21.3.2研究手段 2第2章基于python的网络爬虫 42.1python语言简介 42.2网络爬虫 42.2.1网络爬虫的定义 42.2.2网络爬虫的基本流程 52.3scrapy框架 52.3.1scrapy框架的基本原理 52.3.2scrapy框架的基本流程 72.4分布式网络爬虫原理 8第3章网络爬虫模型的设计和实现 93.1网络爬虫的爬取对象 93.2网络爬虫系统功能架构 93.3网络爬虫流程设计 103.4腾讯招聘网页分析 113.4.1判断网页的静/动态加载 113.4.2分析一级网页获取相应数据 123.4.3分析二级网页获取相应数据 143.5网络爬虫的具体实现 153.5.1创建spider项目文件 153.5.2定义Item容器 153.5.3编写爬虫程序 163.5.4编写pipelines.py 193.5.5修改setting.py 20第4章第4章系统功能测试与实现 224.1爬虫运行测试 224.2选择要爬取的地区 224.3爬虫爬取过程 224.4数据库存储数据 234.5爬虫爬取结束 23结束语 25参考文献 26致谢 27绪论研究背景和意义选题的目的及意义在早期的互联网时代,人们主要通过筛选网络上大量数据,然后来获取需要信息,互联网技术发展的落后使得搜索技术影响了所需数据的速度和品质,与此同时,互联网一直在快速发展着,信息的质量也变得更加重要。因此,网络信息的传播面临着巨大的机遇和挑战[1]。如今的大规模数据在不同领域的相同或类似的关键词的模糊性、搜索系统的整体结果都包含着复杂的信息。这是为了让必要的信息出现在画面上,需要做出额外的努力。在时间上,尤其是网络快速发展的情况下,服装、食品、住宅和旅行与网络有着密切的关系。如果想找到好的、满意的工作,在网上招聘信息中也有选择。需要有关招聘新员工的信息将在网上公开。寻找最合适的工作,要求工作地点、工资和其他适当条件,工作经验和培训将使他们掌握有关各领域工作的最合适信息[2]。然而在海量数据里能够自由自在的获取自己所需要的信息,爬虫就是一个不错的选择。国内外发展状况上世纪九十年代起,网络爬虫技术便开始被研发。到现在为止,网络爬虫技术已经逐步成熟。网络爬虫主要包括了网页搜索策略和网页分析策略,其中网页搜索策略包含了广度优先法和最佳度优先法;网页分析策略包含了基于网络拓扑的分析算法和基于网页内容的网页分析算法[3]。研究的基本内容与拟解决的主要问题本项目主要抓取腾讯招聘网站里有价值的数据,利用Scapy框架爬取腾讯招聘官方网站主页上刊登的招聘信息。例如,其中网页链接、职位名称、职位职责、职位职责、职位利用现有技术在项目中免除注册,实现了多个目标,如要求、地点和发布时间等。同时对爬取得的数据进行初步筛选,除去多余的信息,除了可以节省当地空间外,数据科学家对数据进行两次清洗、精制,从而得到更有价值的信息。本项目对爬虫类的作用机构和设计模式进行了优化。同时采用了适当的设计模式,可以及时将内存数据导入数据库,大幅减少了内存资源的占用。研究的方法与技术路线研究方法如今很多爬虫都是运用后台脚本类语言来进行编写,毫无疑问地,按使用次数来衡量,比较多的便是运用Python语言。Python发展了许多优秀的库和框架。本项目将采用Python中的scrapy框架作为爬虫实现语言对爬虫进行编写。爬虫的工作流程通常是非常复杂的,它需要运用网页数据分析算法去删除一些毫无作用的链接,将需要用到的链接保存并且放入url队列中等待提取,之后根据编写的搜索策略从队列中选择进一步要获取的链接,重复这个过程直到程序停止。还有,系统往往会保存爬虫爬取到的所有网页,然后进行网页分析、过滤数据。如果一个网站不愿意网站数据流出,就会根据爬虫的特征进行识别,拒绝爬虫的访问[4]。一个完整的网络爬虫会包括四个模块:网络请求模块、爬取流程控制模块、内容分析提取模块、反爬虫模块。研究手段研究的主要任务(1)使用python的scrapy框架来设计爬虫系统。(2)网络爬虫需要对有用的数据进行提取,再之后筛选出职位名称等需要的数据。(3)最终完成的网络爬虫一开始要网页地址进行分析之后再得到有用的数据。(4)最后设计完成的网络爬虫要提取需要的数据。研究各阶段要求:(1)总体阶段要根据所需的要求来设计出方案。(2)具体阶段要对有疑惑的问题进行解答并设计出详细方案,然后选择最佳的设计方案。(3)编码阶段要选取适合的开发工具以及适合的技术标准。(4)测试阶段要进行预测系统的运行结果,之后通过编译来测试是否达到需求。设计开发学习各种网络爬虫相关的文献资料,模拟网络上面关于爬虫开发的开源项目,在环境为windows操作系统下进行开发和测试。

基于python的网络爬虫python语言简介作为开源编程语言,Python可以实现很多功能,其语法相对简单易懂,有很多优点,它广泛使用于各种通用操作系统。此外,由于具有直接面对编程对象的特性,因此可以简化编程过程,并且可以大大提高编程效率。最重要的是,Pytohon语言有很多优点的网络协议库。这可以为独立识别、分层存储、程序员创造各种类型的编程逻辑[5]。网络爬虫网络爬虫的定义网络爬虫是一个可以根据某些设定的逻辑,自动从网络上进行数据抓取。与传统的浏览器信息搜索方式相比,网络爬虫通过搜索网址及时或定期地搜索用户需求的内容并将搜索结果发送给用户的过程更准确、信息量更大、更符合用户的在线需求[6]。对于python而言,它是被广泛应用于爬虫系统设计的语言之一,这不仅是因为Python在库的设计过程中承载了爬虫系统设计的必要基础,而且更重要的是在Python语言里开发了的一个名为Scrapy的框架被广泛应用于爬虫系统中,该框架被广泛应用于当前的计算机操作系统中,它的主要优点是能够有效解决抓取网页因被多次编写而产生大量HTML源代码从而造成信息堆积的问题,运用这一框架,只需要在框架中设置爬虫模块即可以爬取该网页的数据[7]。根据系统的结构功能,网络爬虫可以分为四种类型:(1)通用型网络爬虫通用型网络爬虫主要用于搜索引擎,之所以对爬取的速度和存储空间要求比较高是因为它爬取的范围广,数量多。(2)聚焦型网络爬虫聚焦型网络爬虫是选择性地爬取一开始便定义好的需求的数据,它不仅节省了网络资源,也满足特定人员的特定需求。(3)增量型网络爬虫增量型网络爬虫只会产生新的爬取页面或数据页面被更改时来进行数据抓取,它有效降低数据量下载,减少了时间和空间的浪费。(4)深度网络爬虫深度网络爬虫需要先经过注册用户登录,或者是提交相应的表单之后才可以开始不断地爬取网页的数据[8]。网络爬虫的基本流程网络爬虫一般由四个流程进行:a).发送请求通过http库将请求发送到目标网站,即发送给目标站点一个Request,这个Request可以包含headers等信息,然后等待服务器响应。b).获取响应内容请求发送结束之后,等待服务器正常响应,响应结束会返回一个响应内容response,这个response可以是结构化数据,如html、json数据包等,也可以是非结构化数据,如图片或视频等。c).解析内容一旦接受到响应内容时,便可以提取里面的数据。当解析的是html数据,则可以使用正则表达式或第三方解析库如Beautifulsoup,pyquery等来提取数据;若是解析json数据,则可以导入json模块,将数据转化为python类型数据然后进行提取;若是非结构化数据的,直接进行提取后保存。d).保存数据从response中解析到数据一般可写入数据库或者写入文本保存。scrapy框架scrapy框架的基本原理在开发python的网络爬虫中可以优先选择scrapy。它主要包括引擎(Engine),调度器(Scheduler),下载器(Downloader),爬虫(Spider),项目管道(Pipeline),下载器中间件(Downloader-Middlewares),爬虫中间件(Spider-Middlewares)等七个组件。如图2-1所示。图2-1.Scrapy框架架构图(1)引擎(Engine)引擎负责和进行管理控制整个系统框架所有一切组件之间的数据流信息,而且在某些动作发生时触发相应的事务,整个scrapy框架的核心控制组件便是引擎。(2)调度器(Scheduler)通过调度器,scrapy框架可以控制哪个网页优先爬取,即控制网页的爬取优先级。它也含有去重功能,能够去掉重复的网页。当接受引擎传过来的请求后便按照排序传递给下载器。(3)下载器(Downloader)下载器采用异步方式与远程服务器建立连接,下载网页数据并将数据返回给引擎。它也可以接收调度器传过来的请求,再根据要求从互联网中下载网页内容,并将数据传送给爬虫。(4)爬虫(Spider)爬虫是Scrapy框架核心之一,网页解析是它的主要工作,然后从目标网页的数据里来进行提取。一个爬虫项目通常可以拥有多个爬虫,而且每个爬虫r可以解析多个网站,爬取多个网站的数据。它由编码人员负责编写来解析请求网页后返回数据的代码,从数据中提取出Item和新的网页地址,并把Item传给Itempipeline组件。(5)项目管道(Pipeline)项目管道负责处理爬虫提取的数据,常见的处理如验证有效性、清理不需要的信息及数据存储等。通常需要多个数据管道,每个管道进行一种数据处理。(6)下载器中间件(Downloader-Middlewares)下载中间件位于引擎和下载器之间,是处理引擎和下载器之间的请求和响应的重要部分之一。(7)爬虫中间件(Spider-Middlewares)爬虫中间件位于引擎和爬虫之间,是处理引擎和爬虫之间的请求和响应的重要部分之一[9]。scrapy框架的基本流程如图2-2所示,是scrapy框架的流程图,主要包含8个流程:图2-2.Scrapy框架流程图(1)引擎向爬虫文件索要第一个要爬取的网页地址。(2)引擎将网页地址信息交给调度器,调度器将网页地址入队列。(3)url地址出队列,这时候的url地址为要爬取的内容的网页地址,由调度器传递给引擎。(4)引擎传递给下载器地址,下载器开始爬取。(5)获取到响应之后,下载器将响应的内容传递给引擎。(6)引擎将响应传递给爬虫,爬虫开始解析数据。(7)爬虫提取数据之后,将所需的数据传递给引擎。若此时还有必须继续跟进的网页地址(即二级页面等),则重复第一个步骤直至结束。(8)引擎将所需信息数据传递给管道,由管道进行保存等操作。分布式网络爬虫原理Scrapy-redis是scrapy实现分布式功能的主要部分。依靠主从关系,在这里将核心服务器称为主服务器,将用于运行爬虫项目的称为从服务器。爬取网页数据运用scrapy方式,第一步给爬虫文件一个或一些初始地址start_urls,然后爬虫文件开始访问里面的网络地址,再根据编码人员设计的表达式来提取里面的数据,也可以是解析和抓取其它二级网页信息数据等。运用redis数据库,在这里redis数据库只需要存储url,不需要存储爬取到的数据,redis数据库会特殊设定不一样的列表字段,来标记这些不同的网站地址,这样可以达到爬取不重复网络地址的效果。在主服务器上运用redis数据库,不管有多少个从服务器,从服务器只能获取主服务器里面redis数据库存储的网络地址。由于scrapy-redis自身的队列拥有特殊的机制,从服务器得到的网络地址是不会相互冲突的。在每个从服务器结束数据抓取之后,会把爬取到的数据汇合并传输到到主服务器上,这个时候爬取到的数据不再是存进redis数据库里,而是存进mysql等储存数据的数据库。这种措施的另一个优点便是程序的移植性很强,只需要修改路径问题,把从服务器上的爬虫项目复制粘贴到到其他从服务器上,便可以运行相同的爬虫程序[10]。

网络爬虫模型的设计和实现网络爬虫的爬取对象本文实现的网络爬虫是爬取腾讯招聘网站招聘信息,爬取招聘网站的的一级页面,里面包含职位名称、职位类别以及工作地点等,之后再通过分析将每个职位的二级页面爬取下来,之后再爬取二级页面数据,包含职位责任和职位要求。网络爬虫系统功能架构分布式爬虫抓取系统,如图3-1所示,主要包含以下功能:图3-1分布式爬虫抓取系统架构图(1)爬虫:爬取策略的设计、提取数据设计、增量爬取、请求去重(2)中间件:爬虫防屏蔽中间件(3)数据存储:抓取字段设计、数据存储本文将腾讯招聘网站为主题的网络爬虫划为爬虫模块、中间件模块、数据存储模块3个部分。其中爬虫模块用来分析提取url地址,实施招聘主题信息网页的抓取,在满足爬取规则的范围内抓取符合招聘主题信息的网页数据;中间件模块主要负责添加user-agent请求头信息模拟浏览器登录,实现爬虫防屏蔽功能;数据存储模块主要将抓取的网页数据存入到数据库中。网络爬虫流程设计由scrapy的结构分析可知,网络爬虫从start_url开始,根据设计爬虫并定义的url地址,得到积极响应后,若是html数据,则可以运用正则表达式或者Xpath去提取数据;若是json类型的,则导入json模块加以提取。若是从一级页面中获取到更多链接,则将这些链接添加进待下载队列当中,对它们进行去重和排序操作,然后等待调度器的调度。在整个系统中,链接可以分为两类:一类是目录页链接,里面包含着岗位名称和岗位类型,以及其它链接,此时我们需要提及岗位名称、岗位类型和下一页的链接;一类是内容详情页链接,里面包含着岗位职责和岗位要求的信息。网络需要从每一个目录页链接当中来提取所需要的数据之后,加入到待下载队列并准备进一步爬取。爬取流程如图3-2所示。图3-2.爬虫流程设计图由此流程图便知,首先要先获取一个start_url地址,才可以进行爬取任务。所以需要开始进行网页分析。腾讯招聘网页分析判断网页的静/动态加载首先进入腾讯招聘网站(/),我们可以看到如图3-3所示的腾讯招聘网站主页,点击“查看工作岗位”即可得到此招聘网站的大量信息。图3-3.腾讯招聘网站主页单击点开之后便是招聘网站的分页,如图3-4所示,这时候可以依据不同的地区选择想要了解的职位信息。以中国的四个一线城市(北京、上海、广州、深圳)为例,主要分析这四大地区的网页地址。图3-4.腾讯招聘网站分页判断网页静/动态加载,主要依据是查看网页源代码中有没有具体数据,有数据则为静态加载,无数据则为动态加载。静态加载的数据主要是html数据,提取数据可以使用正则表达式或xpath方法。动态加载则需要利用控制台并根据页面的动作来抓取网络数据包,即json数据包的url地址。以腾讯招聘网站为例,由于网页源代码中没有具体数据,则为Ajax动态加载,根据控制台和页面刷新可以在XHR上面得到三个异步加载的数据包,在Query文件的Preview中发现了需要爬取的数据,如图3-5所示。图3-5.招聘网站网页信息分析一级网页获取相应数据 在XHR得到json数据包,此时需要在Headers上面查找有用的信息。如图3-6所示,需要提取到的url地址便是图中RequestURL。图3-6.一级页面Headers信息RequestURL(一级页面):/tencentcareer/api/post/Query?timestamp=1584696974713&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex=1&pageSize=10&language=zh-cn&area=cn然而此url地址比较复杂,所以需要分析每个参数。在Headers底端的QueryStringParameters(查询参数)栏便有着这个网页地址的所有参数。在获取到北京、上海、广州、深圳以及不分地区的招聘网页地址后,分别得到它们的参数区别,如图3-7所示。图3-7.北京、上海、广州、深圳以及不分地区的招聘网页地址参数在这些参数中,可分析得到,如表3-1所示。表3-1一级页面各参数所代表的含义timestamp:时间戳cityId:‘2’为北京,‘3’为上海,‘5’为广州,‘1’为深圳,‘’为不分地区pageIndex:页数pageSize:10个(招聘职位)由于删去timestamp这个参数后依然可以得到json数据包,所以重要的参数分别为cityId、pageIndex、pageSize。可得到一级页面one_url:/tencentcareer/api/post/Query?&countryId=&cityId={}&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn最后再运用format方法即可将字符串分别带入,得到一个完整的url。代入参数后打开此链接,所得到的信息便是我们需要的json数据包,里面包含所有招聘职业的职业名称、职业类别和工作地点等大量数据,如图3-8所示。图3-8.一级页面Json数据包在这个json数据包中,我们可以分析得到想要的数据,如表3-2所示。表3-2一级页面各参数所代表的含义RecruitPostName:职位名称CategoryName:职位类别LocationName:工作地点根据图3-8展示的json数据包,我们可以知道这些数据是需要根据字典的方式来进行提取,首先由一个大字典含有的‘Data’键来对应值,这个值为所需要提取的第二个字典,根据第二个字典的键‘Posts’来获取数据。‘Posts’对应的值为一个列表,在列表中提取字典,所以我们可以根据以上信息,运用for循环来编写提取数据的代码:forjobinhtml['Data']['Posts']:#职位名称=job['RecruitPostName']#职位列别=job['CategoryName']#工作地点=job['LocationName']在这个数据包中没有我们想要的职位职责和职位要求,所以就需要分析二级网网页来获取。分析二级网页获取相应数据 二级页面,是在一级页面中点开一个招聘职位得到的网页,同理可以得到二级页面的相应数据,如图3-9所示。图3-9.二级页面Headers信息RequestURL(二级页面):/tencentcareer/api/post/ByPostId?timestamp=1584717244516&postId=1237234611482791936&language=zh-cn分析三个不同职位的网页链接参数,如图3-10所示,将参数进行对比,可以得到postId是不一致的,可以发现不同职位间都有着不同的postId来于此对应,而且这个postId在一级页面的json数据包中也有包含,所以可以根据一级页面得到的postId来获取二级页面的数据。图3-10.网页参数对比因此得到二级页面地址为:/tencentcareer/api/post/ByPostId?&postId={}&language=zh-cn利用format方法代入一个职位的postId,即可得到相应的json数据包,如图3-11所示。图3-11.二级页面json数据包在这个json数据包中,我们可以分析得到想要的数据如表3-3所示。表3-3二级页面各参数所代表的含义Responsibility:职位责任Requirement:职位要求在这些json数据包中,利用提取字典的方式便可以从中爬取到想要的数据。分析完一级页面和二级页面,即刻开始设计爬虫的具体实现。网络爬虫的具体实现创建spider项目文件第一步需要建立一个Scrapy项目文件,即在终端中运行更改目录的命令,把当前位置切换到将要用于保存爬虫代码的文件夹中,运行命令“scrapystartproject+自定义的爬虫目录名称”,文件夹中会自动生成爬虫的项目框架。第二步切换到该爬虫目录,可以看到该目录文件夹里的内容:项目配置文件、python模块、item文件、pipelines管道文件、setting文件和spider目录文件夹等几个部分。最后在终端输入命令“scrapygenspider+爬虫文件名+爬虫对象域名”,即可开始进行爬虫项目设计。定义Item容器Item负责定义以及储存获取的网络数据,而且定义Item容器是为了消除由于拼写错误带来的麻烦,而且它也增加了额外的保护机制。依据实际情况在item.py中对提取到的数据编写相关的字段,比如职业名称、职业类别、工作地点、职业责任和职业要求。 Item.py关键代码如下:importscrapyclassTcrecruitItem(scrapy.Item):#名称tc_name=scrapy.Field()#类别tc_type=scrapy.Field()#工作地点tc_location=scrapy.Field()#职责tc_duty=scrapy.Field()#要求tc_require=scrapy.Field()pass编写爬虫程序爬虫程序spider.py用于爬取一级页面及其包含的数据、二级页面及其包含的数据,它的实现内容包括:初始下载的链接地址即start_urls、后续跟进网页的URL链接即two_url、采用的算法、提取数据生成item。在这里,以中国四大一线城市(北京、上海、广州、深圳)以及全国范围为例,根据腾讯招聘网站地址可以得到这五个地区的参数,再用format()方法将参数代入进网站地址里便可以得到地区对应的json数据包,相关代码如下:classTcrecruitSpider(scrapy.Spider):name='tcrecruit'allowed_domains=['']a=''city_url='/tencentcareer/api/post/'\'Query?timestamp=1584608233122&countryId=&cityId='#选择要爬取的地区choice=input('1.深圳2.北京3.上海4.广州5.全部\n请选择:')ifchoice=='1':a=1elifchoice=='2':a=2elifchoice=='3':a=3elifchoice=='4':a=5else:a=''#将网络地址合并one_url=city_url+str(a)+'&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn'two_url='/tencentcareer/api/post/ByPostId?&postId={}&language=zh-cn'start_urls=[one_url.format(1)]得到json数据包后,要编写翻页的函数以便能获取大量的职位信息,这里运用for循环进行翻页操作,相关代码如下:defparse(self,response):forpage_indexinrange(1,21):url=self.one_url.format(page_index)yieldscrapy.Request(url=url,callback=self.parse_one)分析招聘主题信息爬虫要爬取的数据信息包括职位名称、职位类别、工作地点、职位责任和职位要求;观察分析腾讯招聘页面的json数据包,再根据python自带的json.loads()方法将json类型的数据变成python的数据类型,然后用字典提取数据方式将所需要的数据提取出来。在一级页面能够获取到二级页面的必备参数postId,然后将postId拼接到two_url便可以进入二级页面的json数据包去提取数据。重要代码如下:defparse_one(self,response):html=json.loads(response.text)forjobinhtml['Data']['Posts']:item=TcrecruitItem()#职位名称、职位类别、工作地点item['tc_name']=job['RecruitPostName']item['tc_type']=job['CategoryName']item['tc_location']=job['LocationName']#postID:拼接二级页面的地址post_id=job['PostId']two_url=self.two_url.format(post_id)#交给调度器yieldscrapy.Request(url=two_url,meta={'item':item},callback=self.parse_two)defparse_two(self,response):item=response.meta['item']html=json.loads(response.text)#职位责任item['tc_duty']=html['Data']['Responsibility']#职位要求item['tc_require']=html['Data']['Requirement']yielditem编写pipelines.py若要在函数里面加上可以在终端输出数据的功能,只需要添加相关代码:classTcrecruitPipeline(object):defprocess_item(self,item,spider):print(dict(item))returnitem接着便是保存数据,首先要导入pymysql库,然后依次编写自己数据库信息,例如用户名、密码、表名等;然后再将爬取的数据插入相对于的位置,需要定义一个列表,然后用列表来进行传递参数;接着提交到数据库去自动执行代码;最后关闭数据库。相关代码如下:importpymysqlclassTcrecruitMysqlPipeline(object):defopen_spider(self,spider):#打开数据库并输入端口号账号密码等信息self.db=pymysql.connect('','root','moon631166427','tencentdb',charset='utf8')self.cursor=self.db.cursor()defprocess_item(self,item,spider):ins='insertintotcrecruitdatavalues(%s,%s,%s,%s,%s)'job_list=[item['tc_name'],item['tc_type'],item['tc_location'],item['tc_duty'],item['tc_require']]self.cursor.execute(ins,job_list)mit()returnitemdefclose_spider(self,spider):self.cursor.close()self.db.close()当然,保存数据的前提需要在数据库创建能与存储爬虫数据相对应的表格。如图3-12所示。图3-12.创建数据库修改setting.py离编写完scrapy网络爬虫程序只差最后一步,便是修改setting.py的参数和添加scrapy-redis。(1)修改最大并发量,最好将并发量修改小一点,这个参数越小,爬虫程序便越安全,但爬取时间会变长一些。CONCURRENT_REQUESTS=10(2)修改下载延迟参数,这里将延迟参数调至0.3s:DOWNLOAD_DELAY=0.3(3)修改REQUEST_HEADERS请求头,这里是由下载中间件完成,添加user-agent模拟浏览器浏览爬取对象的网络地址:DEFAULT_REQUEST_HEADERS={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language':'en','User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64;rv:6.0)Gecko/20100101Firefox/6.0'}(4)修改item_pipeline项目管道,添加数据库(若想将数据存储进redis,也可以在这里添加redis相对应的管道):ITEM_PIPELINES={'Tcrecruit.pipelines.TcrecruitPipeline':300,'Tcrecruit.pipelines.TcrecruitMysqlPipeline':250,#'scrapy_redis.pipelines.RedisPipeline':250,}(5)添加scrapy-redis:使用scrapy_redis的调度器SCHEDULER="scrapy_redis.scheduler.Scheduler"使用scrapy_redis自带的去重机制DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"爬取结束后清除请求指纹(也可以不清除):SCHEDULER_PERSIST=True定义redis主机的地址和端口号(这里REDIS_HOST为空时,处理器会自己寻找本机电脑的地址):REDIS_HOST=''REDIS_PORT=6379

第4章系统功能测试与实现爬虫运行测试在CPU为CORE(TM)i5-3317,内存为8G,操作系统为WIN10-64位的戴尔笔记本,pycharm版本为2019.2,python版本为3.7.3的环境下,通过在pycharm建立一个run.py,导入cmdline库,编写命令“cmdline.execute(‘scrapycrawltcrecruit‘.split())”,运行run.py来启动爬虫进行腾讯招聘信息爬取测试选择要爬取的地区如图4-1所示,爬虫开始运行,总共可以爬取5个地区。以深圳地区为例子,输入深圳地区的相应数字,即可开始爬取腾讯深圳地区招聘职业的数据。图4-1.选择深圳地区爬虫爬取过程如图4-2所示,为爬虫爬取腾讯深圳地区招聘职业的信息,从图中可以看到‘tc_name’正确对应了招聘职位的职位名称;‘tc_type’正确对应了职位类别;‘tc_location’正确对应了工作地点,即为深圳地区;‘tc_duty’正确对应了职位责任;‘tc_require’正确对应了职位要求。图4-2.爬虫爬取过程数据库存储数据如图4-3所示,进入数据库并查询数据表里面的数据;图4-3.查询数据表如图4-4,为数据表里面呈现出来的内容,至此可以说明数据库成功存储来自爬虫项目爬取到的数据。图4-4.数据表格内容爬虫爬取结束如图4-5所示,为爬虫成功运行并结束之后显示的内容,由于设定爬取20页,每页20个职位,所以总计成功爬取到的职位个数为200个。图4-5.爬虫运行结束如图4-6所示,打开RedisDesktopManager,也可以查到成功爬取的职位个数为200个,并且这200个职位在scrapy-redis的作用下是不会重复的。图

温馨提示

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

评论

0/150

提交评论