3

2022爬虫与反爬虫实战经历

 1 year ago
source link: https://www.2808proxy.com/practical-application-of-crawler/2022-crawler-and-anti-crawler-experience/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

2022爬虫与反爬虫实战经历

自从爬虫诞生以来,爬虫与反爬虫的对抗就在不断发生着。通过以下的实战经验为大家提供一个学习思路。

小张想拿下某个站上全部的电影,于是就写了一个基于HttpClient库的爬虫,它可以爬遍这个站上所有罗列电影的页面,然后依据Html来分析电影名,就可以为小张存入数据库里。

不过呢,他爬的这个站点的运维小李马上察觉到了问题,就是在一个时间段里有看起来很异常的请求量值,经过对日志的分析,就看到了用户IP(1.1.1.1),更奇怪的是他的useragent还是JavaClient1.6。这些已经能够充分证明不是人类在请求了,那就不得不在Nginx服务器上封杀它了。

反爬虫反击

小张发现了自己用爬虫被封杀这件事,想了一下就换一个方法,一个是useragent伪装成百度Baiduspider,还有一个是不停的换ip,每间隔半小时就换一个。

但是即使是这样,也躲不过小李,小李还是发现了他的方法。

也只能下对策,这次他在Nginx设置了频率限制,一分钟内请求大于120次就会被屏蔽IP。又担心影响到百度的爬虫,为市场部每月几十万的投放考虑,就再写了个脚本,这次是通过hostname来检验ip的真实性,以此形成白名单。

反爬虫验证码

小张又察觉到了新的针对,不过由于小张也不急用数据,就拉长了时间线,随机的在1-3秒就爬一次,爬10次再对应休息10秒,而且在固定的8点到12点以及18点到20点爬,甚至几天之间还会休息。

这下小李看到日志觉得很麻烦了,但又觉得还改规则的话太容易误伤人类用户,又想出对策。三个小时之内,请求总量达到50次那就会弹出一个验证码,除非完全精确的输入了,否则就会被拉入黑名单了。

爬虫训练以及优化

小张终于因为这些验证码困惑了,但还有打磨空间。他第一时间选择了学图像识别(关键词PIL,tesseract),然后二值化这些验证码,然后分词,经过模式训练。识别了小李的验证码,爬虫又可以继续工作了。

但是小李也不愿屈服,也不管验证码被攻陷,去和开发商量了改变开发模式,不再直接渲染数据,改为让前端异步获取,而且通过js的加密库来生成动态的token,其间加密库再进行混沌(取决于是不是重要步骤)

但是加密库一旦被混淆就没法再想了嘛?不可能的,只要有耐心,经过调试,总能找到加密原理,这些都不是重点,重点是付出太多精力,小张不打算再用HttpClient的爬虫了,改成使用内置浏览器引擎的爬虫(关键词:PhantomJS,Selenium),最终在浏览器的引擎中js加密脚本得出了正确的结果,也便到手了数据。

虽然本次爬虫与反爬虫的实战对抗结束了,但这不是爬虫与反爬虫的搏斗的结束。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK