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

2023-11-07

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

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

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


第一种处理请求头

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

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端的网页版难以寻找到突破口的时候,可以尝试使用网页版的手机端网站,进行获取数据(前提:存在手机端的网页版)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫总是爬不到数据,你需要解决反爬虫了 的相关文章

随机推荐

  • selenium 隐式等待如何使用_selenium 中使用等待的三种方法

    现在很多的 web 网站使用 AJAX 技术 当页面加载到浏览器 这个页面的很多元素显示出来的可能不一致 如果一个元素还未加载出来 在定位的时候 就会抛出异常 ElementNotVisibleException 这个时候就要使用等待方法解
  • 【转】latex常见错误对照表

    原文链接 http www cs utexas edu witchel errorclasses html Latex Error Classes Ambiguous Errors This is a list of error class
  • 【低功耗蓝牙】① 蓝牙广播数据格式分析

    摘要 本文章主要讲解了蓝牙的发展史 蓝牙信号 蓝牙广播数据的格式 最后使用ESP32芯片MicroPython固件给出了蓝牙广播的具体代码 是蓝牙初学者很好的参考资料 也可以参考下我在B站的蓝牙视频教程 ESP32教程 第二章 低功耗蓝牙B
  • 创建多个线程、数据共享问题分析与案例代码

    创建多个线程 数据共享问题分析与案例代码 创建和等待多个线程 在实际的工作中 可能要创建的线程不止一个 也许有多个 所以 这里展示一下创建多个线程的一种写法 大家可以举一反三 在lesson4 cpp的上面位置 书写线程入口函数 mypri
  • Python框架区别是什么?比较常用的框架有哪些?

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 版权归原作者所有 如有问题请及时联系我们以作处理 众所周知 Python开发框架大大减少了开发者不必要的重复劳动 提高了项目开发效率的同时 还使得创建的程序更加稳定
  • webpack原理

    1 webpack核心概念 entry 一个可执行模块或库的入口文件 chunk 多个文件组成的一个代码块 例如把一个可执行模块和它所有依赖的模块组合和一个 chunk 这体现了webpack的打包机制 loader 文件转换器 例如把es
  • 海康网络摄像机与电脑交互,有网络和无网络两种方式读取URL视频流,以及无网络情况下配置IP地址

    目录 1 准备工具 2 通过WiFi的接口连接 3 无网络情况下进行交互 4 海康官方软件 5 RTSP视频流 a RTSP b 视频流 c rtsp流地址 1 准备工具 电脑 台式或笔记本 网线 普通网线即可 POE海康网络摄像机 不需要
  • Nerf如何制作自己的llff数据集

    Nerf三维重建使用Pycharm运行自己的数据集 20230427更新 Nerf代码讲解 从零简单复现论文代码 Nerf环境配置教程 你好 这里是 出门吃三碗饭 本人 本文章接下来将介绍自己制作Nerf数据集 让你自己动手渲染第一个三维模
  • PyCharm 代码调试教程

    目录 一 图文教程 二 调试相关的快捷键 调试的过程分为三步 第一步 在你想要调试的地方 打上断点 第二步 使用调试模式来运行这个 python 程序 第三步 使用各种手段开始代码调试 一 图文教程 1 首先第一步和第二步 我用下面这张图表
  • Spring Cloud Config 实现配置中心,看这一篇就够了

    Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心 虽然后来又发布了 Consul 可以代替配置中心功能 但是 Config 依然适用于 Spring Cloud 项目 通过简单的配置即可实现功能 配
  • ArcGIS:如何添加字段、属性表的连接、字段的计算?

    目录 01 加载原始数据 02 加载的数据分析与处理 2 1 查看tracts要素的属性表 2 2 为tracts要素的属性表添加 人口密度 字段 03 与tract pop属性表进行连接 3 1 为什么要连接 3 2 连接有什么需要注意的
  • vue 导出 导入

    vue 导出 方法一 1 util自带工具包 Export2Excel js 2 引用 import export json to excel from utils Export2Excel 3 导出方法 formatJson filter
  • 基于lua-nginx-module(openresty)的WEB应用防火墙

    独乐乐 不如众乐乐 分享给大家一篇WEB应用防火墙的文章 基于Lua Nginx实现 以下是ngx lua waf的作者全文输出 Github地址 https github com loveshell ngx lua waf ngx lua
  • MySQL 5.7 root登录问题

    For Mac 安装完成后 当使用 mysql u root p 登录时 出现下面错误 ERROR 1045 28000 Access denied for user root localhost using password NO 可通过
  • 正则替换下划线为字母大写

    本人需要手工将数据库中的字段批量转换为java对象的字段 比如 将TRADE DATE 转换为 tradeDate 最终的结果为 1 xxx xml 格式如下 result property tradeDate column TRADE D
  • calendar 字符串日期转时间戳

    public class TestDate public static void main String args SimpleDateFormat dateFormat new SimpleDateFormat yyyy MM dd 指定
  • github上传本地项目代码

    github上传本地项目代码 小白教程 github上申请一个账号 https github com 下载一个git工具 https gitforwindows org 进入github首页 点击新项目new repository 如下图所
  • Java中Comparable和Comparator区别小结

    阅读目录 一 Comparable简介 二 Comparator简介 三 Comparable和Comparator区别比较 回到顶部 一 Comparable简介 Comparable是排序接口 若一个类实现了Comparable接口 就
  • Codeforces Round 883 (Div. 3)

    A Rudolph and Cut the Rope 只需要按照钉子距离的高度a i 和绳子的长度b i 的差值进行排序即可 代码 int n pii a N bool cmp pii a pii b return a x a y
  • python爬虫总是爬不到数据,你需要解决反爬虫了

    爬虫最讨厌的就是反爬虫 但是如果没有反爬虫的存在的 那么大家都可以随随便便就进行网络爬虫 那么服务器又怎么支撑得起来呢 那么又怎么彰显我们的能力呢 所以说反爬虫是一个门槛 跨过这一个门槛就可以轻松掌握爬虫的技术了 跨不过那么你就一直都在起点