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:异常处理示例

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

python 复制代码
import requests

def fetch_url(url):
    try:
        response = requests.get(url)
        response.raise_for_status()  # 如果403或404都会引发异常
        return response.text
    except 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 None

url = 'http://example.com'
data = fetch_url(url)
if data:
    print(data)

章节4:反爬虫机制概述

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

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

章节5:处理反爬虫机制

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

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

伪装成浏览器发送请求:

python 复制代码
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限制:

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

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

python 复制代码
import time

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

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

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

python 复制代码
import requests
import time

def 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.text
    except 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 请求频率控制

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

  • 随机延迟:使用随机数生成请求间隔。
python 复制代码
import random

for i in range(5):
    delay = random.uniform(1, 5)  # 随机1到5秒之间
    time.sleep(delay)
    data = fetch_url(url)

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

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

章节9:总结

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

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



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

相关推荐
天若有情6732 小时前
程序员原创|借鉴JS事件冒泡,根治电脑文件混乱的“冒泡整理法”
开发语言·javascript·windows·ecmascript·电脑·办公·日常
一切皆是因缘际会2 小时前
从概率拟合到内生心智:2026 下一代 AI 架构演进与落地实践
人工智能·深度学习·算法·架构
科研前沿2 小时前
镜像视界 CameraGraph™+多智能体:构建自感知自决策的全域空间认知网络技术方案
大数据·运维·人工智能·数码相机·计算机视觉
爱学习的张大2 小时前
具身智能论文问答(2):Diffusion Policy
人工智能
AI科技星2 小时前
全域数学·72分册·射影原本 无穷维射影几何卷细化子目录【乖乖数学】
人工智能·线性代数·算法·机器学习·数学建模·数据挖掘·量子计算
Chef_Chen2 小时前
论文解读:MemOS首次把记忆变成大模型的一等公民资源,Scaling Law迎来第三条曲线
人工智能·agent·memory
风落无尘2 小时前
《智能重生:从垃圾堆到AI工程师》——第四章 变化的艺术
人工智能·线性代数·算法
七颗糖很甜2 小时前
电离层对地基雷达测量精度的影响分析与校正方法
python
发哥来了2 小时前
AI视频生成模型选型指南:五大核心维度对比评测
大数据·人工智能·机器学习·ai·aigc
特种加菲猫3 小时前
继承,一场跨越时空的对话
开发语言·c++