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

使用BeautifulSoup+Requests爬取亚马逊印度畅销书价格为空的解决方法

问题分析与解决方案

首先明确:lxml完全适用于你的场景,它是BeautifulSoup支持的高效HTML解析器,处理亚马逊这类结构复杂的页面比默认的html.parser更稳定。不过你遇到的价格列表为空问题,核心原因大概率不是解析器,而是亚马逊的反爬机制或者请求头不规范,导致返回的页面没有价格数据。

解决步骤

1. 修正请求头,模拟浏览器访问

亚马逊会检测请求的User-Agent,默认requests库的User-Agent是python-requests/xxx,很容易被识别为爬虫,返回的页面会缺失价格等核心数据。你需要添加真实的浏览器User-Agent(可通过浏览器F12→网络→请求头查看自己的UA)。

2. 安装并使用lxml解析器

先确保已经安装lxml:

pip install lxml

3. 正确定位价格元素

亚马逊的页面类名可能会动态调整,需要用浏览器F12工具实时查看价格元素的选择器(当前亚马逊印度图书畅销榜的价格元素类为p13n-sc-price)。

完整代码示例

import requests
from bs4 import BeautifulSoup

url = "https://www.amazon.in/gp/bestsellers/books/"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
}

# 发送请求
response = requests.get(url, headers=headers)
response.raise_for_status()  # 确保请求成功

# 用lxml解析页面
soup = BeautifulSoup(response.text, "lxml")

# 遍历每个畅销图书条目
for item in soup.select(".zg-item-immersion"):
    # 提取书名
    title = item.select_one(".zg-item-title").get_text(strip=True) if item.select_one(".zg-item-title") else "无书名"
    # 提取作者
    author = item.select_one(".a-size-small.a-color-secondary").get_text(strip=True) if item.select_one(".a-size-small.a-color-secondary") else "无作者"
    # 提取价格
    price = item.select_one(".p13n-sc-price").get_text(strip=True) if item.select_one(".p13n-sc-price") else "无价格"
    
    print(f"书名: {title}\n作者: {author}\n价格: {price}\n---")

注意事项

  • 如果还是获取不到价格,先查看response.text的内容,确认页面里是否有价格数据。若没有,可能需要添加更多请求头(比如Accept-Language)或使用会话保持。
  • 亚马逊的页面结构可能随时更新,若代码突然失效,先检查元素选择器是否需要调整。

内容的提问来源于stack exchange,提问作者ml ds

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:52:23