智联招聘数据爬取(基础篇)
优采云 发布时间: 2020-08-19 17:59智联招聘数据爬取(基础篇)
在智联招聘数据爬取(踩坑篇)中给出一种采集智联招聘数据的方式,方法简单,但不够自动化,效率较低。在本篇文章中,将介绍一种自动化采集方法,提高数据采集的效率。本篇文章可以将智联招聘网站数据搜集过程中的复制粘贴步骤省去,在浏览网页的同时,自动下载对应的json文件,实现数据采集。
工具介绍
上篇文章中提及,想要爬取的数据隐藏于某个链接的response中,即所谓的数据包,所以须要一个“抓包工具”。
常用的抓包工具包括fiddler和mitmproxy等,由于mitmproxy由python语言编撰,且支持自定义python脚本,所以作者选择使用mitmproxy对数据包进行抓取。
mitmproxy才能进行爬虫的原理如下:
mitmproxy相当于是一个蝶阀,从浏览器到服务器之间多了一层,所有的访问恳求就会首先传输到mitmproxy,再由mitmproxy传输到服务器;所有服务器返回的数据就会首先经过mitmproxy,再交由浏览器解析呈现。所以想要爬取的岗位信息必然会被mitmproxy记录,通过mitmproxy找到数据包,进而将数据包保存即可。
基本操作
mitmproxy安装
如智联招聘数据爬取(入门篇)中介绍,建议安装anaconda,本文依托anaconda进行操作。作者系统环境如下:
操作系统:Windows10 家庭中文版 64bit
Python:anaconda、Python3.7.7
anaconda安装python包的形式是在Anaconda Prompt中安装,mitmproxy的安装代码如下:
pip install mitmproxy
测试是否安装成功,可在Anaconda Prompt中输入以下代码测试。使用mitmweb测试的诱因包括:1)mitmproxy的安装实际上安装mitmproxy、mitmweb和mitmdump;2)mitmproxy在Windows系统下不可用,mitmweb和mitmdump的区别是mitmweb提供web界面,mitmdump为沉静模式,无web界面。初学时建议使用mitmweb,方便查看。
mitmweb --version
安装成功则会看见如下显示内容
Mitmproxy: 5.1.1
Python: 3.7.7
OpenSSL: OpenSSL 1.1.1g 21 Apr 2020
Platform: Windows-10-10.0.18362-SP0
mitmproxy基本操作
安装成功后,就来认识下mitmproxy。
1)在Anaconda Prompt中打开mitmweb,可以看见以下启动页(设置谷歌浏览器为默认浏览器),同时可以在Anaconda Prompt见到早已启动*敏*感*词*,*敏*感*词*端口为8080。
2)将1)中的启动页使用其他浏览器打开(作者使用的是“世界之窗”,复制粘贴网址即可),然后关掉谷歌浏览器(必须完全关掉),再在cmd中使用8080端口重新启动谷歌浏览器,并忽视证书错误(毕竟是*敏*感*词*,需要忽视证书错误)。(这一部分建议在爬虫前,新建一个谷歌浏览器的用户文件夹,优点一是防止对现有的谷歌浏览器设置形成干扰;优点二在下一篇介绍。所以启动代码建议使用代码二。新建谷歌浏览器的用户文件夹,只要在任一文件夹下新建空白的“AutomationProfile”文件夹即可)
# 代码一
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors
# 代码二
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors --user-data-dir=D:\\360Downloads\\AutomationProfile
3)在2)中启动谷歌浏览器后,输入智联急聘的网址(/?jl=530&kw=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88&kt=3)后可在世界之窗的*敏*感*词*窗口观察到各类传输的链接,寻找以/c/i/sou?_v= 开头的链接,可在其response中发觉想要爬取的数据。
至此使用mitmproxy监控谷歌浏览器访问智联招聘网站已经完成,接下来使用mitmproxy自定义python脚本将对应数据包的数据下载。
mitmproxy自定义脚本
把浏览器与服务器之间的交互觉得是flow,想要爬取的数据在以/c/i/sou?_v=开头的链接中。在mitmproxy中,链接包括两部份:host和url,其中host是服务器网址(),url是对应的链接(/c/i/sou?_v=)。host+url即组成了完整链接,在这里,只须要使用url即可采集到相应数据。只要找到以/c/i/sou?_v=开头url,通过获取response中的内容,再将其写入到txt文件即可。代码如下:
import mitmproxy.http
from mitmproxy import ctx
url_paths = '/c/i/sou?_v=' #筛选url的判断条件
class Jobinfo:
def response(self, flow: mitmproxy.http.HTTPFlow):
if flow.request.path.startswith(url_paths): #startwith,找到对应的url
text = flow.response.get_text() #获取url的response的内容
file_handle=open('0624.txt',mode='a') #打开txt
file_handle.write(text) #将获取的response内容写入到txt
file_handle.write('\n') #写入 换行符
file_handle.write('\n') #写入 换行符
file_handle.close() # 关闭txt
return
addons = [
Jobinfo()
] #mitmproxy使用自定义python脚本的方法
mitmproxy使用python脚本,只须要在启动mitmweb时,使用-s 后添加对应的py文件即可。(具体可参考拓展阅读)
自动化采集数据
在了解mitmproxy的基本操作之后,这一部分实现数据的自动化复制粘贴。
1)在Ananconda Prompt中启动mitmweb,并指定自定义的python脚本。代码如下,其中-s表示要加载前面代码, 'D:\\360Downloads\\addons0624.py'表示代码地址,addons0624.py内的代码即为自定义python脚本。
mitmweb -s 'D:\\360Downloads\\addons0624.py'
2)在cmd中使用下列代码启动谷歌浏览器
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors --user-data-dir=D:\\360Downloads\\AutomationProfile
3)在谷歌浏览器中输入打算好的“北京市数据分析师”的网址/?jl=530&kw=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88&kt=3。伴随着在浏览器中翻页,对应页面的岗位数据即可写入到定义的txt文件中。
4)在文件夹中找到定义的txt文件即可。
如果不知道txt保存在哪,推荐下载everything搜索即可,非常便捷。
至此,已经实现复制粘贴的自动化。
总结
在智联招聘数据爬取(踩坑篇)给出了一种自动采集数据的方式,在这篇文章,将复制粘贴json数据进行自动化。只须要以特定的方法启动谷歌浏览器,并访问相应的页面即可实现数据的采集,更加便捷。下一篇文章即为智联招聘数据爬虫的最终篇,在最终篇将自动化浏览器的访问过程,实现数据采集的完全自动化。敬请期盼。
本文首发公众号“数据科学家进阶之路”,主要专注数据剖析所需的技能,通过相应的案例熟悉模型算法,通过实际的业务例子熟悉商业逻辑,通过读书积累分享思维方法。期待你们关注。
拓展阅读:
使用mitmproxy+python做拦截代理:
/posts/usage-of-mitmproxy/