爬⾍应⽤开发(python课程设计Ⅰ)
近些年来,随着⼈类社会的进步,互联⽹⾏业快速发展,社会的信息量不断地累计,呈现爆炸式增长,可以说⼤数据时代已经全⾯到来。同时,⽹络招聘作为企业招聘⼈才的⼀种重要⽅式,相对于流程繁琐,耗费⼤量时间,沟通渠道狭窄的线下招聘,⽹络招聘成本低,灵活性、针对性强,资源充⾜,覆盖⾯较⼴,通常是当代⾼校学⽣在求职时需要密切关注的信息来源。随着⽹络招聘规模的增长,⼤量招聘⽹站出现,⽽这些⽹站中包含的招聘信息也为研究者提供了⼤量的数据。在信息浩如烟海的⼤数据时代,如何⾼效获取万维⽹上所需的信息,是抢占先机的关键。本⽂基于Scrapy的框架及⼯作原理展开论述,使⽤Scrapy定向爬取腾讯招聘⽹站当中的相关招聘信息数据,对所爬取的招聘信息数据进⾏处理分析,分析结果可为毕业⽣就业前招聘信息提供参考。
python 爬虫教学本⽂选取了腾讯招聘作为招聘数据采集的⽹站,总体抓取了不同地区的不同职位的分布情况,不同岗位的职位要求以及岗位招聘的截⽌⽇期和申请⽹址。通过对不同岗位的数据进⾏分析,可以清晰的了解公司对不同岗位的具体要求,能够为求职者提供⼀个⽐较客观的参考标准,可以帮助求职者⽐较直观的了解当前该公司对⼈才需求的标准。
2.1⽹络爬⾍的类型
⽹络爬⾍是作为⼀种计算机程序,具有⾃动下载⽹页功能,可以在互联⽹⾥采集数据,满⾜科学计算、
数据处理以及⽹页开发等多个⽅⾯的⽤途,⽹络爬⾍有着通⽤⽹络爬⾍、聚焦⽹络爬⾍、增量式⽹络爬⾍以及深层⽹络爬⾍等多种类型。
(1)通⽤⽹络爬⾍∶是根据URL指向爬⾏的过程中,采取深度优先、⼴度优先的策略。由URL扩充⾄Web,逐级、逐层访问⽹顶页链接,适⽤于某⼀主题的⼴泛搜索,⼀般应⽤于搜萦引擎。在⼤型Web务商中,往往也需要应⽤通⽤⽹络爬⾍。
(2)聚焦⽹络爬⾍:是根担内容评价、链接结构评价,按照预设的主题,有选择性地爬⾏。在输⼊某⼀个查间词时,所查间、下载的⽹络页⾯均是以查询词作为主题。⽽在评价链接的过程中,需要应⽤到半结构化⽂档的Web页⾯,应⽤Page Rank算法。在聚焦⽹络爬⾍中,引⼊增强学习、建⽴语境图,均是制定爬⾏策略的有效途径。
(3)增星式⽹络腿⾍∶其在爬⾏过程中,⽹页发⽣增星式的更新变化。应⽤统⼀更新法,按照固定的频率进⾏⽹页访问,不会因⽹页的更新、变化⽽改变频率。应⽤个体更新法,道循个体⽹页的频率,根据频率的改变情况,进⾏各页⾯的重新访问。或根据⽹页变化频率的差异性进⾏分类更新。
(4)深层⽹络爬⾍:通过传统搜索引擎和静态链按获现的页⾯多为表是页⾯,⽽为了获取深度页⾯,则需要利⽤深层⽹络爬⾍。深层⽹络爬⾍在爬⾏过程中,基于领城知识,进⾏表单填写,然后进⾏语义分析,获取关键词,提交关键词后,获取Web页⾯。或是基于⽹络结构分析,进⾏表单填写,利⽤DO
M树形式,表⽰HTML⽹页。
2.2⽹络爬⾍的使⽤要求
⽹络爬⾍技术的应⽤,⽆论是个⼈使⽤,还是科学研究和商业⽤途,必须遵循合法、合规的要求。爬⾍爬取的数据中,个⼈隐私、受到版权保护的数据是禁⽌爬取的内容。对于加密的数据信息,在未获得权限的情况下,禁⽌爬⾍爬取,不得随意转载,更不能获取商业利益。另外,爬⾍在爬取⽹络数据的过程中,需要遵循Robot协议,并明确⽹页中爬⾍可爬取数据和禁⽌爬取数据。
2.3 Scrapy框架⼯作流程
Scrapy是⼀套纯Python语⾔开发的,⽤于爬取⽹页内容或各种图⽚并提取结构化数据的开源⽹络爬⾍框架,可以应⽤于数据挖掘、信息处理或者存储数据等⼀系列的操作中,是⽬前Python中使⽤最受欢迎和最⼴泛的爬⾍框架。其框架主要由以下为5部分组成:Scrapy
Engine(引擎)、Scheduler(调度器)、Spiders (蜘蛛)、Item Pipeline(数据处理流⽔线)和Downloader(下载器)如图所⽰。
Beautiful Soup框架:名⽓⼤,整合了⼀些常⽤爬⾍需求。缺点:不能加载JS。
Scrapy框架:Scrapy框架是⼀套⽐较成熟的Python爬⾍框架,是使⽤Python开发的快速、⾼层次的信息爬取框架,可以⾼效的爬取web页⾯并提取出结构化数据。Scrapy应⽤范围很⼴,爬⾍开发、数据挖掘、数据监测、⾃动化测试等。
Portia框架:Portia框架是⼀款允许没有任何编程基础的⽤户可视化地爬取⽹页的爬⾍框架。
newspaper框架:newspaper框架是⼀个⽤来提取新闻、⽂章以及内容分析的Python爬⾍框架。
Python-goose框架:Python-goose框架可提取的信息包括:<1>⽂章主体内容;<2>⽂章主要图⽚;<3>⽂章中嵌⼊的任heYoutube/Vimeo 视频;<4>元描述;<5>元标签。
Mechanize框架:优点:可以加载JS。缺点:⽂档严重缺失。不过通过官⽅的example以及⼈⾁尝试的⽅法,还是勉强能⽤的。
Selenium框架:这是⼀个调⽤浏览器的driver,通过这个库你可以直接调⽤浏览器完成某些操作,⽐如输⼊验证码。
Cola框架:⼀个分布式爬⾍框架。项⽬整体设计有点糟,模块间耦合度较⾼,不过值得借鉴。
PySpider框架:PySpider是binux做的⼀个爬⾍架构的开源化实现。主要的功能需求是:抓取、更新调度多站点的特定的页⾯。需要对页⾯进⾏结构化信息提取。灵活可扩展,稳定可监控。
那么为什么要使⽤Scrapy框架呢?Scrapy框架主要有以下优点:
1.更容易构建⼤规模抓取项⽬;
2.异步处理请求的速度快
3.使⽤⾃动调节机制⾃动调整爬取速度
4.通过管道的⽅式存⼊数据库
四、数据爬取(腾讯招聘岗位数据)
4.1模型建⽴
(1)使⽤Scrapy提供的全站爬取类,⽅便在爬⾍在⼯作的时候能⾃动根据定义的⼀些规则判断探测到的ur1链接是否需要下载。
(2)为了避免字段出错,提⾼数据传递过程的准确性,使⽤Scrapy 中的 item⽂件集中创建需要爬取的字段属性类,在其他需要的地⽅实例化该类即可,通过此种⽅式的被实例化的类的字段可直接被传递到pipelinet⽂件中集中处理字段值的保存事项。本爬⾍中需要在item中定义的字段有六个,当前职位的名称RecruitPostName,当前职位的⼯作地点LocationName,职位的类别CategoryName,职位的职责Responsibility,职位招聘的截⽌⽇期LastUpdateTime和职位申请的⽹址PostURL。
(3)在 setting⽂件中打开⾃动接收并处理的pipeline管道,并在pipelines中设置所有数据的存储和处理,本爬⾍采⽤的是mysql存储。
(4)突破反爬⾍机制,当前⼤部分⽹站的反爬⾍策略会对访问⽤户的User Agent进⾏检查,为保证爬⾍的有效进⾏,收集当前⽤户还在使⽤的浏览器的User Agent,并在爬⾍配置中添加UA。
(5)将robot协议改为不要遵守,避免寻⽹站⾥⾯的,导致爬⾍会很快停掉。
(6)创建start.py,作为爬⾍程序启动脚本,避免每次⼿敲命令。
4.2基于Scrapy的腾讯招聘⽹站爬⾍实现
4.2.1建⽴爬⾍
由于Scrapy是⼀个框架,为了能正常使⽤这个框架的各个中间件和接⼝,需要项⽬⾃动创建,具体命令:
Scrapy startproject tencent
此时只是创建了⼀个⼯程框架,但还没有爬⾍。接下来,创建爬⾍⽂件,具体命令如下:
scrapy genspider tx tencent
其中,爬⾍的名字是tx,要爬取的域名范围是tencnet。
4.2.2实现爬⾍主⽂件
创建爬⾍时,在爬⾍主程序⽂件中重点只需编写两项内容。⾸先设置开始爬取的⽹址url,右键查看⽹页源代码发现⽹页主体内容是Query动态加载的数据,所以我们需要抓包。点击Network抓到传输的jso
n数据。抓到数据后,然后分析翻页时这个url的变化,每⼀页不同的是timestamp(时间戳)和pageIndex(页数),我们可以使⽤fomat和for语句获取每⼀页的数据本页⾯主要代码如图所⽰。
4.2.3实现爬取字段
本例中采⽤的是TencentItem实例化在items中写好的本爬⾍的item对象,包含六个字段。
在scrapy中定义结构化字段,都在items.py中。在数据通过return到此处。本爬⾍在处理时使⽤了⼀个去除所有空格和换⾏符的函数,使得该字段存储的都是⽂本,具体如图所⽰。
4.2.4实现数据存储
在pipelines.py中创建本爬⾍中使⽤的时mysql数据库进⾏存储,具体参考如图。
4.3数据查询
数据保存到数据库后可以通过sql语句进⾏相关查询,具体如图所⽰:
4.4遇到的难点
(1)⼀开始尝试⽤xpath解析⽹页⽂本内容,在⽹页端解析能拿到数据,但在python中怎么也拿不到数据,查询后发现⾃⼰参考的资料有点过时,腾讯的⽹站架构和以前也不⼀样了。前端展⽰数据时⽤过json传递动态⽣成的。其中的⽹页链接是通过js⽣成的。并不在原始⽹页写死的。
(2)本来想把数据存到oracle数据库中。报错多次查百度后还是报错应该是python版本和Oracle版本
不匹配,32位/64位也不匹配。要重新安装太⿇烦就换了mysql数据库。Mysql在拼接sql语句时也总报错重写了⼏次终于可以了。Python中不需要定义数据类型,每次都要不决定这是什么类型,不如java⽅便可以直接看到类型。
(3)mysql的数据⽂件不太确定,怎么也没的这个数据库的.idb数据⽂件。查了下百度mysql有引擎有两种myisam和innodb。
在Myisam下,数据库的每个数据表都有*.frm、*.YMI和*.YMD三个⽂件,其中*.frm存储数据表的表结构,*.MYI存储数据表的索
引,*.MYD存数数据表的记录数据。
在Innodb下,每个数据库下的每个数据表只有⼀个*.frm存储数据表的表结构,⽽所有数据库的所有表数据索引、数据记录都全部存储在ibdata1⽂件中,⽽ib_logfile0和ib_logfile1是⽇志⽂件。
五、总结
本⽂基于Scrapy爬⾍框架实现了⼀个爬取招聘⽹站的招聘信息采集,达到了预期爬取数量和质量。从求职者的⾓度去进⾏数据分析,能满⾜本项⽬对招聘信息数据抓取的设计要求。求职者可以通过对不同岗位进⾏搜索的分析结果,进⽽判断招聘信息的有效性及准确性,有利于更好地选择就业岗位。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。