反爬虫策略总结

首先给大家推荐一下我老师大神的人工智能教学网站。教学不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵黄段子!点这里可以跳转到网站

今日终于有点时间了,总结一下网络爬虫领域比较常见的反爬虫策略,希望在我们抓取数据过程中遇到问题时,提供解决方法。话不多说,开讲:

1、最为经典的反爬虫策略当属“验证码”了。因为验证码是图片,用户登录时只需输入一次便可登录成功,而我们程序抓取数据过程中,需要不断的登录,比如我们需要抓取1000个用户的个人信息,则需要填1000次验证码,而手动输入验证码是不现实的,所以验证码的出现曾经难倒了很多网络爬虫工程师。

     解决方法:

          1)分析网站验证码机制,从网站后台或者前端获取验证码(文本形式),该方法只适用于少量网站,因为一般验证码我们很难拿到。

          2)利用图像识别技术,识别验证码文本(例如最近比较火的深度学习Tensorflow等)。

          3)往往一些网站不只有pc端,还有手机端网站,很有可能手机端是不包含验证码的。所以不妨试试手机端网站,也许会有意外收获。

2、 另外一种比较恶心的反爬虫策略当属封ip和封账号了。本人初期曾经用一台机器抓取新浪微博,导致短时间内账号被封,IP被封,所以遇到类似问题一定要多加小心。

       解决方法:

          1)最简单的解决办法:限制程序抓取频率,每隔几秒登录一次(如果对抓取数量没有要求,则可以采用这种方法,如果想抓取大量数据,还不得抓取到猴年马月啊)。

          2)既然封账号封IP,那我就用多个账号、多台机器抓取呗,既解决了反爬虫问题,也相当于做了分流处理,降低单台机器带宽压力。

          3)事实证明,有些网站即使我们采用了1)2)方法,还是会被封,这种情况下我们只能去抓取IP代理了,可以写一个专门的爬虫程序用来抓取代理,用这些代理去抓取我们想要的数据。到此为止,基本上封账号、封IP的问题就可以解决了。

3、还有一种比较普通的反爬虫策略:通过cookie限制抓取信息,比如我们模拟登陆之后,想拿到登陆之后某页面信息,千万不要以为模拟登陆之后就所有页面都可以抓了,有时候还需要请求一些中间页面拿到特定cookie,然后才可以抓到我们需要的页面。

    解决方法:

        1)通过浏览器的F12查看器,观察具体整个过程都请求了哪些URL(主要包括HTML、JS、XHR),挨个试吧,试到成功为止。

4、另外一种比较常见的反爬虫模式当属采用JS渲染页面了。什么意思呢,就是返回的页面并不是直接请求得到,而是有一部分由JS操作DOM得到,所以那部分数据我们也拿不到咯。

    解决方法:

         1)一般JS或者XHR都是请求某个链接得到数据,所以需要我们去对应JS、XHR代码里面分析具体请求了哪个链接,然后采用同样的方式,用程序模拟请求。

        2)有一些开源工具包是可以执行js的,例如HtmlUnit,可以试试哦(不过执行起来比较慢,这是缺点)

5、还有一种反爬虫,实在登录部分做了手脚,对用户名或者密码进行加密处理。而我们模拟登陆的时候如果用原始用户名密码的话,肯定登录失败的。

      解决方法:

         1)一般加密都在某个JS里面,所以只能分析JS,在我们的程序里面进行加密了。

         2)用HtmlUnit等开源工具,直接执行JS,直接就可以登录啦。

6、最近刚发现的一种反爬虫技术:绑定IP。啥意思呢,意思就是整套请求流程必须以一个IP去访问,如果换IP了,对不起,登录失败。

       解决办法:

         1)没啥解决办法,只能用一个IP登录。。

7、最恶心最恶心的反爬虫,把页面全部转换成图片,你抓取到的内容全部隐藏在图片里。想提取内容,休想。

         解决办法:

        1)唯一解决的办法:图像识别吧,但是感觉代价很大。。。

先写到这里吧,持续更新ing。

点这里可以跳转到人工智能网站

发表评论