如何使用 Python 对亚马逊进行网络抓取
在本文中,我将向您介绍如何刮除 亚马逊 使用 Python。我们将探索两种方法:使用 CSS 选择器和 XPath 的传统方法,以及使用 Bright Data 进行代理管理的更先进方法。到最后,您将知道如何成功刮擦亚马逊,即使其保护措施已经到位。
为什么要抓取亚马逊?
在深入了解细节之前,有必要先了解一下为什么搜索亚马逊是有价值的。亚马逊是最大的在线零售商,拥有数百万种产品。搜索亚马逊可以提供
- 价格跟踪: 企业可以跟踪竞争对手的产品价格,并据此调整自己的价格。
- 产品研究: 卖家可以监控产品趋势,并根据畅销产品调整产品供应。
- 市场研究: 分析师可以提取客户评论、产品详情和评级,以深入了解客户对某些产品的看法。
- 数据汇总: 研究人员和开发人员可以收集各类产品的数据,进行分析或比较。
网络抓取的先决条件
在我们开始之前,请确保您具备以下先决条件:
Python:我们将使用 Python 编写 网络抓取 脚本Python 因其简单和强大的库而受到青睐。 安装 Python 3.9 或更高版本 来自 Python 官方网站。
图书馆:我们将使用以下图书馆 requests, BeautifulSoup和 pandas 进行数据挖掘和处理。您可以使用 pip 安装它们:
pip install requests beautifulsoup4 pandas
Bright Data: Bright Data 是一个代理网络,可以帮助我们绕过 IP 屏蔽等限制。使用 Bright Data,您可以通过不同的 IP 地址路由您的请求,确保亚马逊不会检测到来自单一来源的多个请求。
亚马逊抓取分步指南
我们将把抓取过程分解为易于管理的步骤。首先,我们将使用传统的刮擦技术提取产品数据,然后使用 Bright Data 来确保我们可以绕过亚马逊的反刮擦措施。
步骤 1:设置环境
首先导入必要的库:
import requests
from bs4 import BeautifulSoup
import pandas as pd
如果你还没有这样做,还需要使用 pip 安装 requests 和 beautifulsoup4。
pip install requests beautifulsoup4
步骤 2:向亚马逊发送请求
要从亚马逊抓取数据,我们首先需要向亚马逊的搜索页面发送 HTTP 请求。例如,让我们抓取 "笔记本电脑 "这样一个搜索词的数据。
url = "https://www.amazon.com/s?k=laptop"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(url, headers=headers)
标头中的 User-Agent 使请求看起来像是来自合法的网络浏览器,这有助于绕过基本的僵尸防护。
第 3 步:使用 BeautifulSoup 解析 HTML
获取页面后,我们可以使用 BeautifulSoup 来解析 HTML 内容并提取相关数据。
soup = BeautifulSoup(response.content、 html.parser)
步骤 4:提取产品信息
亚马逊的页面结构在特定的 HTML 元素中包含产品名称、价格、评级和链接。我们将使用 BeautifulSoup 的 CSS 选择器提取这些内容。
以下是提取产品名称和价格的方法:
产品 = soup.find_all(div, {'s': s 主槽 s 结果列表 s 搜索结果 sg 行})
产品名称 = []
价格 = []
for product in 产品
name = product.find(`'跨度'`, {'s': a-text-normal})
price = product.find(`'跨度'`, {'s': a-price-whole})
if 名称和价格:
product_names.append(name.text)
prices.append(price.text)
# 保存为 CSV
data = {'产品名称'产品名称、 '价格'价格}
df = pd.DataFrame(data)
df.to_csv(amazon_products.csv, index=False)
在这个片段中
- soup.find_all() 用于查找搜索结果中的所有产品元素。
- find() 方法用于提取产品名称和价格。
- 最后,我们将结果存储在 pandas DataFrame 中,并导出为 CSV 文件。
步骤 5:处理分页
亚马逊有多页搜索结果。要从多个页面中抓取数据,我们需要处理分页。分页通常嵌入在 URL 中,您可以递增页码来获取后续页面的数据。
在收件箱中接收《数据日报》的报道
要解决这个问题,可以修改 URL,使其包含页码:
页码 = 1
url = f"https://www.amazon.com/s?k=laptop&page={page_num}"
然后,通过更新 page_num 变量对每个页面重复刮擦过程。
步骤 6:处理动态内容
亚马逊上的某些内容是使用 JavaScript 动态加载的。如果遇到产品数据无法直接在 HTML 中显示的页面,则需要使用 Selenium 等工具与页面交互,等待 JavaScript 加载。
下面是一个使用 Selenium 搜索亚马逊的示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
驱动程序 = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.amazon.com/s?k=laptop")
# 等待页面加载并获取产品名称
products = driver.find_elements(By.CLASS_NAME、 主插槽)
# 提取并打印产品名称
for product in 产品
name = product.find_element(By.CLASS_NAME、 a-text-normal)
print(name.text)
driver.quit()
这种方法更耗费资源,但却是处理动态页面的可靠方法。
步骤 7:使用 Bright Data 进行代理管理
如果您在短时间内发送过多请求,亚马逊可能会屏蔽您的 IP。为了避免这种情况,我们可以使用 Bright Data(前身为 Luminati)来轮换 IP,避免被发现。Bright Data 是一种代理服务,可让您通过不同的 IP 地址路由您的请求,模仿人类行为。
您可以按以下方式设置 Bright Data 的代理:
proxy = {
"http": "http://your_bright_data_proxy:port",
"https": "https://your_bright_data_proxy:port"
}
response = requests.get(url, headers=headers, proxies=proxy)
这将通过 Bright Data 的代理网络路由请求,有助于防止亚马逊屏蔽您的 IP。
步骤 8:处理验证码
亚马逊在检测到自动刮擦时通常会提供验证码。Bright Data 可代表您处理验证码,从而减轻这种情况。但是,如果您仍然遇到验证码问题,可以使用 2Captcha 或 Anti-Captcha 等 API 以编程方式解决。
结论
使用 Python 爬取 Amazon 可以成为采集数据的一个有价值的工具,无论你是在跟踪商品价格、研究用户评论,还是进行市场分析。虽然 Amazon 采取了多种反爬措施,但借助诸如使用 Bright Data 轮换 IP、用 Selenium 处理动态内容,以及确保请求结构规范等技术,可以帮助你更有效地爬取 Amazon。
按照本指南中概述的步骤,您可以构建一个强大的刮擦系统,从亚马逊提取有价值的数据,帮助您自动进行研究、构建价格比较工具或跟踪竞争对手的活动。

