PythonAnywhere部署亚马逊爬虫遇异常,求User-Agent解决方案
解决PythonAnywhere部署亚马逊爬虫返回"Something Went Wrong"的问题
你的问题核心是亚马逊的反爬机制识别出了PythonAnywhere环境的异常,本地正常是因为个人设备的IP和请求头更贴近真实用户行为。以下是具体解决方法:
1. 更换/随机化User-Agent
不要固定使用个人设备的UA,改用常见浏览器的公开UA,最好维护一个UA池每次随机选一个,避免被标记。示例UA如下:
- Chrome:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" - Safari:
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15" - Firefox:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0"
2. 完善请求头字段
只加User-Agent不够,补充其他浏览器常用的请求头,模拟真实访问:
headers = { "User-Agent": 随机选择的UA, "Accept-Language": "en-US,en;q=0.9", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Referer": "https://www.amazon.com/" }
3. 处理IP限制问题
PythonAnywhere的共享服务器IP大概率被亚马逊标记了,建议使用付费住宅代理IP(避免用免费代理,稳定性差),在请求中添加代理参数:
proxies = { "http": "http://你的代理IP:端口", "https": "https://你的代理IP:端口" } page = requests.get(URL, headers=headers, proxies=proxies)
4. 添加请求延迟
频繁请求会触发反爬,每次请求前加2-5秒随机延迟:
import time import random time.sleep(random.uniform(2, 5))
修改后的示例代码
import requests from bs4 import BeautifulSoup import random import time # 维护UA池 USER_AGENTS = [ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0" ] URL = link # 你的亚马逊链接 # 构造请求头 headers = { "User-Agent": random.choice(USER_AGENTS), "Accept-Language": "en-US,en;q=0.9", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Referer": "https://www.amazon.com/" } # 随机延迟 time.sleep(random.uniform(2, 5)) # 发送请求 page = requests.get(URL, headers=headers) # 检查请求状态 if page.status_code == 200: soup1 = BeautifulSoup(page.content, 'html.parser') soup2 = BeautifulSoup(soup1.prettify(), "html.parser") # 后续数据解析逻辑 else: print(f"请求失败,状态码:{page.status_code},响应片段:{page.text[:500]}")
能否在PythonAnywhere解决?
可以,通过上述UA随机化、完善请求头、使用代理、添加延迟的组合方案,基本能绕过亚马逊的反爬检测,解决"Something Went Wrong"的问题。
内容的提问来源于stack exchange,提问作者ahmet yılmaz234
相关产品推荐
相关产品推荐

