15分钟学 Python 第38天 :Python 爬虫入门(四)

Day38 : Python爬虫异常处理与反爬虫机制

章节1:异常处理的重要性

在爬虫开发过程中,网络请求和数据解析常常会遭遇各种异常。正确的异常处理可以提高程序的稳定性,避免崩溃,并帮助开发者快速定位问题。

章节2:常见的异常类型

在爬虫开发中,主要有以下几种异常:

异常类型描述
requests.exceptions.RequestException基类异常,用于处理所有请求异常
requests.exceptions.HTTPError表示HTTP错误,例如404或500错误
requests.exceptions.ConnectionError表示网络连接错误
requests.exceptions.Timeout请求超时错误
requests.exceptions.TooManyRedirects请求重定向过多

章节3:异常处理示例

下面的代码展示了如何在发送请求时进行异常处理:

import requestsdef fetch_url(url):try:response = requests.get(url)response.raise_for_status()  # 如果403或404都会引发异常return response.textexcept requests.exceptions.HTTPError as http_err:print(f"HTTP错误: {http_err}")except requests.exceptions.ConnectionError:print("连接错误,请检查网络连接。")except requests.exceptions.Timeout:print("请求超时,请重试。")except requests.exceptions.RequestException as e:print(f"请求时发生错误: {e}")return Noneurl = 'http://example.com'
data = fetch_url(url)
if data:print(data)

章节4:反爬虫机制概述

反爬虫机制是网站采用的一系列技术手段,用以阻止或限制爬虫的访问。常见的反爬虫策略包括:

反爬虫机制描述
用户代理检查检查请求的User-Agent是否正常
IP限制限制特定IP地址的请求频率
验证码在请求中插入验证码以确认用户身份
Cookie验证使用Cookies验证用户身份
动态内容加载使用JavaScript动态加载部分内容,爬虫无法直接获取

章节5:处理反爬虫机制

为了应对反爬虫机制,爬虫开发者可以采取一些策略:

5.1 设置用户代理(User-Agent)

伪装成浏览器发送请求:

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=headers)
5.2 使用代理

通过代理服务器绕过IP限制:

proxies = {'http': 'http://your_proxy:port','https': 'http://your_proxy:port',
}
response = requests.get(url, proxies=proxies)
5.3 添加延迟

限制请求频率,以避免被封:

import timefor i in range(5):response = requests.get(url)print(response.status_code)time.sleep(2)  # 每次请求间隔2秒

章节6:完整示例 - 反爬虫处理

以下是一个示例程序,展示了如何应对反爬虫机制和进行异常处理。

import requests
import timedef fetch_url(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}proxies = {'http': 'http://your_proxy:port','https': 'http://your_proxy:port',}try:response = requests.get(url, headers=headers, proxies=proxies)response.raise_for_status()return response.textexcept requests.exceptions.HTTPError as http_err:print(f"HTTP错误: {http_err}")except requests.exceptions.ConnectionError:print("连接错误,请检查网络连接。")except requests.exceptions.Timeout:print("请求超时,请重试。")except requests.exceptions.RequestException as e:print(f"请求时发生错误: {e}")url = 'http://example.com'
for i in range(5):data = fetch_url(url)if data:print(f"请求成功: {len(data)} 字节")time.sleep(2)  # 每次请求间隔2秒

章节7:流量控制与限频策略

7.1 请求频率控制

为了避免触发反爬虫机制,可以设置请求频率:

  • 随机延迟:使用随机数生成请求间隔。
import randomfor i in range(5):delay = random.uniform(1, 5)  # 随机1到5秒之间time.sleep(delay)data = fetch_url(url)

章节8:异常和反爬虫的调试工具

工具描述
Fiddler网络调试代理,查看HTTP请求和响应头信息
PostmanAPI开发工具,测试HTTP请求
Selenium处理动态网页抓取,可以完整自动化浏览器行为

章节9:总结

在本节中,我们详细探讨了Python爬虫中的异常处理与反爬虫机制。学习如何有效处理各种异常,并采取合理的反爬虫策略,以增强爬虫程序的稳定性和抗压能力。

通过掌握这些技能,您将更加自信地编写高效、稳健的爬虫,抓取互联网中的各种数据,帮助实现数据分析和应用开发。


在这里插入图片描述
怎么样今天的内容还满意吗?再次感谢观众老爷的观看。
最后,祝您早日实现财务自由,还请给个赞,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440906.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杠铃检测系统源码分享

杠铃检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision 研究…

Python | 由高程计算坡度和坡向

写在前面 之前参加一个比赛,提供了中国的高程数据,可以基于该数据进一步计算坡度和坡向进行相关分析。 对于坡度和坡向,这里分享一个找到的库,可以方便快捷的计算。这个库为:RichDEM,官网地址如下 https…

Windows系统编程(四)远程线程

本章内容讲解远程线程 远程线程 我们之前所学过的CreateThread()是创建一个本地线程,其本质是启动一个进程然后执行一个函数。而我们学习网络安全经常会与shellcode打交道,其本质上是以特殊的编程手法所编写的一段普通的代码。这段代码可以在任意环境下…

pWnOS2.0 靶机渗透( cms 渗透,php+mysql 网站渗透,密码碰撞)

pWnOS2.0 靶机渗透( ) 靶机介绍 vulnhub 靶机 本地搭建 由于靶机特性,靶机网卡位nat模式扫不到,原来需要改 nat 的地址 参考方法 https://blog.csdn.net/Bossfrank/article/details/131415257 作者主页 https://blog.csdn.net/Bossfrank?typeblog P…

