使用 Python 搜索亚马逊畅销书的终极指南
手动跟踪价格和项目可能很困难。这就需要用到网络搜索。我可以使用 Python 自动完成这一过程,而不是把所有东西都写下来。通过抓取畅销书页面,我可以收集 CSV 等格式的数据,从而方便分析和跟踪趋势。让我们深入了解如何使用 Python 搜索亚马逊的畅销书。
什么是亚马逊畅销书?
亚马逊畅销书排名 (BSR) 是一个根据销售量对产品进行排名的系统。该排名可帮助客户找到不同类别中最畅销的产品,并查看他们正在考虑的产品的销售情况。BSR 显示在每个产品页面上,并定期更新以反映当前趋势。
搜索 "最佳卖家 "页面与搜索其他亚马逊产品页面类似。不过,亚马逊采取了安全措施,使得快速访问这些数据具有挑战性。如果您发送了太多请求,亚马逊就会屏蔽您的 IP 地址。为了避免这种情况,您必须在 Python 代码中添加安全措施。应对这一挑战是在亚马逊上成功进行网络刮擦的关键。
最佳亚马逊搜索工具
在我们跳转到逐步手动刮擦指南之前,我强烈建议您查看 我的 5 大亚马逊爬虫.我与所提及的任何品牌都没有任何关系,我是根据我和我的团队的个人经验来评论这些品牌的。
赶时间?以下是一份简明扼要的清单:
- Bright Data: 先进的亚马逊搜索功能,具有反检测和全局代理功能。
- Oxylabs: 具有本地化功能的专业电子商务搜索。
- Smartproxy: 支持旋转 IP 的 API 和代理解决方案。
- Zyte: 带有可定制选择器和应用程序接口的电子商务搜索器。
- ScraperAPI: 支持多种语言,提供灵活、基于信用的计划。
为抓取设置 Python 环境
我们需要设置必要的 Python 库,以便开始搜索亚马逊畅销书。我们将使用 Selenium 实现浏览器自动化,使用 webdriver-manager 管理网络驱动程序,并使用 pandas 将刮擦数据存储到 CSV 文件中。
步骤 1:安装 Python
首先,确保您的计算机上安装了 Python。您可以从官方 Python 网站.
接下来,打开终端或命令提示符,安装必要的依赖项:
pip install selenium webdriver-manager pandas
第 2 步:查看亚马逊畅销页面
在开始搜索之前,我们需要了解亚马逊畅销书页面的结构。在浏览器中打开任何亚马逊畅销商品页面,使用 "检查 "工具(右键单击任何元素并选择 "检查")查看 HTML。
在本教程中,我们将废止 "厨房与餐饮 "畅销书页面。该页面的结构包括
- 产品名称:产品标题位于一个特定的 HTML 元素中,该元素具有唯一标识的类。
- 产品价格:价格位于另一个特定的 HTML 元素中。
- 产品网址:每个产品都有一个链接到其详细产品页面的 URL。
这些元素将作为我们搜索工作的基础。
第 3 步:为网络抓取设置 Selenium
为了对亚马逊进行抓取,我们将使用 Selenium 与 "最佳畅销书 "页面进行交互,并提取必要的信息。
首先,导入所需的库:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import pandas as pd
import time
接下来,创建一个函数来初始化 Chrome 浏览器驱动程序。该函数将设置无头 Chrome 浏览器(在后台运行而不显示图形用户界面的浏览器):
def init_chrome_driver():
chrome_options = Options()
chrome_options.add_argument(" - 无头")
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
return driver
步骤 4:编写抓取逻辑
我们需要一个函数来加载 "最畅销产品 "页面并获取产品数据(标题、价格和 URL)。下面的函数将实现这一功能:
def get_products_from_page(URL, 驱动程序):
driver.get(url)
time.sleep(3) # Wait for the page to load
# Find all products on the page
product_elements = driver.find_elements(By.CLASS_NAME、 "zg-item")
# List to store product data
products = []
# Loop through the products and extract data
for product in product_elements:
try:
title = product.find_element(By.CLASS_NAME、 "p13n-sc-truncate").text
url = product.find_element(By.CLASS_NAME, "a-link-normal).get_attribute("href")
price = product.find_element(By.CLASS_NAME、 "p13n-sc-price").text
products.append({"title": 标题, "url": url、 "price": price})
except Exception as e:
print(f"提取产品数据时出错: {e}")
continue
return products
该函数将畅销商品页面的 URL 和 Selenium 驱动程序作为输入。然后,它会提取页面上每个产品的标题、价格和 URL,并将其存储在一个列表中。
步骤 5:将数据导出为 CSV
获得数据后,我们可以使用 Pandas 将其保存为 CSV 文件:
def save_too_csv(产品,文件名):
df = pd.DataFrame(products)
df.to_csv(filename, index=False)
此函数将产品数据列表转换为 Pandas DataFrame,并将其保存为 CSV 文件。
第 6 步:将所有内容整合在一起
现在,我们可以将所有内容整合到一个主函数中,启动网络搜索过程:
def main():
url = "https://www.amazon.com/Best-Sellers-Kitchen-Dining/zgbs/kitchen/"
driver = init_chrome_driver()
try:
products = get_products_from_page(url, driver)
save_to_csv(products, "amazon_best_sellers.csv")
finally:
driver.quit()
if __name__ == "__main__": main()
步骤 7:运行脚本
要运行脚本,只需在终端中执行 Python 文件即可:
python main.py
运行脚本后,将在工作目录中生成一个名为 amazon_best_sellers.csv 的文件,其中包含刮取的产品数据。
第 8 步:应对搜索挑战
虽然上述脚本可以正常工作,但对亚马逊进行搜索并非没有挑战。亚马逊采用了反搜索技术,例如
- 速率限制: 如果亚马逊在短时间内检测到过多请求,就会阻止您的 IP 地址。为避免这种情况,请使用 time.sleep() 在请求之间设置延迟。
- 验证码: 亚马逊使用 CAPTCHAs(验证码)来防止僵尸程序搜索其网站。Selenium 无法解决验证码问题,因此您可能需要 2Captcha 这样的服务来绕过验证码。
- IP 屏蔽: 为防止您的 IP 被封,可考虑使用 ScraperAPI 等代理服务或轮换 IP 地址。
第 9 步:搜索更多类别
该脚本可以轻松修改,以便从其他类别中抓取畅销书页面。只需将 main() 函数中的 URL 替换为您希望抓取的类别 URL 即可。
例如,要抓取 "图书 "畅销书页面,请将 URL 更改为
url = "https://www.amazon.com/Best-Sellers-Books/zgbs/books/"
步骤 10:使用亚马逊抓取 API(替代方法)
如果您在使用传统网络刮擦时遇到太多难题,您可以使用亚马逊刮擦 API。这些 API 为从亚马逊收集数据提供了更简单、更可靠的方法。
例如,亚马逊畅销产品抓取 API 允许您抓取畅销榜数据,而无需担心 IP 封禁或验证码。以下是一个如何使用它的示例:
import requests
def scrape_amazon_api():
payload = {
"source": "amazon_bestsellers",
"domain": "com",
"query": "284507",
"render": "html",
"start_page": 1,
"parse": True,
}
response = requests.post("https://realtime.oxylabs.io/v1/queries", json=payload, auth=("USERNAME", "PASSWORD"))
data = response.json()
# Process the data and save it to CSV
products = data["results"][0]["content"]["results"]
df = pd.DataFrame(products)
df.to_csv("amazon_products_api.csv"。, index=False)
scrape_amazon_api()
结论
使用 Python 抓取亚马逊畅销书页面为研究、分析和竞争情报收集产品数据提供了一种宝贵的方法。虽然使用 Selenium 的传统网页抓取方法很有效,但它们也面临着诸如速率限制和验证码等挑战。要克服这些障碍,您可以采用旋转代理等高级技术,或使用专为大规模数据收集而设计的专门的刮擦 API。

