爬虫与反爬虫(斗智斗勇)

版权声明:请大家使用时记得显示原创的博主哦!! https://blog.csdn.net/qq_33472765/article/details/81661099

一、爬与反爬

爬虫目的:

1.获取数据。填充公司的数据库,可以用来做数据测试。也可以直接登录

2.通过爬虫爬取大量的数据。用来制作搜索引擎

3.通过爬虫爬取数据,做数据采集和数据分析的工作

4.通过爬虫爬取数据,用于做训练模型,做人工智能机器人训练

反爬虫目的:

1.针对一些初级的爬虫,简单粗暴,不会考虑服务器压力,会导致服务器瘫痪

2.针对失控的爬虫,爬虫的数量比较多,忘记关闭爬虫程序,同样会造成服务器压力过大

3.防止同行爬取公司重要数据,防止同行恶意竞争

二、反爬策略

1、通过User-Agent来控制访问

无论是浏览器还是爬虫程序,在向服务器发起网络请求的时候,都会发过去一个头文件:headers,比如知乎

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,da;q=0.2,la;q=0.2
Cache-Control:max-age=0
Connection:keep-alive
Cookie: **********
Host:http://zhuanlan.zhihu.com
Referer:Ehco - 知乎
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Query String Parameters
view source
view URL encoded

这里面的大多数的字段都是浏览器向服务器”表明身份“用的
对于爬虫程序来说,最需要注意的字段就是:User-Agent
很多网站都会建立 user-agent白名单,只有属于正常范围的user-agent才能够正常访问。

解决方法:

  • 可以自己设置一下user-agent,或者更好的是,可以从一系列的user-agent里随机挑出一个符合标准的使用

    2、验证码

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

    解决方法:

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

  • 利用图像识别技术,识别验证码文本(例如最近比较火的深度学习Tensorflow等)。
  • 往往一些网站不只有pc端,还有手机端网站,很有可能手机端是不包含验证码的。所以不妨试试手机端网站,也许会有意外收获。

  • 可以试试云打码。。。。 3、封ip和封账号

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

解决方法:

  • 最简单的解决办法:限制程序抓取频率,每隔几秒登录一次(如果对抓取数量没有要求,则可以采用这种方法,如果想抓取大量数据,还不得抓取到猴年马月啊)。
  • 既然封账号封IP,那我就用多个账号、多台机器抓取呗,既解决了反爬虫问题,也相当于做了分流处理,降低单台机器带宽压力。
  • 事实证明,有些网站即使我们采用了1)2)方法,还是会被封,这种情况下我们只能去抓取IP代理了,可以写一个专门的爬虫程序用来抓取代理,用这些代理去抓取我们想要的数据。到此为止,基本上封账号、封IP的问题就可以解决了。

    4、cookie限制抓取信息

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

解决办法:

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

5、JS渲染页面

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

解决方法:

  • 一般JS或者XHR都是请求某个链接得到数据,所以需要我们去对应JS、XHR代码里面分析具体请求了哪个链接,然后采用同样的方式,用程序模拟请求。
  • 有一些开源工具包是可以执行js的,例如HtmlUnit,可以试试哦(不过执行起来比较慢,这是缺点)

6、 用户名或者密码进行加密处理

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

解决方法:

  • 一般加密都在某个JS里面,所以只能分析JS,在我们的程序里面进行加密了。
  • 用HtmlUnit等开源工具,直接执行JS,直接就可以登录啦。

7、绑定IP

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

解决方法:

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

8、页面全部转换成图片

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

解决方法:

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

猜你喜欢

转载自blog.csdn.net/qq_33472765/article/details/81661099
今日推荐