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

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

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

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

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


第一种处理请求头

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

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中的第三方库还有一个好处就是:该模块中已经集成了所有的浏览器的请求头,可以直接进行导入,同时还可以随意切换请求头信息。

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.net/115142.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kali-linux中安装Nessus详细教程「建议收藏」

    kali-linux中安装Nessus详细教程「建议收藏」一、下载NessusNessus是工业界使用较为广泛的产品。登录官网,下载对应版本的nessus框架安装包https://www.tenable.com/downloads/nessus?loginAttempted=true(建议直接在kali中利用firefox浏览器下载,否则需要从真实机拖进虚拟机中(需要安装VMtools,安装VMtools过程不再赘述))二、明确自己压缩包的位置比如我的Nessus-8.10.0-debian6_amd64.deb安装包位于/home/go.

    2022年10月19日
    0
  • navicat premiun15激活码【最新永久激活】2022.02.25

    (navicat premiun15激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月1日
    728
  • pycharm2021.11激活码_在线激活

    (pycharm2021.11激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
    46
  • ssl原理及应用_ssl的理解

    ssl原理及应用_ssl的理解今天学习网络通信,看到使用ssl(SecureSocketsLayer)进行加密,由于对ssl只是有些概念上的了解,对于具体应用原理、过程和如何使用不慎了解,于是学习了一番,总结如下:1.为什么要使用ssl?确保数据传输的安全性2.用ssl加密传输的实际过程?建立连接时使用非对称加密,而连接完成后在传输数据时使用对称加密(速度快)3.ssl加密方式?有两种方式:单

    2025年6月13日
    0
  • 很黄很暴力「建议收藏」

    很黄很暴力「建议收藏」 http://hen.huang.hen.bao.li/这网站有点意思,某种程度上起点舆论监督的作用吧既然你诚心诚意地问了,我们就大慈大悲地告诉你,为了防止世界被破坏,为了维护世界的和平,贯彻爱与真实的罪恶,可爱而又迷人的反派网站,很黄!很暴力!我们是穿梭在墙外的敢死队,互联网的明天等着我们,就是这样,喵!

    2022年10月14日
    0
  • 你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法「建议收藏」

    百度那些不为人知的搜索语法,精准搜索,事半功倍;最后放了几个刺激的搜索实战案例。

    2022年4月15日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号