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

使用Python+BeautifulSoup爬取eBay取价格时列表索引越界如何解决?

错误成因
  • 核心原因是你遍历的商品容器中,并非所有节点都包含class="s-item__price"的span标签:eBay搜索结果页存在无定价的特殊商品(比如拍卖待出价商品、广告占位容器、已下架/未上架商品、价格面议类商品),此时findAll方法会返回空列表,直接取下标[0]就会触发列表索引越界错误。
  • 额外补充你现有代码的两处语法疏漏,虽不是当前报错的直接诱因,但也会导致后续运行异常:
    1. 读取页面源码后缺少BeautifulSoup解析步骤,直接调用page_soup.findAll会触发未定义报错
    2. 关闭请求的close方法漏写括号,实际不会执行请求关闭操作
修复方案
  1. 优先对价格标签的返回结果做空判断,再取值,避免直接索引空列表,示例代码如下:
# 方案1:使用findAll加空判断
price_container = container.findAll('span', {'class' : 's-item__price'})
if price_container:
    price = price_container[0].text.strip()
else:
    # 可自定义默认值,也可直接用continue跳过本条无价格的商品
    price = "无定价"

# 方案2:改用find方法(匹配不到返回None,判断更简洁)
price_tag = container.find('span', {'class' : 's-item__price'})
price = price_tag.text.strip() if price_tag else "无定价"
  1. 补全你遗漏的页面解析逻辑,修正语法错误:
import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = "https://www.ebay.com.au/sch/i.html?_from=R40&_nkw=switch&_sacat=0&_pgn=1"
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close() # 补全方法调用的括号
page_soup = soup(page_html, "html.parser") # 补全页面解析步骤,生成soup对象

内容的提问来源于stack exchange,提问作者Cole Malcolm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 03:54:08