信IB与电as
China Computer&Communication2021年第4期网絡与通信枝术
基于Python爬虫技术的51job网站内容爬取
甯文龙毛红霞*
(四川大学锦城学院计算机与软件学院,四川成都611731)
摘要:51job前程无忧网站是一个全国著名的招聘网站,里面包含着成千上万的招聘信息,在这些招聘信息中存在大量无用的垃圾信息.为了快速获得所需要的招聘信息,本文采用Python的爬虫技术将51job网站上的招聘信息爬取到本地,再进行分析预处理,可以更加直观地对未来的岗位进行研究与选择.
关键词:Python;网络爬虫;51job网站
中图分类号:TP393.092;TP312.1文献标识码:A文章编号:1003-9767(2021)04-180-03
Content Crawling of51job Website based on Python Crawler Technology
Ning Wenlong,Mao Hongxia
(School of Computer and Software,Jincheng College of Sichuan University,Chengdu Sichuan611733,China) Abstract:51j ob is a famous recruitment website in China.It contains thousands of recruitment information.There are a lot of useless and disturbing spam information in these recruitment information.In order to quickly obtain the required recru辻ment information,we use Python crawler technology to crawl the recruitment information on51j ob website to the local,and then analyze and preprocess it,which can help us to research and select the future position more intuitively and efficiently.
Keywords:Python;web crawler;51job website
0引言
在互联网快速发展的背景下,人们不再满足于选择性少、局限性大的线下求职的方式,更加倾向于选择面广、局限性低的网上求职方式,因此网上求职网站应运而生。虽然求职网站能给人们带来大量的岗位需求信息,但是随着人们对于网上求职需求的日益增多,出现了各式各样的求职网站,并且每个网站上的求职信息也较为复杂,人们在这些冗杂的岗位需求信息中到比较合适的岗位信息是较为困难的。在科学技术高速发展的带动下,客观大数据的统计分析应用已经成为现代社会发展的推动力。本文首先利用Python提供的爬虫技术将网页源码信息爬取到本地,再通过一些预处理方法使一些较为冗余的信息变得更加精简。
本文采用Anaconda3平台及谷歌浏览器,通过模拟人类登录和点击网络的操作来爬取内容。以前程无忧网站为例,本文采用cookie方法登录,进入登录界面后打开开发者工具,然后手动登录,在右侧www.51job这一选项中查所需要的信息并复制到rqg请求头部里,实现模拟登录。同时,根据url的变化规律实现翻页。此外,因为需要爬取的招聘信息存放在网页源码的一串json数据里,所以先将网页源码爬取保存到本地,通过re方法爬取招聘信息并保存为Excel 数据,最后对数据进行预处理,对工资进行单位统一并填补空缺值。
1相关技术分析
1.1Python网络爬虫的原理
随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。网络爬虫是一种程序或者脚本,能够按照一定的规则自动抓取万维网的信息[1]o
1.2登录处理
在相同域名间通过Cookie和令牌传递实现登录访问[2]o 当用户第一次正确输入密码并进入网站,网站会为用户分发一个出入门牌,在一定的时间内使用门牌就可以直接进入大门,无须每次都输入密码。但是这个出入牌是临时的,只在一段时间内有效。
作者简介:甯文龙(2000-),男,四川成都人,本科在读。研究方向:Python网络爬虫。
通信作者:毛红霞(1981-),女,宁夏石嘴山人,硕士研究生,副教授。研究方向:大数据、人工智能。E-mail:56734747@qq。
信愿与电IS
China Computer&Communication 2021年第4期
1.3爬取动态网页
动态网页是交互式网页,无须改变网页源代码,但是显示内容可以根据时间、环境或者操作者发生改变。网页可以根据用户的不同浏览方式和各种请求自动显示内容,可以自动更替或者和用户进行一些互动。目前,动态网页开发技术主要有JSP、ASP和PHP⑶。
2爬虫模型设计
2.1分析网页结构
网页结构化信息提取是指从网页中提取出结构化的文本数据信息,当用户进行搜索的时候,网址会跳
转到以search.5ljob开头的url里,任意检查一个招聘信息,可以得到它的标签、属性、HTML代码等。经过对网页进行分析,发现需要爬取的信息及内容都是以json格式存在于<script type=”text/javasciipt”>这样一个</script>标签里,然而根据参考文献[10]中的BeautifulSoup库来直接爬取51job的网页是无法成功的。在Python中,re模块就是一个用于处理正则表达式的模块,可以通过分析json来爬取招聘信息⑷。它比Xpath或者BeautifulSoup更直接,不用分析网页结构与路径,直接分析json即可爬取。
2.2导入模型需要使用的库
使用import语句导入所需要的库,如chardet、requests Cookie、Json、urllib^time、re和openpyxL
2.3使用cookie实现模拟登录
首先进入前程无忧网站登录界面,按F12打开开发者工具,切换到Network选项卡,勾选Preverse log选项,然后使用账号、密码进行登录,在左侧列表到www.51job 这一选项。在此选项寻loginurk cookie和useragent代码内容,然后复制,因为复制的内容是字符串形式,需要转换为字典形式,然后再复制到代码rqg请求头部里,此时完成模拟登录步骤[5'8]o
2.4分析URL
java调用python模型51job前程无忧网站是一个动态网页,需要分析它的URL来实现翻页操作,如图1所示。经过分析发现,search.5ljob/list/是不变的部分,对于000000,000000,0000,00,9,最前面的6个0是地区码,全国范围就是默认的6个0,后面的数字无影响。由于不做地区限制,所以说这一串不变,默认全国6个0。99是薪资范围,默认不限薪资(99)。%25E8%25AE%25A1%25E7%25AE% 2597%25E6%259C%25BA代表“计算机”这一职位信息,数字2是固定的。l.html中的1代表页数page,本文爬取数据实现翻页操作就是通过修改hlml前面的数字实现的。最后面的则是动态网页的一些参数和公司规模、学历要求等隐藏的筛选条件,本文暂不做处理。
A search.51job/list/000000,000000,0000,00,9,99,%25E8%25AE%25A1%25E7%25AE%2597%25E6%259C%25BA,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99°r
图1网址示意图
2.5爬取数据
2.5.1爬取网页内容到本地
本文定义一个getjobjist方法,参数分别为要输入的职位信息和页数。之前分析了url,先把默认的部分
写上去,把变化的职位信息和页数分别用变量key和page来控制。对于key(默认为空),因为输入的是汉字,而url里面是汉字编码的ASCII字符串,调用urllib.parse.quote方法(实验时发现必须调用两次才能成功,不然无法爬取,可能是网站设置原因)。page需要转换为字符串形式,通过调用传入的参数来控制翻页(默认为1)。本文通过在Network面板的对应的Request Header多加了几个请求头来伪装是浏览器,然后获取网页的Response对象,通过StatusCode来判断是否连通。如果状态码为200,即连通了,本文调用 获取整个html界面,部分代码如下:
def getj ob_list(keyword=None,page=1):
key=urllib.parse.quote(urllib.parse.quote(key w ord))
(url,headers=headers)
if response.status_code=200:
with open('c:\x\x',mode=,w',encoding=,gbk')asf:
f.write(html)
2.5.2爬取本地网页源码
打开本地文件查看源码,寻所需要的招聘信息,发现它在<script>标签内以json格式保存,放在window.—SEARCH_RESULT_这样一个字典里,此时就可以用正则表达式’来获取字典里面所有除换行之外的字符。在re.findal1方法里,pattem只获取小括号里的匹配结果,所以说html标签会被去除,返回一个包含各个职位详细信息和广告信息的列表。本文使用json解析器寻要爬取的对应数据的标题名。使用在线解析工具www.json,将这个字典“window._SEARCH_RESULT_”放进解析器,到需要爬取的Value对应的Key,例如职业名字是job_name,公司名是company_name。把这些value使用append方法放到一个新建的列表中。需要注意的是,由于招聘需求(attribute_ text)里面的value不止一个,需要用join方法分隔开各个value并且用逗号连接起来。这样每个列表里存放的都是无数个但是每个key都互相对应的value o部分代码如下所示:pattern=,window.__SEARCH_RESULT__=({.+?})</ script>,
data=re.findall(pattern,html)[O]
网辂与通信較术値■与电n
China Computer&Communication2021年第4期
job_list^json.loads(data)
本文在外部新定义几个列表分别来装getjobjist方法里爬取的数据,并采用循环来控制爬取页数。这里是从第1页爬到第20页,一共900条左右数据,然后降低执行频率,time.sleep(3)是3秒执行一次循环,通过模拟人点击的方式达到反爬虫的目的。
2.6保存数据
本文保存数据时使用的是openpyxl库的Workbook的方法,可以直接操作Excel文件卩呵。本文定义了一个save_ to_excel方法,参数分别是刚刚存好数据的列表。调用Workbook函数创建一个表格,调用create sheet函数创建表格里的工作簿,这个函数中的参数1是工作簿名字,参数2是位置参数,0是指从头开始插入表格。创建好后在第一行的每一列分别添加,工作名,、,公司名,、,工资,、,地址「要求,这5个数据。然后Workbook如果要传入列表里的值,需要用到zip函数将多个列表打包后分别写(append)到对应的列(row)里。然后用save('路径')即可保存Excel文件。
2.7数据的预处理
首先将单位进行统一,采用“元/月”,并且对工资这一范围区间用其均值进行代替,然后根据参考文献[8]中的数据清洗原理对空缺值进行处理。因为爬取数量较少,不采取删除缺失值的方式,而是将市级地区作为分类标准计算出每个地区的平均工资,再分析空缺值对应的城市,用其平均值进行填充,最后可绘制出每个地区的平均工资。
3结语
随着大数据技术的不断发展,Python爬虫技术也越来越成熟,已广泛应用在很多领域,为人们的生活提供了诸多便利。利用Python语言进行爬虫程序设计,是大数据时代实现数据采集的重要渠道,能够使一些较为冗余的信息变得更加精简。
参考文献
[1]李培.基于Python的网络爬虫与反爬虫技术研究[J].计算机与数字工程,2019,47(6):1415-1420,1496.
[2]王小红.基于Cookie的单点登录认证机制实现[J].重庆工商大学学报(自然科学版),2014,31(8):73-78.
[3]蒋治学.JSP技术及其在动态网页开发中的应用分析[J],浙江水利水电学院学报,2020,32⑵:75-77.
[4]马彤鑫.基于Python的正则表达式获取字符串信息[C]//天津市电子学会论文集,2020:299-300.
[5]赵子钦.基于Python爬虫技术的QQ空间说说的爬取[J],科学技术创新,2020(31):54-56.
[6]董恩康.大数据的计量数据采集与应用分析[J],网络安全技术与应用,2020(11):75-76.
[7]淮晓永,韩晓东,高若辰,等.一种自适应网页结构化信息提取方法[J].电子技术应用,2020,46(12):97-102.
[8]刘萍,刘瑞文,胡秀丽.基于图书借阅行为的数据预处理方法研究[J].内蒙古科技与经济,2020(19):121-122,161.[9]马宁,陈曦,张李铭.基于Selenium与Openpyxl的Web 脚本自动化设计研究[J].电脑知识与技术,2020,16(01):51-53,70.
[10]沈承放,莫达隆.beautifulsoup库在网络爬虫中的使用技巧及应用[J].电脑知识与技术,2019,15(28):13-16.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论