本栏目责任编辑:谢媛媛
软件设计开发
基于Scrapy 爬取招聘信息的研究
林观德
(广州工商学院,广东广州510062)
摘要:在信息浩如烟海的大数据时代,如何高效获取万维网上所需的信息,是抢占先机的关键。文章基于Scrapy 的框架及
工作原理展开论述,使用Scrapy 定向爬取百度社会招聘网站当中的相关招聘信息数据,对所爬取的招聘信息数据进行处理和分析,分析结果可为毕业生就业前收集招聘信息提供参考。关键词:Scrapy ;网络爬虫;网页信息抓取中图分类号:TP391.3
文献标识码:A
文章编号:1009-3044(2020)35-0054-02
开放科学(资源服务)标识码(OSID ):
1Scrapy 简介
Scrapy 是一个为了抓取万维网上的网页数据、提取结构性数据而用Python 语言编写的应用框架,该框架是封装的,对于网站的内容抓取速度非常快捷,并可以下载至本地存储。Scra⁃py 用途很广,除数据挖掘外,还可以用于监测和自动化测试。用户也可以根据需要对其代码进行修改,快速地抓取网站数据内容,使用起来极为方便[1]。Scrapy 架构是由下图各部分组成(如图1所示)。
图1Scrapy 爬虫框架
2Scrapy 架构原理
Scrapy Engine 负责Spider 、ItemPipeline 、Downloader 、Sched⁃
uler 中间的通讯,信号、数据传送,Scrapy 爬取数据处理的工作
流程如图1所示[2]
。图中带有箭头方向表示数据流向。
当用户要爬取某个目标网站的数据,Spiders 向Scrapy 发出该网站的URL 请求。当Scrapy 接收到Spiders 请求信号后,告知Scheduler 把与提取相关的页面请求排序入队[3]。
Scheduler 接受Scrapy 发过来的请求信号,并将该信号按某种方式处理后,再压URL 入队列中,当再次需要时,还给Scrapy 。此时Scheduler 继续送下一个要爬取的URL 传给Scrapy ,Scrapy 通过Downloader Middlewares 将URL 转发给Downloader 。
Downloader 得到Requests 请求,根据指令从页面上提取需要数据,再将提取响应交还给Scrapy 。
Scrapy 收到Downloader 的响应,通过Spider Middlewares 转
给Spiders 处理。
Spiders 获取的响应信息经过分析,解析出item 字段所要的数据信息,由Pipeline 下载完成任务,返回提取的项目内容并处理新的URL 请求给Scrapy 。
Scrapy 告诉Pipeline 处理获取的数据,Pipeline 收到由Spi⁃ders 传来数据,并对它清理、验证及存取等。
Scrapy 告诉Scheduler 新的URL ,Downloader 收到URL ,重复以上操作,至Scheduler 的URL 队列为空时,结束Spiders 运行。
3实现Scrapy 的爬取URL 信息
3.1主题信息爬取分析
目的:使用scrapy 爬取百度社会招聘的信息。网址:hr.baidu/external/baidu/index.html#/social/2是百度面向社会招聘信息的网址。通过该网址可以查询百度招聘职位的相关信息[4]。
使用scrapy 框架进行数据的爬取并存储在本地文件中,分别为items.py 、spider 以及pipelines.py 文件。
3.2设计爬取招聘信息的主题
图2爬虫项目目录结构
1)建立爬虫项目
编写Scrapy 网络爬虫项目。在项目命令行中输入命令:
收稿日期:2020-08-28作者简介:林观德(1959—),男,广东湛江人,高级实验师,学士,主要研究方向为计算机网络。
54
软件设计开发
本栏目责任编辑:谢媛媛
Computer Knowledge and Technology 电脑知识与技术
第16卷第35期(2020年12月)
"scrapy Startproject jobSpider",工程名为jobSpider 的爬虫的工程目录如图2所示。
其中:scrapy.cfg jobSpider /
jobSpider /items.py
jobSpider /middlewares.py jobSpider /pipelines.py jobSpider /settings.py jobSpider /spiders/:
在jobSpider 项目文件夹创建爬虫spider 类文件的命令:"scrapy genspider jobPosition talent.baidu"。其中jobPosition 是Spider 的名称,"talent.baidu"是网站域名。该命令是在"jobSpider/spiders"这个目录中创建一个jobPosition.py 文件,如图3
所示。
图3jobPosition.py 爬虫文件
2)定义Item 要爬取的内容
Item 对象是一个简单的容器,用于收集提取到的数据,根据需要在item.py 文件中对提取的数据定义相应的字段,根据百度社会招聘网站(hr.baidu/external/baidu/index.html),可以获取职位名称(MC )、职位类别(LB)、招聘人数(Num)、工作地点(Location)、更新时间(T)。根据需要可对自动生成Item.py 的源文件爬取内容,然后作的修改符合自己的要求。
3)编写spider 文件进入jobspider 目录,使用Scrapy genspider 命令编写爬虫。Scrapy genspider jobPostion "www.baidu/",其中“jobPostion ”为爬虫名,www.baidu 为爬虫作用范围。执行Scrapy genspider 命令后会在spiders 文件夹中创建一个jobPostion.py 的文件,根据jobPostion.py 的源文件作相应修改。部分代码如下:
#下面的for 循环处理爬取一页的数据
for each in response.xpath("//tr[@class='even']|//tr[@class='odd']")
item =jobPostionItem()
item['MC']=each.Path("./td[1]/a/text()").extract()[0]item['LB']=each.xpath("./td[2]/text()").extract()[0]item['Num']=each.xpath("./td[3]/text()").extract()[0]item['Location']=each.xpath("./td[4]/text()").extract()[0]
item['T']=each.xpath("./td[5]/text()").extract()[0]
yield item
if self.offset<1000self.offset +=10
yield scrapy.Request(self.url +str(self.offset),callback =self.parse)
4)编写pipelines.py 文件Import json
Class jobPostionPipeline(object)def__init__(self)
self.fileName =open("jobPostion.json","w")def process_item(self,item,spider):self.f.write(item['href']+'\n')return item
def close_spider(self,spider)self.fileName.close()5)setings.py 的设置
ROBOTSTXT_OBEY =True DOWNLOAD_DELAY =4
DEFAULT_REQUEST_HEADERS ={
"User-Agent":"Mozilla/5.0(compatible;MSIE 9.0;Windows NT 6.1;Trident/5.0;",
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language':'en',}
//下面是管道配置代码ITEM_PIPELINES ={……
)执行命令
scrapy crawl jobPostion 即可爬取……即可爬取……
4结束语
本文基于Scrapy 爬虫框架实现了一个爬取招聘网站的招聘信息采集,从求职者的角度去进行数据分析,能满足本项目对招聘信息数据抓取的设计要求[5]。求职者可以通过对不同岗位进行搜索的分析结果,进而判断招聘信息的有效性及准确性,有利于更好地选择就业岗位。
参考文献:
[1]零一,韩要宾,黄园园.python3爬虫、数据清洗与可视化实战[M].北京:电子工业出版社,2018.
[2]刘宇,郑成焕.基于Scrapy 的深层网络爬虫研究[J].软件,2017,38(7):111-114.
[3]刘杰,葛晓玢,闻顺杰.基于Python 的网络爬虫系统的设计与实现[J].信息与电脑:理论版,2019(12):92-93,96.
python大数据就业前景[4]刘杰,葛晓玢,闻顺杰.基于Python 的网络爬虫系统的设计与实现[J].信息与电脑:理论版,2019(12):92-93,96.
[5]郭丽蓉.基于Python 的网络爬虫程序设计[J].电子技术与软件工程,2017(23):248-249.
【通联编辑:谢媛媛】
55
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论