反爬虫策略

作者:「已注销」

链接:https://zhuanlan.zhihu.com/p/35955767

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


(一)反爬虫策略分析:

之前其实有搜到过笑虎大大的文章:单机30分钟抓取豆瓣电影7万+数据:论爬虫策略的重要性(附全部数据下载地址),但是发现单ip+随机cookie的方法已经失效了。经过我不断摸索,总结规律如下。

(1)单个ip不带cookie访问多次,ip不一会被封

(2)首次访问返回cookie值,带同一个cookie值连续访问,几分钟被封;带不同cookie值访问,大约十分钟之后,IP还是被封了。

(3)单个ip低速访问(10s以上),不会被封


(二) 爬虫策略分析:

简单来说,有这么几个防止反爬方法:


  1. 带随机User Agent:最简单,新手也都会
  2. 设置爬取间隔时间: 简单,但是大大降低效率
  3. 带可用cookie:可难可容易找规律,会需要带上一些认证或者解密的数值去计算
  4. 使用代理:简单粗暴有效,但是维护代理是个问题


由于单个ip怎么样都会被封,所以我投向了代理的怀抱。爬虫策略大致如下:


三个随机:随机UA,随机代理,随机cookie


网上免费代理一抓一大把,质量低下,不稳定,一开始自己写了个proxypool,来过滤各大网站可能的ip再去爬,好不容易抓到一些能用,过了一会,这些ip又失效,或者又被封。最后遂决定还是得搞个动态的ip池。



  • 对于使用免费代理:

可以参考git上的一个开源项目:jhao104/proxy。用了几个类似的,感觉这个是最好的,它主要用flask做了一个api来实时刷新可用ip,不仅可以抓取各大主流免费代理ip,还能定时检验ip的可用性。但是这个项目还是有一个问题,比如当我设定抓取的间隔为10秒之后,执行任务的时间可能大于10s,会报一个warning引发整个程序暂停。



  • 对于使用付费代理:

我个人不想再用免费低质的ip,遂买了那种包天的套餐,后来又丑陋地膜改了下这个jhao104/proxy的开源项目,只留下主要api+抓取proxy+数据库的功能,每5秒一刷10个ip,爽歪歪~ 用付费代理的朋友可以参考下我的方法~proxy丰富的话,爬取数据时候可以不需要sleep的

修改时间 2021-04-21

真诚赞赏,手留余香
赞赏
随机推荐
Vuex中的信息,刷新页面后,数据没有了的解决方案
Thinkcmf根据导航分类获取导航
DOM、DOM0、DOM1、DOM2和DOM3的关系
Javascript检测字符串是否为汉字
macOS下 文件夹合并方法
babel-preset-env 一个就够了
JS中对象与字符串的互相转换
jQuery.position()不可靠
Windows Server 服务器防止远程桌面暴力破解
Koa.js 路由 koa@router