亚马逊网页爬取:获取下一页URL时跳转至登录页问题
亚马逊评论爬虫后续页跳登录的解决办法
核心问题
- URL拼接bug:原代码中
amazonUrl = 'amazon.in/'缺少https://www.前缀,且如果页面返回的href是完整URL,拼接后会出现重复域名(比如你遇到的https://www.amazon.in/https://www.amazon.in/...),导致无效链接。 - 反爬机制触发:亚马逊检测到非浏览器请求,后续页面直接重定向到登录页。
具体修复方案
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
相关产品推荐
相关产品推荐

