当前位置: 首页 > article >正文

如何设置爬虫的异常处理?(代码示例)

在编写爬虫程序时,异常处理是一个不可或缺的部分。它不仅可以保护爬虫免受中断和封禁,还能在遇到问题时提供更多的调试信息。本文将介绍几种常见的异常处理策略,并提供相应的Python代码示例。

1. 网络请求异常处理

在爬虫过程中,网络请求可能会遇到各种问题,如超时、连接错误等。以下是如何处理这些网络请求异常的代码示例:

import requests
from requests.exceptions import Timeout, HTTPError, RequestException

try:
    response = requests.get('http://www.example.com', timeout=5)
    response.raise_for_status()  # 如果响应状态码不是200, 引发HTTPError异常
except Timeout:
    print("请求超时,请稍后重试。")
except HTTPError as err:
    print(f"HTTP错误发生:{err}")
except RequestException as e:
    print(f"请求出错:{e}")

2. 页面解析异常处理

在解析网页时,可能会因为元素不存在或页面结构变化导致解析失败。以下是如何处理页面解析异常的代码示例:

from bs4 import BeautifulSoup

html = "<div class='product'>Price: $100</div>"
try:
    soup = BeautifulSoup(html, "html.parser")
    price = soup.find("span", class_="price").text
except AttributeError:
    price = "N/A"
print(price)

3. 重试机制

当遇到网络异常或超时时,设置重试机制可以让爬虫重新尝试获取数据。以下是如何设置重试机制的代码示例:

from retrying import retry

@retry(stop_max_attempt_number=3, wait_fixed=2000)
def fetch_data(url):
    response = requests.get(url)
    return response.json()

try:
    data = fetch_data('http://www.example.com/api/data')
except Exception as e:
    print('获取数据失败:', str(e))

4. 日志记录

使用日志记录工具(如Python的 logging 模块)记录错误和异常信息。这样可以方便地查看和分析程序的运行情况,并帮助调试和排查问题。

import logging

logging.basicConfig(filename="error.log", level=logging.ERROR)

try:
    # 可能引发异常的代码块
    pass
except Exception as e:
    logging.error("发生异常: %s", str(e))

5. 动态调整XPath或CSS选择器

针对不同HTML结构设计备选方案,增加容错机制,使用 try-except 捕获异常。

try:
    price = soup.find("span", class_="price").text
except AttributeError:
    try:
        price = soup.find("div", class_="price").text
    except AttributeError:
        price = "N/A"
print(price)


http://www.kler.cn/a/413775.html

相关文章:

  • 【MySQL篇】持久化和非持久化统计信息的深度剖析(第一篇,总共六篇)
  • 新版布谷直播软件源码开发搭建功能更新明细
  • 非线性控制器设计原理
  • 将table中行的赋值到其他模块去维护不显示,this.$forceUpdate()无效,刷新key 放到完整模块里不可行
  • Java中的线程池使用详解
  • 48-基于单片机的LCD12864时间调控和串口抱站
  • 【Leetcode 每日一题】25. K 个一组翻转链表
  • 动态加载Jar包引发的“java.util.zip.ZipException: invalid distance too far back”
  • 定制独立站系统需要哪些技术支持?
  • 不间断电源 (UPS) 对现代技术可靠性的影响
  • 机器学习之DeepMind推出的DreamerV3
  • 代码随想录-笔记-其五
  • 基于springboot的登录校验
  • 通信网络安全
  • Java对象与XML互相转换(xstream)
  • 本地化部署 私有化大语言模型
  • ABAP OOALV模板
  • Android中ByteBuffer内存池设计示例
  • 23种设计模式之外观模式
  • linux添加附加磁盘
  • CFD 在生物反应器放大过程中的作用
  • 拍立淘按图搜索实战化,拍立淘API接口参数说明
  • 在 Ubuntu 上部署 MediaWiki 开源维基平台
  • Jetpack业务架构(ViewModel)
  • Linux系统之iotop命令的基本使用
  • 【EI会议征稿通知 | 往届均已见刊检索】第四届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2025)