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

亚马逊网页爬取:获取下一页URL时跳转至登录页问题

亚马逊评论爬虫后续页跳登录的解决办法

核心问题

  1. URL拼接bug:原代码中amazonUrl = 'amazon.in/'缺少https://www.前缀,且如果页面返回的href是完整URL,拼接后会出现重复域名(比如你遇到的https://www.amazon.in/https://www.amazon.in/...),导致无效链接。
  2. 反爬机制触发:亚马逊检测到非浏览器请求,后续页面直接重定向到登录页。

具体修复方案

1. 修复URL拼接逻辑

用urllib.parse处理URL,自动识别相对/绝对路径,避免拼接错误:

from urllib.parse import urljoin

def getnextpage(soup, base_url):
    page = soup.find('ul', class_='a-pagination')
    if page and not page.find('li', class_='a-disabled a-last'):
        next_link = page.find('li', class_='a-last').find('a')['href']
        # 自动拼接完整URL,不管next_link是相对还是绝对路径
        return urljoin(base_url, next_link)
    else:
        return False

2. 绕过亚马逊反爬的关键设置

(1)完善请求头,模拟真实浏览器

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Accept-Language': 'en-US,en;q=0.9',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
}

可以准备多个User-Agent,每次请求随机切换,降低被识别概率。

(2)使用会话保持

用requests.Session()维持会话,自动保存cookie,模拟用户连续浏览的行为:

import requests
from bs4 import BeautifulSoup
import time
import random

session = requests.Session()
session.headers.update(headers)

# 初始评论页URL
base_url = 'https://www.amazon.in/Sony-WH-1000XM5-Wireless-Cancelling-Headphones/product-reviews/B09XS7JWHH/ref=cm_cr_arp_d_paging_btm_1?ie=UTF8&pageNumber=1&reviewerType=all_reviews'

current_url = base_url
while current_url:
    response = session.get(current_url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 这里写爬取评论的逻辑
    # ...
    
    # 获取下一页URL
    current_url = getnextpage(soup, base_url)
    
    # 随机延迟1-3秒,避免频繁请求
    time.sleep(random.uniform(1, 3))

(3)可选:直接构造下一页URL(更可靠)

不用解析页面的下一页按钮,直接通过修改pageNumber参数构造URL,避免亚马逊返回假链接:

def build_next_page_url(current_page_num, base_url):
    # 替换URL中的pageNumber参数
    return base_url.replace(f'pageNumber={current_page_num}', f'pageNumber={current_page_num+1}')

# 使用示例
current_page = 1
max_pages = 10  # 按需设置最大页数
while current_page <= max_pages:
    url = base_url.replace('pageNumber=1', f'pageNumber={current_page}')
    response = session.get(url)
    # 爬取逻辑...
    current_page +=1
    time.sleep(random.uniform(1,3))

额外注意事项

  • 不要短时间内爬取大量页面,亚马逊的反爬会越来越严格;
  • 如果还是被封,可以尝试使用代理IP(需注意代理质量);
  • 遵守亚马逊的robots.txt规则,避免违规爬取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:15:00