使用BeautifulSoup抓取亚马逊图书标题无返回结果问题求助
问题原因
- URL拼接错误:原代码将页码直接拼接在
ref=nb_sb_noss_1后,破坏了原有的查询参数结构,导致亚马逊无法返回正确的商品搜索结果页 - 未显式指定BeautifulSoup解析器:不同环境默认解析器存在差异,可能导致DOM树解析异常,无法匹配到目标节点
- 缺少请求有效性校验:未校验HTTP请求状态码,若触发亚马逊反爬机制返回403/503等错误页,自然无法定位到图书标题节点
修复方案
- 修正URL拼接逻辑,保证分页参数正常传递
- 显式指定BeautifulSoup的HTML解析器
- 增加请求状态码校验,同时使用更精准的标题定位选择器,降低匹配容错率
修正后代码
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
相关产品推荐
相关产品推荐

