You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化网页抓取脚本中的多try-except代码

网页抓取脚本异常处理优化方案

原代码通过大量重复的try/except块处理网页元素提取时的异常,代码冗余度高。可以通过封装通用的安全提取函数来简化逻辑,同时保持代码可读性。

第一步:封装通用安全提取函数

这个函数接收待处理元素、自定义提取逻辑(用lambda传递)和默认值,统一处理提取过程中常见的IndexError(元素不存在索引报错)、AttributeError(调用不存在的方法/属性报错):

def safe_extract(item, extract_func, default=None):
    try:
        return extract_func(item)
    except (IndexError, AttributeError):
        return default

注:指定捕获明确的异常类型,比裸except更安全,避免隐藏未知错误。

第二步:用通用函数重构原代码

将原来的每个try/except块替换为调用safe_extract,代码会更简洁紧凑:

import re

# 通用安全提取函数
def safe_extract(item, extract_func, default=None):
    try:
        return extract_func(item)
    except (IndexError, AttributeError):
        return default

# 重构后的业务代码
asin = item.get('data-asin')
# 给title补充异常处理,避免找不到元素直接崩溃
title = safe_extract(item, lambda x: x.find_all('span', {'class': 'a-size-base-plus a-color-base a-text-normal'})[0].get_text(), default='')

label = safe_extract(item, lambda x: x.find_all('span', {'aria-label': 'Escolha da Amazon'})[0].get('aria-label'))

current_whole_price = safe_extract(item, lambda x: x.find_all('span', {'class': 'a-price'})[0].find('span', {'class': 'a-price-whole'}).get_text().replace(',','').replace('.',''), default='0')
current_fraction_price = safe_extract(item, lambda x: x.find_all('span', {'class': 'a-price'})[0].find('span', {'class': 'a-price-fraction'}).get_text(), default='0')
current_price = float(f"{current_whole_price}.{current_fraction_price}")

# 处理评分和评分人数的组合逻辑
def extract_rating(item):
    rating_info = item.find('div', {'class':'a-row a-size-small'}).get_text()
    rating = float(rating_info[:3].replace(',','.'))
    rating_count = int(re.findall(r'\d+', rating_info)[-1])
    return rating, rating_count

rating, rating_count = safe_extract(item, extract_rating, default=(None, None))

ad = safe_extract(item, lambda x: x.find_all('span', {'class': 'a-color-secondary'})[0].get_text() == 'Patrocinado', default=False)

product_data = {
    'productId': itemId,
    'asin': asin,
    'opt_label': label,
    'ad': ad,
    'title': title,
    'current_price': current_price,
    'url': f'https://www.amazon.com.br/dp/{asin}',
    'rating': rating,
    'rating_count': rating_count,
}

优化说明

  1. 代码复用:所有元素提取的异常逻辑集中在safe_extract,避免重复编写try/except
  2. 灵活性:通过lambda传递自定义提取逻辑,适配从简单属性获取到复杂链式调用+字符串处理的多种场景
  3. 安全性:明确捕获网页提取的常见异常,不会隐藏未知错误
  4. 可读性:业务逻辑与异常处理分离,代码结构更清晰

内容的提问来源于stack exchange,提问作者FábioRB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:14:53