常见反爬错略

时间:2021-07-07 20:15:09

做爬虫两年了,在研究生期间主要做的是慢爬性爬虫,毕业后第一份工作职位也是爬虫职位,工作中的爬虫是授权的实时抓取,今天主要对工作期间遇到的一些反爬策略进行阐述。在授权的实时抓取过程中,首要难点是模拟登录部分,其次是抓取部分。记忆中有:

1,在某个请求前需要访问一个链接,并把访问该链接的次数作为提交参数值,还有类似的:有的请求前必须在某个请求后才可正常,其实这些通过抓包都能看见。

2,header参数的content-type参数比较重要,好多网站提交数据返回异常都是由这个header中content-type参数未设置所致。

3,header参数的refer参数比较重要,等级与content-type一样,他们算是header中最为重要的两个参数了,服务端经常会对客户端提交的数据该部分做检查。

4,header中提交参数是否完整:遇到几个网站在header参数提交不全时导致返回的数据只是正确数据部分,缺少部分信息。

5,这类爬虫模拟登录部分加密部分不是简单的base64 ,md5,而是像rsa这种加密,你没有高深的前端技能是看不懂的,现在这类网站模拟登录部分用的不少,使开发人员在模拟登录部分花费时间过长,甚至有时必须要找前端高手问问才能知道具体加密方式,在这种方式下,建议在模拟登录时使用那些开源无头浏览器phantom js,selenium,登录成功后把cookie拿过来继续进行抓取。

6,含有控件的登录部分:有一些网站虽然登录时需要安装控件,但在登录时没有起加密和其他作用,我想这是本网站开发人员的失职,这样可以直接绕过控件部分进行正常登录抓取等操作,但是一般来说这样网站还是很少的,我认为这种反爬是做的最好的,对于这种反爬有2种解决方案:

(a) 对控件进行反编译,找出加密算法。

(b)用该网站支持的操作系统和有头浏览器进行模拟登录才有效。

第一种方法如果有几百个网站等你抓取,进行反编译肯定是不可取的,原因很简单:反编译时间花费长,如果只是一个网站还是可取的。第二种方法虽然能够支持各种抓取,而且一旦搭建好抓取框架,后期抓取工作也会非常容易,但缺点是在抓取数据时太慢,在用户量大的时候需要不断的增加机器。如果机器少就会给予用户响应不及时。所以,在实际工作中建议结合场景和自己长处选择合适方法。

  

另外,提一下在抓取开发过程中几点小小建议

1.各种东西能绕就绕,例如验证码有的就能绕过去,有的网站甚至密码都能绕过去,这是我们最希望看到的。

2,在像服务端提交请求时,提交参数尽可能保证最小化,这样在出问题时容易排查,不然在排查错误时,一看当时提交了那么多参数,不知道哪些是关键参数,排除错误不容易。