1.通过headers中的User-Agent字段来反爬:

反爬原理:User-Agent字段中记录着用户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等,如果爬虫时没有携带此参数则会被判定为爬虫。

解决办法:在header,中添加User-Agent即可,更好的方式是使用User-Agent池来解决,我们可以考虑收集一堆User-Agent的方式,或者是随机生成User-Agent。

2.通过referer字段或者是其他字段来反爬:

反爬原理:Referer字段是记录当前请求是从那个网页发起的。

解决办法:通过添加上响应的referer字段即可

3.通过Cookie来反爬:

反爬原理:Cookie中记录了很多用户特征之类的乱七八糟的东西,服务器通过验证里面的东西进行反爬虫。

解决办法:如果目标网站不需要登录,那么每次请求携带上前一次返回的cookie,使用requests的session可以轻松做到这点。

如果目标网站需要登录,可以使用requests的session进行携带账号密码等参数进行登陆,但更为方便的是直接携带相关账号的Cookies进行登陆最为方便。

4.动态网页天然的反爬虫体质:

反爬原理:我们都知道动态网页中的数据往往不会直接在源代码中,而是后续执行js代码进行请求而得到的,这对于用户来说会感觉交互性更强,浏览网页体验更好,但是对于爬虫而言则是一场灾难。

解决办法:进行抓取和寻找想要的数据包直接进行请求/使用selenium、splash等浏览器渲染框架来进行模拟浏览器进行爬取。

5.Webdriver特征识别:

反爬原理:当我们使用selenium进行爬取的时候,有一些网站会检测webdriver,如果你使用了selenium网站的相关js代码就会返回true,进而网站就会视情况进行屏蔽!

解决办法:通过设置Chromedriver的启动参数即可解决问题

6.基于请求频率或者总请求数量:

反爬原理:爬虫的行为与普通用户有着明显的区别,爬虫的请求频率与请求次数要远高于普通用户,通过请求IP/账号单位时间内总请求数量进行反爬。同一个ip大量请求了对方服务器,有更大的可能性会被识别为爬虫

解决办法:限制访问频率/通过购买高质量的IP的方式能够解决问题/购买多个账号

7.通过同一IP/账号请求之间的时间间隔进行反爬:

反爬原理:正常人操作浏览器浏览网站,请求之间的时间间隔是随机,而爬虫前后两个请求之间时间间隔通常比较固定,同时时间间隔较短,因此可以用来做反爬

解决办法:请求之间进行随机等待,模拟真实用户操作,在添加时间间隔后,为了能够高速获取数据,尽量使用代理池,如果是账号,则将账号请求之间设置随机休眠

8.隐藏链接反爬虫:

反爬原理:网站的设计者有时候为了防范爬虫,会在一些正常用户看不到的地方,但爬虫会爬取到的地方故意添加一些隐藏链接,正常用户一般访问不到,但是只要是爬虫一经访问,服务器就会直接对此爬虫进行拒绝响应!

解决办法:平常在爬取网站,分析网站的时候就需要细心的留意一下有没有一些不正常的网址,避免掉入网站开发者设计的陷阱之中。

9.请求参数Js加密:

反爬原理:网站的设计者通常会对于一些关键的字段进行加密,例如登陆时输入的密码,就会被加密成一段很长的密文(多数网站对每次请求都会返回不同的加密密文),从而限制了爬虫程序直接携带相关账号和密码等参数进行请求登陆。爬虫程序要想进行登陆就需要破解这个加密逻辑,而后携带相关账号和密码(加密过的)等参数进行请求登陆。