前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫总是爬不到数据,你需要解决反爬虫了

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

作者头像
全栈程序员站长
发布2022-07-08 13:13:39
1.4K0
发布2022-07-08 13:13:39
举报
文章被收录于专栏:全栈程序员必看

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

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

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


第一种处理请求头

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

代码语言: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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年11月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档