
最近几天一直忙着帮助媳妇写五八同城招聘抓取数据的程序,因为媳妇是做外贸工作的,她们公司除了系统公海外的用户外,多数都是需要自己找客户,比较有效的获取客户的途径就是在一些招聘网站中抓取数据,普通人抓取数据的方法一般都是都是使用采集器,首先先采集一边数据,然后在使用采集器中自带的一些去重功能,这样得到的就是最新发布的招聘信息,我认为这些操作比较麻烦,因此从一开始就给媳妇写了自动爬虫程序。
前几天的时候媳妇告诉我说,中华英才网的招聘数据好几天都没有出来了,你帮我看下是不是出什么问题了?
我登录服务器查看了下,发现软件是正常运行的,并没有发什么什么异常,直到我检索链接的时候,发现中华英才网的搜索功能直接302跳转到58同城上面去了,中华英才网和五八同城是一家,之前从中华英才网抓取的招聘信息数据绝大多数都是来自于五八同城。
既然采集中华英才网的网址发生了变动,我这边需要帮助媳妇重新写采集数据程序,说实话直接写58同城的采集程序真的挺难的,难度要比bos直聘难的非常多,难的主要原因就是58同城的放爬虫系统做的太好了。
当爬虫访问58同城的时候,面临的一个难关就是58同城的302重定向,此重定向中包含了随机uid加密访问链接,简单说如果不通过次加密链接访问的话,系统会弹出验证码,验证码各种各样,其中有点击验证,有滑动验证,有点击文字验证,为了避免有大量的验证码,我破解获取到了重定向中包含的内容链接。
但这只是第一步,获取重定向加密链接后,继续访问下一页的时候是可以正常访问的,当你连续访问几十上百页的时候,系统还会出现验证码,这主要的原因是58同城中有一个加密js,这个js是判断你是否是正常用户访问的,js可以判断你是否是通过点击鼠标访问的网站。
当你用鼠标点击下一页的时候,js会生成一个随机加密密匙,该密匙会随着你每次点击下一页的时候都会发生变化,而爬虫爬取到的下一页链接是没有这个密匙的,因此就会触发58同城的验证码。
最好的解决方法就是,在爬虫爬取下一页之前,先访问js加密链接,从js加密算法中中获取到需要的密匙,把密匙放在重定向加密链接的后方,系统就会误认为是正常用户访问的,只是小学毕业的我,没有能力去破解五八同城的js加密算法,当然如果我认真研究,认真学习的话,一定是可以破解掉这个加密js其中的密匙,只是这会花费大量的时间和精力,虽然给媳妇写程序挺重要,但我自己工作写文章推广也同样重要,为此只能想别的方法了
之前抓取58同城的数据都是通过中华英才网抓取到的,中华英才网中并没有什么验证,加密,等防御行为,因此我可以为所欲为的通过中华英才网抓取五八同城的数据,但现在中华英才网已经不能正常搜索了,每次搜索都会跳到五八同城,这确实让我很苦恼。
如果不能破解五八同城中的js加密算法,每访问间隔一段时间就会出现验证码,出现验证码的时候,程序是没有办法直接解决掉的,解决验证码的难度和破解js加密密匙的难度差不多。
我无意中又下载了中华英才网的APP,发现该APP是正常运行的,支持搜索公司和职位信息,于是我就使用抓包工具对中华英才网APP进行了数据抓取,发现中华英才网的APP并没有加密,许多公司职位数据用肉眼就能直接看到,并且还是调用的五八同城的api。
花了一个小时左右的时间终于写完了抓取五八同城的程序,我最喜欢和最开心的事情就是,能够写好一个可以运行的程序,这远比我写文章更加有价值有意义。
在写程序的时候,需要脑子有丰富的想象力,并且在写程序的过程中会遇到各种各样从来没遇到过的问题,当自己把这些问题一个个的解决之后,内心会充满非非常强的成就感。
发表评论