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

使用BeautifulSoup抓取亚马逊图书标题无返回结果问题求助

问题原因

  • URL拼接错误:原代码将页码直接拼接在ref=nb_sb_noss_1后,破坏了原有的查询参数结构,导致亚马逊无法返回正确的商品搜索结果页
  • 未显式指定BeautifulSoup解析器:不同环境默认解析器存在差异,可能导致DOM树解析异常,无法匹配到目标节点
  • 缺少请求有效性校验:未校验HTTP请求状态码,若触发亚马逊反爬机制返回403/503等错误页,自然无法定位到图书标题节点

修复方案

  1. 修正URL拼接逻辑,保证分页参数正常传递
  2. 显式指定BeautifulSoup的HTML解析器
  3. 增加请求状态码校验,同时使用更精准的标题定位选择器,降低匹配容错率

修正后代码

from bs4 import BeautifulSoup
import requests

no_pages = 2

def get_data(pageNo):  
    headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0", 
        "Accept-Encoding":"gzip, deflate", 
        "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
        "DNT":"1",
        "Connection":"close", 
        "Upgrade-Insecure-Requests":"1"
    }
    # 修正后的URL,分页参数正确拼接
    url = f'https://www.amazon.com/s?k=science+fiction+adventure&i=digital-text&page={pageNo}'
    r = requests.get(url, headers=headers)
    # 增加请求成功校验
    if r.status_code != 200:
        print(f"第{pageNo}页请求失败,状态码:{r.status_code}")
        return
    content = r.content
    # 显式指定解析器
    soup = BeautifulSoup(content, 'html.parser')
    
    # 更精准的选择器:先定位搜索结果卡片,再找标题span
    for title_span in soup.select('div[data-component-type="s-search-result"] h2 a.a-link-normal span'):
        print(title_span.get_text(strip=True))

# 测试调用
for i in range(1, no_pages+1):
    print(f"=====第{i}页图书标题=====")
    get_data(i)

补充说明

如果还是无法返回内容,大概率是触发了亚马逊的反爬机制,可以尝试更换User-Agent、增加请求间隔时间,或者使用代理IP池规避拦截。

内容的提问来源于stack exchange,提问作者Nick Rizzolo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:18:01