如何从HTML中提取价格并存入变量?附代码求助
解决裤子价格提取失败的问题
我看了你的代码,发现几个明显的问题导致你提取不到价格,咱们一步步来修正:
核心问题分析
- 页面请求混乱:你先请求了Urban Outfitters的工装裤搜索页,但随后又请求了Patagonia的夹克页面,还覆盖了
soup对象——等于你最后处理的是完全无关的页面,自然拿不到目标裤子的价格。 - 元素选择器错误:你找
span时用的{'aria-label': 'class'}完全不符合页面实际属性,这也是提取不到内容的关键原因。
修正后的代码
针对你目标的Urban Outfitters工装裤搜索页,我调整了代码,适配页面的实际元素结构:
import requests from bs4 import BeautifulSoup # 修正URL中的转义字符,确保请求正确页面 url = 'https://www.urbanoutfitters.com/search?q=cargo%20pant&sayt=true' # 完善User-Agent,避免被网站拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } response = requests.get(url, headers=headers) # 先检查请求是否成功 if response.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') extracted_prices = [] # 根据页面实际结构,定位每个商品的价格容器 for price_box in soup.find_all('div', class_='c-product-price'): # 提取当前价格的文本元素 price_element = price_box.find('span', class_='c-product-price__current') if price_element: # 清理文本中的空格和换行,只保留价格内容 clean_price = price_element.get_text(strip=True) extracted_prices.append(clean_price) print("提取到的工装裤价格:") print(extracted_prices) else: print(f"页面请求失败,状态码:{response.status_code}")
额外说明
- 如果页面需要滚动加载更多商品,
requests只能获取初始加载的内容,这时候你可能需要用Selenium这类工具模拟浏览器行为,加载完整页面后再提取。 - 要是后续页面结构有变化,你可以右键价格元素选择「检查」,查看最新的class或属性,再调整代码里的选择器即可。
内容的提问来源于stack exchange,提问作者user13950756




