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

使用BeautifulSoup网页抓取时如何获取无id属性的价格字段值

无id属性的BeautifulSoup元素定位方案

目标元素未设置id时,完全可以通过其他属性、节点关系、文本特征等方式定位抓取,以下是适配你场景的常用方案:

  • 组合class/自定义属性定位
    直接用find方法的attrs参数传入任意属性组合即可匹配目标元素,亚马逊的价格元素通常带有a-price-whole、a-offscreen等固定class,示例写法:
# 单个class定位
price = soup2.find('span', class_='a-offscreen').get_text(strip=True)
# 多属性组合定位,准确率更高
price = soup2.find('span', attrs={'class':'a-offscreen', 'data-a-color':'price'}).get_text(strip=True)
  • 通过节点层级关系定位
    先定位到有唯一标识的父级容器,再向下查找目标子元素,可避免全局匹配到无关的同属性元素:
# 先找到价格模块的父容器(亚马逊该容器id长期稳定)
price_container = soup2.find(id='corePrice_feature_div')
# 再从容器内找价格元素
price = price_container.find('span', class_='a-offscreen').get_text(strip=True)
  • 文本特征关联定位
    如果目标元素紧邻固定文本标签,可先匹配文本再找相邻节点:
# 先匹配“售价”相关的固定文本
price_label = soup2.find(string=lambda t: t and '£' in t.strip() or '售价' in t.strip())
# 再提取对应数值
price = price_label.get_text(strip=True)

适配你场景的可运行完整代码

from bs4 import BeautifulSoup
import requests
import time 
import datetime

URL = "https://www.amazon.co.uk/Got-Data-MIS-Business-Analyst/dp/B09F319PK2/ref=sr_1_1?keywords=funny+got+data+mis+data+systems+business+analyst+tshirt&qid=1636481904&qsid=257-9827493-6142040&sr=8-1&sres=B09F319PK2%2CB09F33452D%2CB08MCBFLHC%2CB07Y8Z4SF8%2CB07GJGXY7P%2CB07Z2DV1C2%2CB085MZDMZ8%2CB08XYL6GRM%2CB095CXJ226%2CB08JDMYMPV%2CB08525RB37%2CB07ZDNR6MP%2CB07WL5JGPH%2CB08Y67YF63%2CB07GD73XD8%2CB09JN7Z3G2%2CB078W9GXJY%2CB09HVDRJZ1%2CB07JD7R6CB%2CB08JDKYR6Q&srpt=SHIRT"

headers = {"User-Agent": "Mozilla/5.0 (X11; CrOS x86_64 14092.77.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.107 Safari/537.36"}

page = requests.get(URL, headers = headers)

soup1 = BeautifulSoup(page.content, "html.parser")
soup2 = BeautifulSoup(soup1.prettify(), "html.parser")

title = soup2.find(id="productTitle").get_text(strip=True)
# 替换原有的id定位方式,改为父容器+子class定位
price_container = soup2.find(id='corePrice_feature_div')
price = price_container.find('span', class_='a-offscreen').get_text(strip=True)

print(title)
print(price)

注意事项

  • 亚马逊页面结构会不定期更新,定位前可先打印soup2或者通过浏览器F12开发者工具确认目标元素的最新属性
  • 多属性、层级组合定位的准确率远高于单一属性定位,优先使用该类方式
  • 提取文本后使用strip()方法可直接去掉前后多余的换行、空格,无需额外做清洗处理

内容的提问来源于stack exchange,提问作者Dami Famakin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:36:04