最近不少同学的毕业论文都逼近了 deadline,但有些选了数据分析方作为方向的同学还在发愁,作为前置条件的数据源还没拿到,我该怎么才能把网站上的公开的数据给扒下来呢?
听说可以用 python 来编写爬虫快速获取数据,但是我没有相关的计算机基础,学习曲线会不会比较陡峭,短时间内我可能掌握不了爬虫所需的知识,除了复制粘贴我就没有更快的办法了吗?
也有些能写上一两段代码的同学,却因为要爬取的网站有过多的反扒措施而束手无策,cookies 验证,变幻莫测的请求参数,搞的头都大了,我只是想拿点儿数据下来做学术研究哇!
当然可以拜托身边有这方面技术积累的小伙伴解决问题,不过你难道就不想自己动手收集数据吗?
下面我会以智联招聘为例子,借用免费的抓包工具 Charles 来把数据爬取过程降维到幼儿园水平,让你也能轻而易举的获取到想要的数据。
https://m.zhaopin.com/download?utm_source=ceshi4?key=7<br>https://mp.weixin.qq.com/a/~csGQYhd4w1H8i0ilKkSF7A~~ (二维码自动识别)
假如我现在要做一个互联网岗位薪酬方向的论文,需要获取上述图片中的职位列表,诚然你可以一条一条的复制粘贴到 excel 中去,但稍微做一下时间估算就知道这是一个多么耗费精力的过程,要是能够在我浏览的过程中,它们能自动的进入到 excel 里面该有多好啊!
学会使用抓包工具后再配上简单的转换代码,这将不再成为奢望,但我们需要先分析一下这些数据是怎么一步步显示在页面之上的。
打开 Chrome 浏览器的开发者工具,切入 Network 选项卡,再刷新页面之后,我们可以看到列表中会不断增加新的条目,这一个个条目就是浏览器作为客户端向服务器发起的网络请求,服务提供商在接收到这些请求之后就会返回请求所需的数据。
随便点几个请求,右侧便会出现这些请求的详细信息,不同的请求索要的数据类型不同,大致可分为网页资源(HTML)、脚本资源(JS)、样式资源(CSS)、图片资源,以及数据资源(如 JSON 等)。
总而言之,页面上所展示的任何信息,都是从服务器端获取而来的,我们所关注的职位列表也不例外,那么我们怎么快速在这些众多的请求中定位到我们想要的请求呢?
【Command + F】(Find)调出搜索框,输入列表里任一可视的元素值,如“python高级开发工程师”,就可定位到该字符串在哪些请求中出现过:
可以很清楚的看到,列表中所展示的内容,正是根据上图框中的 sou 请求返回的数据渲染而来的,每一条招聘信息的各个属性也都在返回中有对应,这是一个非常标准的 JSON 格式数据返回。
只需要简单的右键将这个请求的返回拷贝进本地文件中,再加上一小段 python 解析代码,就能瞬间获取一整页的职位数据:
一页有多少数据,工作效率就相当于提高了多少倍,是不是很令人激动呢?
但若想获取几十页或者几百页的数据,上述筛选请求、粘贴返回的操作不免又有些繁琐,要是能自动的存到本地文件里多好呀!
这里就要轮到神器 Charles 出场了,官网下载免费版本之后,开箱即用,启用之后可以在界面上观察到与 Chrome Network 差不多的请求与返回样式:
原理也很简单,在浏览器与服务器之间 Charles 充当代理,请求和返回都要先过一遍 Charles,有些浏览器不支持的操作可以通过 Charles 来操作,如测试工程师会通过这款工具做请求和返回的拦截修改,从而加快测试进程,而我们目前只使用它来进行数据获取。
接下来需要在 Tools -> Mirror 中设置一下镜像映射,当 Charles 拦截到指定路径的请求时,会将返回的数据自动存入到所设置的本地文件夹中:
做出如上配置之后,剩下要做的就是正常浏览网站,搜索要爬取的职位以及手动翻页,进入到文件夹即可看到它们已经整整齐齐的躺在了目标位置:
接着再把上述简易的 python 代码稍作改动,将读取单个文件转化为循环读取整个文件夹下的文件列表,再借助 openpyxl 库将数据输出为 excel 即可完美达成最初的懒人目标:
通过抓包来获取数据的方式,几乎可以应对互联网上绝大部分网站,当然前提是你需要的数据量并不是很大,通篇描述下来,其中还是有很多要涉及到人工操作的环节,如翻页,若一页一页的点下去,还是一件很烦心的事情。
但这只是面向真小白读者的一篇引导文,如果对数据爬取或者 python 编写效率工具有兴趣的同学,烦请关注本公众号,后面会由浅入深的讲解更多相关的技巧。
工具人不加班,和我一起夺回生活的控制权!
http://weixin.qq.com/r/1nXdxXPEGi5lrTem9yDE (二维码自动识别)