使用Python+BeautifulSoup爬取亚马逊女鞋热销榜出现空结果的问题求助
爬虫空结果问题排查与修正方案
核心故障原因
- 代码照搬图书类目的元素定位规则,和当前目标页面(女士时尚运动鞋热销榜)的实际DOM结构不匹配:原代码筛选的
a-section a-spacing-none aok-relative类名的div节点,在当前目标页面已不存在,循环遍历不到任何商品节点,最终返回空列表。 - 请求逻辑存在疏漏:URL拼接规则适配的是旧的图书榜单地址,和当前运动鞋类目的分页参数结构不符,可能拿到的是404页、人机验证拦截页,而非真实的榜单内容。
- 表格生成逻辑和采集字段不匹配:代码已经注释掉了作者字段的采集逻辑,单条商品记录只有4个字段,但初始化DataFrame时仍保留5个列名,就算拿到数据也会触发维度不匹配的报错。
相关逻辑说明
- 逐页循环的作用:遍历设置的爬取页数范围,每循环一次调用一次
get_data函数请求对应页码的榜单内容,把单页返回的商品列表存入results数组。 - 嵌套列表摊平逻辑:
flatten方法会把原本嵌套的二维列表(结构为「单页商品列表组成的列表」)拆解为一维的商品条目列表,满足pandas创建表格的入参要求。
修正步骤
- 验证请求有效性
在请求代码后增加打印语句,确认返回内容是否为真实榜单页面:
若返回非200状态码,或内容为人机验证提示,需要在请求头中补充print(r.status_code) print(r.text[:1000])Accept-Language等字段,模拟真实浏览器的访问特征,同时在请求间隔增加随机延时,避免触发反爬拦截。 - 适配页面元素定位规则
打开目标榜单页面,通过浏览器检查工具确认当前实际的商品容器、商品名、评分、评分数、价格对应的节点类名,替换原代码中照搬旧规则的类名匹配逻辑。 - 修正表格字段定义
匹配实际采集的4个字段,调整DataFrame的列定义:df = pd.DataFrame(flatten(results), columns=['Product Name', 'Rating', 'Customers_Rated', 'Price']) - 修正URL拼接逻辑
对照目标页面的真实分页参数格式调整URL拼接规则,确保每个页码请求都能返回对应内容的榜单页面。
注意:亚马逊平台有严格的反爬机制,无规则的高频请求大概率会触发访问限制,建议控制请求频率,必要时增加代理池切换节点。
内容的提问来源于stack exchange,提问作者Saswati
相关产品推荐
相关产品推荐

