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

使用Python从电商网站提取商品价格数值的技术问询

解决电商商品价格提取问题

Hey there! I see you're trying to pull the price from an e-commerce product page (you mentioned AliExpress but used an Amazon link as an example). Let's walk through fixing your code and making it work properly.

原代码存在的问题

  • 冗余库导入: You imported both requests, urllib2, and urllib.request — you only need one HTTP library (requests is simpler and more modern).
  • 错误的元素选择器: The id="volume" you're targeting doesn't correspond to Amazon's price element. That's why your code isn't grabbing the 55.01 value you want.
  • 未处理异常: If the element you're looking for doesn't exist, your code will throw an index error.
  • 未提取文本内容: You're printing the BeautifulSoup tag object instead of the actual price text inside it.

修正后的亚马逊价格提取代码

Here's a cleaned-up version that correctly grabs the price from your Amazon example, with error handling:

import requests
from bs4 import BeautifulSoup

url = "https://www.amazon.com/Optimum-Nutrition-Standard-Naturally-Flavored/dp/B00QQA0H3S?pd_rd_wg=Hiuuc&pd_rd_r=2542737c-992b-4b5c-b7de-05acce3929d5&pd_rd_w=be1cP&ref_=pd_gw_simh&pf_rd_r=WFBB3JV61PKGSDJRW0C1&pf_rd_p=b841581f-e864-5164-afa6-4c18a8348879"

try:
    # Send HTTP request with a user-agent to avoid being blocked
    response = requests.get(url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"})
    response.raise_for_status()  # Raise error if request fails (e.g., 404, 500)
    soup = BeautifulSoup(response.text, "html.parser")
    
    # Target Amazon's price elements (whole number + fraction)
    price_whole = soup.find("span", class_="a-price-whole")
    price_fraction = soup.find("span", class_="a-price-fraction")
    
    if price_whole and price_fraction:
        full_price = f"{price_whole.text.strip()}.{price_fraction.text.strip()}"
        print(f"Extracted price: {full_price}")
    else:
        # Fallback to alternative price selector if primary fails
        alternative_price = soup.find("span", id="priceblock_ourprice")
        if alternative_price:
            print(f"Extracted price: {alternative_price.text.strip()}")
        else:
            print("Could not locate the price element on this page")
except Exception as e:
    print(f"An error occurred: {str(e)}")

针对速卖通的通用思路

For AliExpress, the price element will use different HTML attributes. Here's how to find the right selector:

  1. Open the AliExpress product page in your browser.
  2. Right-click the price text and select "Inspect" to open developer tools.
  3. Look for the wrapping tag (usually a span or div) and note its class or id (AliExpress often uses classes like product-price or price-current).
  4. Replace the selectors in the code above with the ones you found.

关键注意事项

  • User-Agent Header: Most e-commerce sites block requests without a proper user-agent, so adding one mimicking a browser helps avoid being blocked.
  • Site Structure Changes: E-commerce platforms frequently update their HTML, so your selector might need adjustments over time. Always recheck the element with developer tools if the code stops working.

内容的提问来源于stack exchange,提问作者Ali Göktaş

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:24:30