python爬虫总是爬不到数据,你需要解决反爬虫了

2022-07-08 13:13:39 浏览数 (1)

爬虫最讨厌的就是反爬虫,但是如果没有反爬虫的存在的,那么大家都可以随随便便就进行网络爬虫,那么服务器又怎么支撑得起来呢?那么又怎么彰显我们的能力呢?

所以说反爬虫是一个门槛,跨过这一个门槛就可以轻松掌握爬虫的技术了,跨不过那么你就一直都在起点而已。

目前常见的反爬虫无非也就是那几种(检查爬虫的请求头、检查发起请求的频率、添加验证码……)


第一种处理请求头

对于请求头进行处理就是一个非常简单的事情了,可以直接使用浏览器的请求头;

代码语言:javascript复制
headers = {"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
# 直接从浏览器获取一个请求头放置在程序中调用即可

也可以使用python中的第三方库fake-useragent 进行设置,使用python中的第三方库还有一个好处就是:该模块中已经集成了所有的浏览器的请求头,可以直接进行导入,同时还可以随意切换请求头信息。

代码语言:javascript复制
from fake_useragent import UserAgent

ua = UserAgent()        # 获取所有整合之后的浏览器请求头信息

headers = {'User-Agent':ua.random}       # 随机获取一个请求头

第二种请求频率的处理

对于服务器对IP地址进行请求次数的限制,当同一个IP在一定的时间内请求的次数过快的时候,就会采取一定的措施进行限制,甚至于会封了该IP地址。

对于这种情况呢?最简单直接的就是添加延时函数,使得请求的频率下降,但同时也会减低了爬虫的效率,这就不是我们想要的效果了。

另外一个办法就是更换代理IP地址,使用代理IP地址,每发起一定次数的请求之后就更换一个IP地址,这样子就是一个非常完美的爬虫了。对于如何更换代理IP以及建立一个属于自己的代理IP池,在我的上几个文章已经有了详细的介绍了,这里就不加以讲解了。 介绍几个免费高匿代理网站:(西祠代理、快代理、云代理……)


第三种验证码的处理

对于验证码如今网络上存在着多种不同的形式的验证码,首先介绍几种简单的验证码形式吧。 字符验证码:在图片上随机产生数字、英文字母或者汉字,一般是4位或者6位的验证码字符。

图形验证码:这类验证码大多是计算机随机产生一个字符串,在把字符串增加噪点、干扰线、变形、重叠、不同颜色、扭曲组成一张图片来增加识别难度。

(上面两类验证码的解决方法:使用orc模块进行二值化图片,提取图片验证码)

如今网络上添加到图片中噪点技术已经相当的成熟,一般使用简单的orc模块进行处理,已经难以识别出验证码内容了。一般都需要结合到机器学习,使用训练好的模型进行识别图片,获取图片验证码内容;或者把图片上传到一些打码平台,使用打码平台的返回结果进行操作。

滑动验证码:也叫行为验证码,比较流行的一种验证码,通过用户的操作行为来完成验证,其中最出名的就是极验。

(解决方案:通过开发者工具,获取原图片以及需要滑动的图片,使用程序对比两张图片的RGB,得出需要活动的距离,之后使用自动化工具(selenium)进行滑动登录,注意滑动的使用需要添加一定的延时或者加速度,使得滑动过程没有那么的平滑,模拟人的行为)

滑动验证码的原理就是使用机器学习中的深度学习技术,根据一些特征来区分是否为正常用户。通过记录用户的滑动速度,还有每一小段时间的瞬时速度,用户鼠标点击情况,以及滑动后的匹配程度来识别。而且,不是说滑动到正确位置就是验证通过,而是根据特征识别来区分是否为真用户,滑到正确位置只是一个必要条件。

点触验证码:点击类验证码都是给出一张包含文字的图片,通过文字提醒用户点击图中相同字的位置进行验证。(解决方案:获取验证码图片,以及需要点击的验证字的顺序,之后对图片进行识别,获取每个验证字的内容,之后组成正确的顺序,获取每个验证字的位置,使用自动化工具进行点击对应的位置)

这种相对于上面的几种验证码而言才是最难解决的。

第四种JavaScript前端渲染数据,对网页进行渲染

1、尝试在开发者工具中查找数据的来源,找到数据的接口,使用数据接口进行调用,获取数据,简单直接;如果使用开发者工具无法抓到数据包,可以使用第三方的抓包软件进行抓包(fiddler等等)。 2、对于一些复杂的网页,在找不到数据接口的情况下,可以使用selenium模块,使用内置浏览器模拟网页正常打开,获取源代码数据,但是效率不高。 3.对于一些大型的网站,在PC端的网页版难以寻找到突破口的时候,可以尝试使用网页版的手机端网站,进行获取数据(前提:存在手机端的网页版)。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115142.html原文链接:https://javaforall.cn

0 人点赞