前言
头条很多朋友想学技术,但是又不知道如何入手。很多人更加不知道自己的能力是否能满足就业的要求,能拿多少工资。如果身边没有特别懂行情的朋友,第一选择应该就是:招聘网站。今天就先选择了爬取互联网招聘的一个网站:拉勾网(其实很想说基本也是用户量最多的,什么智联,前程无忧都是什么鬼)。
目标网站的反爬机制的了解
进入网站,打开开发者工具(按F12),在搜索框内输入:python爬虫,翻翻页就可以看到内容是通过ajax异步加载的。传出的参数对比如下:
对比两张图差别就在于Form的内容,由此合理的构造Form的内容,就能拿到页面内容。
这里多说一点经验:大部分网站实现动态网站的话都是通过ajax,我们只要查找XHR的内容即可找到页面更新的内容(当然也有些网站不是通过这个方式,比如:淘宝。)。接口返回的内容如下:
页面内容和接口返回的数据一致,即页面是通过这个接口返回数据实现渲染。
调试
知道接口内容后,我们就进入调试状态了,构建合理的form实现请求,看看是否能拿到数据。正常情况下我们没必要做各种cookies的保持,或者添加太多请求头,一般使用各种抓包软件重新构建一些请求,看能否能通过校验。能通过,则基本不会有太大的问题(当然很多很给力的网站可能在你跑了一段时间后把你BAN了,但正常情况下是这个操作)。
通过第一次请求的图可以看出,我们只构建了一个表单,请求接口的URL,并未添加请求头(其实requests库默认是:requests),未拿到数据,拉钩接口并返回了我的IP(没错,我在广州)。
第二次请求我只添加了UA字段,也未通过校验,还是返回错误。
第三次请求在第二次添加的Referer字段,有点技术背景的都知道这应该叫做防盗链。值得一次的是Referer字段和host字段在反爬里面应用得比较多,很多时候可以试试看是不是这两个没添加。根据截图可以看到请求到了数据(window一点都不好用,感觉好麻烦,各种打错字)。
#第三次请求头 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36', 'Referer': 'https://www.lagou.com/jobs/list_python%E7%88%AC%E8%99%AB?labelWords=sug&fromSearch=true&suginput=python' }
到这个程度,基本反爬就通过了(总共花费了我几分钟吧,如果这就是我的工作难度,我做梦都能笑醒)。
实现
由于前面介绍了scrapy,我这里就用scrapy实现了一个。看图:
可以看到能爬取到数据,接下来就是对内容做提取。
最后效果为:
总结
整个爬虫的内容还有两个核心点没做好
- 自动翻页功能。其实一个for循环就好了,太晚了就不写了(写爬虫其实6分钟搞完了,码字整理思路搞了一个多小时)。可以了解下拉钩接口表单的字段的意义,通过这个接口能拿到的数据其实比较多。
- json内容的提取。我这里只提取了 companyShortName 这个字段,其他的数据都放在data中。在CSV文件中,也只能看到两个字段,需要的话可以把更多的字段提取出来
值得一提的是Scrapy 具有自动存为JSON,CSV,txt等文档的功能,具体实现可以在上图的run.py找到使用方法。
最简单的拉钩爬虫就完成了,但是后续的岗位内容爬虫,请听下回分解。
最后如果对内容有疑惑的话可以私信我,或者在文章下面留言。