如何从亚马逊指定页面正确抓取目标网站链接
亚马逊搜索页链接爬取调整方案
问题核心原因
- 你定义了请求头但没有传入
requests.get()方法,请求使用requests默认UA被亚马逊识别为爬虫,返回反爬拦截页面而非正常搜索结果页,因此只能抓取到极少链接 - 未对链接做精准筛选,会捕获大量无关的导航、广告、页面功能类链接
- 默认的
html.parser解析器对亚马逊复杂页面的解析兼容性较差,容易出现元素遗漏
调整后可运行代码
需要先安装依赖:
pip install requests beautifulsoup4 lxml
完整代码如下:
import requests from bs4 import BeautifulSoup from urllib.parse import urljoin base_url = "https://www.amazon.com" target_url = "https://www.amazon.com/s?rh=n%3A1069242&fs=true&ref=lp_1069242_sar" headers ={ # 建议更新为你当前浏览器的真实UA,降低被拦截概率 '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' } # 传入headers参数发起请求 r = requests.get(target_url, headers=headers, timeout=10) if r.status_code == 200: # 用lxml解析器提升解析兼容性 soup = BeautifulSoup(r.content, 'lxml') # 精准定位搜索结果商品链接,过滤无关元素 for link in soup.find_all('a', class_='a-link-normal s-no-outline', href=True): # 把相对链接拼接为可直接访问的绝对链接 full_link = urljoin(base_url, link['href']) # 仅保留商品链接(亚马逊商品链接统一带/dp/字段) if '/dp/' in full_link: print(full_link) else: print(f"请求被拦截,状态码:{r.status_code},可尝试更新UA或添加Cookie参数")
额外优化提示
如果调整后仍出现请求被拦截的情况,可以在请求头中添加你自己浏览器访问亚马逊时的Cookie字段,或切换代理IP即可正常获取内容。
内容的提问来源于stack exchange,提问作者Amen Aziz
相关产品推荐
相关产品推荐

