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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值