一些反爬虫手段及解决办法

最近在学习网络爬虫,刚开始还行,但是越深入就会遇到很多困难,比如:我爬取拉勾网的时候,这个网站就禁止我的爬虫,试了好多办法,但就是不行,最终我老老实实的用Selenium爬取拉勾网。(有大神会的可以指点小弟一二)那这篇文章就来说一说反爬虫的手段和它的解决办法。

通过headers字段进行反爬

 headers是HTTP请求和相应的核心,它有关于客户端浏览器,请求界面,服务器等相关的信息。

1.通过user-agent进行反爬

User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计。

解决办法:

 我们可以在浏览器的开发者选项中找到这个参数,并且把这个参数的值放到get请求中的headers字典中即可。


2.通过referer进行反爬

HTTPReferer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。Referrer的正确英语拼法是referrer。由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了。 一般针对图片,视频较多的网站,服务端会检测referrer字段,若检查出你的referrer字段非正常字段,服务端便会发送假的资源给你。

解决办法:

 我们可以模仿上一个users-agent字段,在headers中添加这个字段的值。

3.通过cookie进行反爬

 服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。

解决办法:

 可以在headers中加上cookies字段

可以使用requests中的session

可以利用cookie池

通过ip地址进行反爬

 对于某些网站,在测试的时候请求几次,能获得正确的内容,一旦大规模爬取的话,网站可能会弹出验证码,或者跳转到登陆界面,最严重的直接封锁ip地址。

解决办法;

 使用代理:

像快代理,讯代理这样的一些ip代理网站中有一些免费的代理可以用。

具体的设置方法:

import requests

proxies = {
    
    "http":"http://10.10.1.10:3128"
    }

s = requests.get(URL,proxies = proxies)

通过前端样式进行反爬

比如:你想爬取某一种商品,这类商品在第一页的信息是一种前端样式,而后一页则是另一种前端样式,这两种不同的前端样式造成了反爬。

解决办法:

自己观察每个页面中的前端样式,利用if---else结构来执行不同的爬虫 

总结

反爬的手段很多,技术有限的我就只想起来这么多,上面有错误的地方请批评指正。

有兴趣的可以一起交流啊! 

猜你喜欢

转载自blog.csdn.net/yanzhiguo98/article/details/87883189