Hallo部署指南

一、介绍 Hallo是由复旦大学、百度公司、苏黎世联邦理工学院和南京大学的研究人员共同提出的一个AI对口型肖像图像动画技术,可基于语音音频输入来驱动生成逼真且动态的肖像图像视频。 该框架采用了基于扩散的生成模型和分层音频驱动视觉合成模块,提高了…

【Unity学习笔记】解决疑似升级Win11或使用Unity6导致Unity旧版本无法打开的问题

【Unity学习笔记】解决疑似升级Win11或使用Unity6导致Unity旧版本无法打开的问题 一句话省流: 确保项目地址没有任何中文,重新申请个许可证,然后该咋就咋,完事。 ——————————————————————————————…

Oracle登录报错-ORA-01017: invalid username/password;logon denied

接上文:Oracle创建用户报错-ORA-65096: invalid common user or role name 我以为 按照上文在PDB里创建了用户,我以为就可以用PLSQL远程连接了,远程服务器上也安装了对应版本的Oracle客户端,但是我想多了,客户只是新建…

Nginx06-静态资源部署

零、文章目录 Nginx06-静态资源部署 1、静态资源概述 静态资源:是在Web开发中不经常改变的文件,比如图片、CSS样式表、JavaScript脚本文件等。这些资源通常是预先编译好的,不需要服务器端的动态处理。动态资源:是在Web开发中需…

【自动驾驶】《Planning-oriented Autonomous Driving》UniAD论文阅读笔记

1.参考 论文:https://arxiv.org/pdf/2212.10156 代码:https://github.com/OpenDriveLab/UniAD 2.摘要 原来的自动驾驶任务都是分为模块化的,感知,预测,规划等。每个独立的任务可能都优化得很好,但可能会…

深度学习基础—Anchor Boxes与YOLO 算法

前言:在之前的博客中,我依次总结了目标检测算法、算法的卷积改进、Bounding Box预测算法、交并比与非极大值抑制等内容,这些是YOLO 算法的重要细节,现在还差一柄利剑,我们就可以构建YOLO算法了,现在让我们先…

OJ在线评测系统 微服务高级 网关跨域权限校验 集中解决跨域问题 拓展 JWT校验和实现接口限流降级

微服务网关跨域权限校验 集中的去解决一下跨域 这段代码是用来配置跨源资源共享(CORS)过滤器的。它创建了一个 CorsConfiguration 实例,允许所有方法和头部,并支持凭证(如 Cookies)。setAllowedOriginPat…

【论文笔记】DKTNet: Dual-Key Transformer Network for small object detection

【引用格式】:Xu S, Gu J, Hua Y, et al. Dktnet: dual-key transformer network for small object detection[J]. Neurocomputing, 2023, 525: 29-41. 【网址】:https://cczuyiliu.github.io/pdf/DKTNet%20Dual-Key%20Transformer%20Network%20for%20s…

本田汽车投资SiLC Technologies:携手共促自动驾驶技术新飞跃

SiLC Technologies获本田汽车投资:加速自动驾驶技术革新 近日,硅谷光子学初创公司SiLC Technologies宣布获得本田汽车的投资,这一合作标志着双方将共同推进自动驾驶技术领域的革新与发展。本田此次投资不仅体现了对SiLC Technologies技术实力的认可,也彰显了本田在自动驾驶…

MATLAB工具库:数据统计分析工具MvCAT、MhAST等

MATLAB工具库:数据统计分析工具MvCAT、MhAST等 工具1:Multivariate Copula Analysis Toolbox (MvCAT)MATLAB中运行 工具2:Multi-hazard Scenario Analysis Toolbox (MhAST) 参考 The University of California-软件库-Software 工具1&#xf…

【源码+文档】基于SpringBoot+Vue校园智慧迎新服务平台

🚩如何选题? 如何选题、让题目的难度在可控范围,以及如何在选题过程以及整个毕设过程中如何与老师沟通,这些问题是需要大家在选题前需要考虑的,具体的方法我会在文末详细为你解答。 🚭如何快速熟悉一个项目…

饮料瓶识别系统源码分享

饮料瓶识别系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision 研…

QSerialPort 串口通信示例

之前使用过MFC写过串口通信的示例,今年学了Qt,特意使用Qt写了串口通信的示例,发现比MFC要容易一些, MFC串口示例如下: Qt示例如下: Qt这个做的很简单,主要还是想验证一下api, 核心…

设计模式的学习

OO:Object-Oriented 面向对象 --- 《Head First设计模式》 这本书是用java写的,我是写C的,用C来写相关的代码 --- p2(第二页) #ifndef DUCK_H #define DUCK_H/*** brief The Duck class 鸭子类*/ class Duck { public:D…

如何让客户主动成为你的品牌大使

在销售领域,转介绍被公认为一把无坚不摧的利器,它不仅铸就了高成交率的辉煌,更以惊人的速度缩短了成交周期。一位精通转介绍艺术的销售员,其业绩自然熠熠生辉,工作之路亦显得游刃有余。 然而,面对这一宝藏…

Windows安装Linux子系统报错:WslRegisterDistribution failed with error: 0x8007019e

WslRegisterDistribution failed with error: 0x8007019e 报错截图如下图: 该处是由于没有安装Linux内核,因此需要安装。可前往官网查看详情:https://aka.ms/wslinstall 需要解决该问题,可参照官网方法(我没试过官网…