百思买 (Best Buy) 由理查德·舒尔茨 (Richard M. Schulze) 和加里·斯莫利亚克 (Gary Smoliak) 于 1966 年创立,现已成为电子零售领域的主导企业。最初是明尼苏达州圣保罗的一家小商店,现已发展成为一家零售巨头,拥有超过 全美 1,000 家商店。百思买提供各种消费电子产品、电器和娱乐产品,使其成为科技爱好者和日常消费者的一站式商店。

截至 2023 年 131.9 月,该网站已记录来自全球不同角落的 XNUMX 亿次访问,凸显了其作为数字市场的重要性。百思买丰富的产品组合及其网站的动态特性使其成为数据提取的一个引人注目的舞台。

百思买统计

为什么要从百思买抓取数据?答案在于大量有待发现的见解。随着大量用户浏览其数字渠道,百思买成为趋势、定价动态和消费者偏好的丰富来源。无论您是市场研究员、定价策略师还是技术爱好者,抓取百思买的能力都可以为您打开获取大量信息的大门,从而帮助您做出明智的决策和战略规划。

目录

  1. 了解百思买网站
  • BestBuy.com SERP 布局
  • 抓取的关键要素
  • 百思买数据用例
  1. 设置您的环境
  • 安装Python和必要的库
  • 选择开发 IDE
  1. 使用 Python DIY 方法
  • 使用请求库获取 HTML
  • 检查 Best Buy 网站的 CSS 选择器
  • 使用BeautifulSoup进行HTML解析
  • DIY 方法的缺点
  1. 使用 Crawlbase 抓取 API 进行百思买
  • Crawlbase 注册和 API 令牌
  • 使用 Crawlbase 库访问 Crawling API
  • 轻松提取百思买产品数据
  • 处理分页
  1. 最后的思考
  2. 常见问题解答

了解百思买网站

Best Buy 的网站 BestBuy.com 呈现了一个结构化且动态的环境,为那些冒险进行网络抓取的人提供了有价值的信息。

BestBuy.com SERP 布局

将 BestBuy.com 想象为一个组织良好的数字目录。就像报纸有标题、主要故事和侧栏一样,百思买的搜索引擎结果页面结构遵循精心设计的格式。

百思买搜索引擎结果页面
  • 产品展示柜:就像报纸上的主要故事,向您展示与您搜索的内容相关的最好和最受欢迎的产品。
  • 搜索栏:这就像报纸上的大标题。您可以使用它来输入您想要在 BestBuy.com 上查找的内容。
  • 搜索:这些就像侧面有组织的部分。它们可以让您选择品牌、价格范围和客户评级等内容,从而帮助您缩小搜索范围。它使您更容易找到您想要的东西。
  • 人们也/经常查看:这部分位于主要产品展示旁边。它向您展示像您一样的人看过或购买过的其他产品。这就像从其他购物者那里获取建议来帮助您发现新事物一样。
  • 页脚:这是在底部,就像报纸的底部一样。它包含百思买网站不同部分的链接以及有关政策和条款的信息。这就像您的购物之旅的终点,包含您可能需要的一切。

了解这种布局使我们的百思买刮刀能够有效地在虚拟通道中导航。

抓取的关键要素

现在,了解了百思买的 SERP 布局,让我们确定提取的基本数据点:

  1. 产品列表:我们抓取百思买任务的主要重点是获取与搜索相关的产品列表。
  2. 产品名称:正如报纸的标题可以让您快速了解主要故事一样,产品名称也是每个列出项目的标题。
  3. 产品说明:在每个产品名称下方,用户通常会找到一个简短的描述或片段,提供对产品功能的深入了解,而无需单击它。
  4. 经常查看的产品:此部分显示其他购物者经常查看的产品。它就像来自在线社区的推荐,根据流行的选择为用户提供额外的选择。
  5. 促销内容:有时,初始结果可能包括促销内容。将这些视为促销并将其与自然列表区分开来至关重要。

了解百思买的 SERP 数据点可以指导我们的抓取工作,使我们能够有效地从百思买的数字货架收集相关信息。

百思买数据用例

我们从百思买网站获得的信息非常有用,并且可以通过多种不同方式使用。让我们看一些有趣的例子:

百思买数据用例
  1. 市场分析:了解定价趋势、消费者偏好和品牌知名度,以做出明智的市场决策。
  2. 竞争力定价 :通过深入了解竞争对手的定价策略和市场定价动态来保持竞争力。
  3. 技术更新:随时了解科技爱好者的最新小工具、创新和产品发布。
  4. 消费者行为分析:通过分析消费者如何与产品互动以及对促销活动的反应来制定营销策略。
  5. 库存优化:利用有关产品可用性、库存水平和需求趋势的实时信息,有效管理库存。

了解这些用例凸显了网络抓取在从百思买数字市场提取可操作信息方面的实用性和重要性。

设置您的环境

为了开始您的网络抓取之旅,让我们建立一个简化流程的环境。以下是帮助您入门的步骤:

安装Python和必要的库

首先安装 Python,它是网页抓取任务的强大工具。参观 Python官方网站,下载最新版本,然后按照安装说明进行操作。 Python 启动并运行后,就可以为其配备网络抓取的基本库了:

  • 请求库:这个多功能库简化了 HTTP 请求,使您可以轻松检索网页。使用以下命令安装它:
1
点安装请求
  • 美丽的汤:Beautiful Soup 是一个强大的 HTML 解析器,有助于从 HTML 和 XML 文件中提取数据。使用以下命令安装它:
1
点安装beautifulsoup4
  • 抓取库:要利用 Crawlbase Crawling API 的高级功能,请安装 Crawlbase 库。使用以下命令安装它:
1
点安装爬虫库

选择开发 IDE

选择正确的集成开发环境 (IDE) 可以让您的编码体验更加愉快。以下是一些需要考虑的选项:

  • Visual Studio Code (VSCode):一个用户友好且功能丰富的代码编辑器。从 VSCode 官方网站.
  • PyCharm:具有高级功能的强大 Python IDE。您可以下载社区版 点击此处.
  • Google Colab:一个在线平台,可让您在云中协作编写和运行 Python 代码。通过访问它 谷歌合作实验室.

一旦你安装了 Python 并设置了所需的库,并准备好了你选择的编码工具,你就可以顺利地抓取百思买了。现在让我们进入编码部分并从 BestBuy.com 获取有价值的数据。

使用 Python DIY 方法

在我们的示例中,我们重点关注从百思买网站抓取与“i Phone”相关的数据。让我们把这个过程分解成几个容易理解的块:

使用请求库获取 HTML

利用请求库的强大功能来启动您的旅程。这个方便的 Python 模块充当您的虚拟信使,允许您与百思买的服务器对话。只需几行代码,您就可以从网站获取 HTML 内容,为数据提取奠定基础。

1
2
3
4
5
6
7
8
9
10
11
12
13
进口 要求
urllib.parse 进口 报价

网址= f'https://www.bestbuy.com/site/searchpage.jsp?st=${引用(“iPhone”)}'
标头= {'用户代理': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/122.0'}

响应 = requests.get(url, headers=headers)

if 响应.status_code == 200:
html_content = 响应. 文本
打印(html_内容)
其他:
打印(f'无法检索 HTML 内容。状态代码: {响应.status_code}')

启动您喜欢的文本编辑器或 IDE,复制提供的代码,并将其存储在 Python 文件中。作为插图,标记它 bestbuy_scraper.py.

执行脚本:

启动终端或命令提示符并遍历到您保存的文件夹 bestbuy_scraper.py。使用以下命令触发脚本:

1
python bestbuy_scraper.py

按 Enter 后,您的脚本就会启动,向 Best Buy 网站发送请求,获取 HTML 内容,并将其显示在终端屏幕上,见证这一奇迹。

百思买抓取的 HTML

检查 Best Buy 网站的 CSS 选择器

百思买 SERP 检查
  1. 打开开发者工具:在浏览器中右键单击网页并选择“检查”(或“检查元素”)。此操作将揭开开发人员工具的面纱,授予深入研究 HTML 结构的访问权限。
  2. 遍历 HTML 元素:在开发人员工具领域内,导航 HTML 元素以精确定位指定用于抓取的特定数据。寻找与所需信息相关的独特标识符、类别或标签。
  3. 精确定位 CSS 选择器:记下与感兴趣的元素对齐的 CSS 选择器。这些选择器成为 Python 脚本的重要路标,指导它发现和收获令人垂涎的数据。

使用 BeautifulSoup 进行 HTML 解析

一旦您掌握了 HTML 内容和 CSS 选择器,就可以引入 BeautifulSoup 了。这个 Python 库是您导航和理解 HTML 结构的助手。借助它的帮助,您可以无缝地查明并提取相关信息。

例如,我们将提取基本细节,例如 产品标题、评级、评论数、价格和 URL 链接 (产品页面 URL)指定百思买搜索页面上列出的每个产品。让我们扩展之前的脚本并从 HTML 中抓取此信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
进口 要求
urllib.parse 进口 报价
bs4 进口 美丽汤
进口 JSON

DEF scrape_bestbuy_列表(网址):
标头= {'用户代理': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/122.0'}

响应 = requests.get(url, headers=headers)

搜索结果 = []

if 响应.status_code == 200:
html_content = 响应. 文本
汤 = BeautifulSoup(html_content, 'html.parser')

产品=汤.选择('ol.sku-item-list li.sku-item')

对于 产品展示 in 产品:
title_element = 产品.select_one('div.column-middle h4.sku-title > a')
rating_element = 产品.select_one('div.column-middle div.variation-info > div.Ratings-reviews div.c-Ratings-reviews > p')
review_count_element = 产品.select_one('.column-middle div.variation-info > div.Ratings-reviews div.c-Ratings-reviews > span.c-reviews')
价格元素 = 产品.select_one('div.column-right > div.sku-list-item-price div[data-testid="customer-price"] > span')
产品url_元素 = 产品.select_one('.column-middle h4.sku-title > a')

产品数据 = {
'标题': title_element.text.strip() if 标题元素 其他 不包含,
'评分': rating_element.text.strip() if 评级元素 其他 不包含,
“评论计数”: review_count_element.text.strip() if 评论计数元素 其他 不包含,
'价格': Price_element.text.strip() if 价格元素 其他 不包含,
“产品网址”: 'https://www.bestbuy.com' + 产品网址元素['href'] if 产品网址元素 其他 不包含
}

搜索结果.append(产品数据)

其他:
打印(f'错误: {响应.status_code}')

回报 搜索结果

DEF ():
搜索项= “iPhone”
网址= f'https://www.bestbuy.com/site/searchpage.jsp?st=${引用(搜索词)}'
结果 = scrape_bestbuy_listing(url)

打印(json.dumps(结果,缩进=2))

if __名字__ == “__主要的__”:
主()

这个脚本使用 BeautifulSoup 用于解析响应的 HTML 内容的库。它从搜索结果中每个产品对应的 HTML 元素中提取我们想要的详细信息。提取的数据被组织成字典列表,其中每个字典代表单个产品的信息。然后,该脚本以格式良好的 JSON 格式打印结果。

但是我们收到的 HTML 会包含有用的信息吗?让我们看看上面脚本的输出:

1
[]

您将看到输出为 空列表 因为百思买使用 JavaScript 在其 SERP 页面上动态生成搜索结果。当您向 Best Buy URL 发送 HTTP 请求时,HTML 响应缺少有意义的数据,从而导致缺少有价值的信息。

DIY 方法的缺点

虽然使用 Python 抓取百思买的 DIY 方法提供了实践经验,但它具有固有的缺点,可能会影响效率和可扩展性:

有限的可扩展性:

  • 大数据集效率低下:DIY 脚本在处​​理大量数据提取任务时可能会遇到效率低下的情况,从而导致性能问题。
  • 资源强度:大规模抓取可能会导致系统资源紧张,影响抓取脚本的整体性能。
  • 速率限制和 IP 阻止:如果请求超过特定阈值,百思买的服务器可能会施加速率限制、减慢或阻止请求。 DIY 方法可能难以处理速率限制,从而导致数据检索中断。

处理动态内容:

  • JavaScript 驱动元素面临的挑战:DIY 方法可能很难与严重依赖 JavaScript 的动态加载内容进行交互。
  • 数据检索不完整:在动态内容盛行的场景中,DIY 方法可能无法捕获全部信息。

虽然 DIY 方法提供了宝贵的见解和对网络抓取基础知识的更深入理解,但这些缺点强调需要更高效和可扩展的解决方案。在接下来的部分中,我们将探讨 Crawlbase 爬取 API—一个强大的解决方案,旨在克服这些限制并简化百思买的抓取流程。

使用 Crawlbase 抓取 API 进行百思买

通过 Crawlbase Crawling API 的集成,百思买可以无缝地释放网页抓取的全部潜力。 Crawlbase 爬行 API 使开发人员能够轻松高效地进行网页抓取。它是 参数 让我们能够毫不费力地处理各种抓取任务。

以下是有关利用此专用 API 功能的分步指南:

Crawlbase 注册和 API 令牌

使用 Crawling API 获取百思买数据首先要在 Crawlbase 平台上创建帐户。让我们引导您完成 Crawlbase 的帐户设置过程:

  1. 导航到抓取基地:打开网络浏览器并前往 Crawlbase 网站 注册 页面来启动您的注册之旅。
  2. 提供您的凭证:输入您的电子邮件地址并为您的 Crawlbase 帐户创建密码。确保您准确填写必要的详细信息。
  3. 验证程序:提交您的详细信息后,您的收件箱中可能会收到一封验证电子邮件。请注意并完成电子邮件中概述的验证步骤。
  4. 登录:验证您的帐户后,返回 Crawlbase 网站并使用您刚刚创建的凭据登录。
  5. 保护您的 API 令牌:访问 Crawlbase Crawling API 需要 API 令牌,您可以在 账户文件.

快速注意:Crawlbase 提供两种类型的令牌 - 一种是为静态网站量身定制的,另一种是为动态或 JavaScript 驱动的网站设计的。由于我们的重点是抓取百思买,因此我们将使用 JS 代币。

奖金:Crawlbase 提供初始津贴 1,000 个免费请求 对于 Crawling API,使其成为我们网络抓取探险的理想选择。

使用 Crawlbase 库访问 Crawling API

使用提供的 API 令牌将 Crawlbase 库集成到您的 Python 环境中。 Crawlbase 库充当桥梁,将您的 Python 脚本与 Crawling API 的强大功能连接起来。提供的代码片段演示了如何通过 Crawlbase Python 库初始化和使用 Crawling API。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 爬行基地 进口 抓取API
urllib.parse 进口 报价

API_TOKEN = 'YOUR_CRAWLBASE_JS_TOKEN'
爬行 API = 爬行 API({'令牌':API_TOKEN})

网址= f'https://www.bestbuy.com/site/searchpage.jsp?st=${引用(“iPhone”)}'

响应=crawling_api.get(url)

if 回复[“标题”]['pc_status'] == '200':
html_内容=响应['身体']。解码('utf-8')
打印(html_内容)
其他:
打印(f"无法获取页面。Crawlbase 状态代码: {回复[“标题”]['pc_status']}")

Crawlbase 平台上提供了 Crawling API 的详细文档。你可以阅读它 点击此处。如果您想了解有关 Crawlbase Python 库的更多信息并查看其使用的其他示例,您可以找到文档 点击此处.

轻松提取目标产品数据

借助 Crawlbase 抓取 API,获取有关 Best Buy 产品的详细信息变得简单。通过使用 JS 令牌并调整 ajax_wait 和 page_wait 等 API 设置,我们可以处理 JavaScript 渲染。让我们通过引入 Crawling API 来增强我们的 DIY 脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 爬行基地 进口 抓取API
urllib.parse 进口 报价
bs4 进口 美丽汤
进口 JSON

DEF scrape_bestbuy_列表(API、网址):
选项= {
'用户代理': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/122.0',
'ajax_等待': '真的',
'页面等待': 5000
}

响应 = api.get(url, 选项)

搜索结果 = []

if 回复[“标题”]['pc_status'] == '200':
html_内容=响应['身体']。解码('utf-8')
汤 = BeautifulSoup(html_content, 'html.parser')

产品=汤.选择('ol.sku-item-list li.sku-item')

对于 产品展示 in 产品:
title_element = 产品.select_one('div.column-middle h4.sku-title > a')
rating_element = 产品.select_one('div.column-middle div.variation-info > div.Ratings-reviews div.c-Ratings-reviews > p')
review_count_element = 产品.select_one('.column-middle div.variation-info > div.Ratings-reviews div.c-Ratings-reviews > span.c-reviews')
价格元素 = 产品.select_one('div.column-right > div.sku-list-item-price div[data-testid="customer-price"] > span')
产品url_元素 = 产品.select_one('.column-middle h4.sku-title > a')

产品数据 = {
'标题': title_element.text.strip() if 标题元素 其他 不包含,
'评分': rating_element.text.strip() if 评级元素 其他 不包含,
“评论计数”: review_count_element.text.strip() if 评论计数元素 其他 不包含,
'价格': Price_element.text.strip() if 价格元素 其他 不包含,
“产品网址”: 'https://www.bestbuy.com' + 产品网址元素['href'] if 产品网址元素 其他 不包含
}

搜索结果.append(产品数据)

其他:
打印(f'错误: {回复[“标题”][“电脑状态”]}')

回报 搜索结果

DEF ():
API_TOKEN = 'YOUR_CRAWLBASE_JS_TOKEN'
爬行 API = 爬行 API({'令牌':API_TOKEN})

搜索项= “iPhone”
网址= f'https://www.bestbuy.com/site/searchpage.jsp?st=${引用(搜索词)}'
结果 = scrape_bestbuy_listing(crawling_api, url)

打印(json.dumps(结果,ensure_ascii=, 缩进=2))

if __名字__ == “__主要的__”:
主()

示例输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
[
{
“标题”: “Apple - iPhone 14 128GB(已解锁)- 午夜”,
“评分”: “评分 4.9 星(满分 5 星),有 155 条评论”,
「评论数」: “(155)”,
“价钱”: “ $ 729.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-iphone-14-128gb-unlocked-midnight/6507555.p?skuId=6507555”
},
{
“标题”: “Apple - iPhone 14 Plus 128GB(无锁版)- 午夜”,
“评分”: “评分 4.9 星(满分 5 星),有 82 条评论”,
「评论数」: “(82)”,
“价钱”: “ $ 829.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-iphone-14-plus-128gb-unlocked-midnight/6507549.p?skuId=6507549”
},
{
“标题”: “Apple - iPhone SE(第 3 代)64GB(已解锁)”,
“评分”: “评分 4.5 星(满分 5 星),有 111 条评论”,
「评论数」: “(111)”,
“价钱”: “ $ 429.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-iphone-se-3rd- Generation-64gb-unlocked/6507470.p?skuId=6507470”
},
{
“标题”: “Apple - iPhone 13 5G 128GB(已解锁)- 午夜”,
“评分”: “评分 4.8 星(满分 5 星),有 878 条评论”,
「评论数」: “(878)”,
“价钱”: “ $ 629.99”,
“产品网址”: "https://www.bestbuy.com/site/apple-iphone-13-5g-128gb-unlocked-midnight/6417788.p?skuId=6417788"
},
{
“标题”: “Apple - 二手 iPhone SE (2020) 64GB(已解锁)- 红色”,
“评分”: “评分 4.2 星(满分 5 星),有 471 条评论”,
「评论数」: “(471)”,
“价钱”: “ $ 189.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-pre-owned-iphone-se-2020-64gb-unlocked-red/6561418.p?skuId=6561418”
},
{
“标题”: “Apple - 二手 iPhone 11 128GB(已解锁)- 黑色”,
“评分”: “评分 4.2 星(满分 5 星),有 156 条评论”,
「评论数」: “(156)”,
“价钱”: “ $ 359.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-pre-owned-iphone-11-128gb-unlocked-black/6505707.p?skuId=6505707”
},
{
“标题”: “Apple - 二手 iPhone 13 Pro Max 5G 128GB(已解锁)- 石墨色”,
“评分”: “评分 4.7 星(满分 5 星),有 27 条评论”,
「评论数」: “(27)”,
“价钱”: “ $ 799.99”,
“产品网址”: "https://www.bestbuy.com/site/apple-pre-owned-iphone-13-pro-max-5g-128gb-unlocked-graphite/6563055.p?skuId=6563055"
},
{
“标题”: “Apple - 二手 iPhone XR 128GB(已解锁)- 黑色”,
“评分”: “评分 4.3 星(满分 5 星),有 1350 条评论”,
「评论数」: “(1,350)”,
“价钱”: “ $ 259.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-pre-owned-iphone-xr-128gb-unlocked-black/6398614.p?skuId=6398614”
},
{
“标题”: “Apple - 二手 iPhone X 256GB(已解锁)- 银色”,
“评分”: “评分 3.8 星(满分 5 星),有 1026 条评论”,
「评论数」: “(1,026)”,
“价钱”: “ $ 259.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-pre-owned-iphone-x-256gb-unlocked-silver/6394666.p?skuId=6394666”
},
{
“标题”: “Apple - 二手 iPhone 11 Pro 256GB(已解锁)- 金色”,
“评分”: “评分 4 星(满分 5 星),有 79 条评论”,
「评论数」: “(79)”,
“价钱”: “ $ 379.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-pre-owned-iphone-11-pro-256gb-unlocked-gold/6502951.p?skuId=6502951”
},
{
“标题”: “Apple - 二手 iPhone 11 64GB(已解锁)- 白色”,
“评分”: “评分 4.4 星(满分 5 星),有 547 条评论”,
「评论数」: “(547)”,
“价钱”: “ $ 329.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-pre-owned-iphone-11-64gb-unlocked-white/6505705.p?skuId=6505705”
},
{
“标题”: “Apple - 二手 iPhone SE (2020) 128GB(已解锁)- 红色”,
“评分”: “评分 4.2 星(满分 5 星),有 131 条评论”,
「评论数」: “(131)”,
“价钱”: “ $ 219.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-pre-owned-iphone-se-2020-128gb-unlocked-red/6495540.p?skuId=6495540”
},
{
“标题”: “Apple - 二手 iPhone XR 64GB(已解锁)- 蓝色”,
“评分”: “评分 4.3 星(满分 5 星),有 1351 条评论”,
「评论数」: “(1,351)”,
“价钱”: “ $ 249.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-pre-owned-iphone-xr-64gb-unlocked-blue/6398597.p?skuId=6398597”
},
{
“标题”: “Apple - 二手 iPhone 14 5G 128GB(已解锁)- 蓝色”,
“评分”: “评分 4.9 星(满分 5 星),有 8 条评论”,
「评论数」: “(8)”,
“价钱”: “ $ 629.99”,
“产品网址”: "https://www.bestbuy.com/site/apple-pre-owned-iphone-14-5g-128gb-unlocked-blue/6558737.p?skuId=6558737"
},
{
“标题”: “Apple - 二手 iPhone 13 5G 128GB(已解锁)- 午夜”,
“评分”: “评分 5 星(满分 5 星),有 2 条评论”,
「评论数」: “(2)”,
“价钱”: “ $ 529.99”,
“产品网址”: "https://www.bestbuy.com/site/apple-pre-owned-iphone-13-5g-128gb-unlocked-midnight/6562355.p?skuId=6562355"
},
{
“标题”: “Apple - Geek Squad 认证翻新 iPhone 11,配备 64GB 内存手机(无锁版)- 黑色”,
“评分”: “评分 2.3 星(满分 5 星),有 3 条评论”,
「评论数」: “(3)”,
“价钱”: “ $ 299.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-geek-squad-certified-refurbished-iphone-11-with-64gb-memory-cell-phone-unlocked-black/6563229.p?skuId=6563229”
},
{
“标题”: “Apple - 二手 iPhone 12 5G 64GB(已解锁)- 蓝色”,
“评分”: “评分 4.3 星(满分 5 星),有 267 条评论”,
「评论数」: “(267)”,
“价钱”: “ $ 379.99”,
“产品网址”: "https://www.bestbuy.com/site/apple-pre-owned-iphone-12-5g-64gb-unlocked-blue/6510035.p?skuId=6510035"
},
{
“标题”: “Apple - 二手 iPhone XS Max 64GB(已解锁)- 金色”,
“评分”: “评分 4.1 星(满分 5 星),有 38 条评论”,
「评论数」: “(38)”,
“价钱”: “ $ 309.99”,
“产品网址”: “https://www.bestbuy.com/site/apple-pre-owned-iphone-xs-max-64gb-unlocked-gold/6463650.p?skuId=6463650”
}
]

处理分页

从百思买的搜索结果中收集详细信息意味着要浏览多个页面,每个页面都会显示一批产品列表。为了确保我们获得所有需要的信息,我们需要处理分页。这涉及浏览结果页面并在必要时请求更多数据。

在百思买的网站上,他们使用 &cp URL 中的参数用于处理分页。它告诉我们当前的页码。例如, &cp=1 表示第一页,并且 &cp=2 指向第二页。该参数帮助我们有条不紊地从不同页面收集数据并创建完整的数据集进行分析。

让我们升级当前的脚本以顺利管理分页。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 爬行基地 进口 抓取API
urllib.parse 进口 报价
bs4 进口 美丽汤

DEF scrape_bestbuy_列表(API、网址):
搜索结果 = []
选项= {
'用户代理': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/122.0',
'ajax_等待': '真的',
'页面等待': 5000
}

# 遍历页面
# 假设你想抓取前 5 页
对于 页码 in 范围(1, 6):
# 将当前页码添加到 URL 中
页面网址 = f'{网址}&cp={页码}'

响应 = api.get(page_url, 选项)

if 回复[“标题”]['pc_status'] == '200':
html_内容=响应['身体']。解码('utf-8')
汤 = BeautifulSoup(html_content, 'html.parser')

# 如果页码无效并且没有更多结果
if 汤.select_one('div.shop-零搜索结果> div.无结果')
打破

产品=汤.选择('ol.sku-item-list li.sku-item')

对于 产品展示 in 产品:
title_element = 产品.select_one('div.column-middle h4.sku-title > a')
rating_element = 产品.select_one('div.column-middle div.variation-info > div.Ratings-reviews div.c-Ratings-reviews > p')
review_count_element = 产品.select_one('.column-middle div.variation-info > div.Ratings-reviews div.c-Ratings-reviews > span.c-reviews')
价格元素 = 产品.select_one('div.column-right > div.sku-list-item-price div[data-testid="customer-price"] > span')
产品url_元素 = 产品.select_one('.column-middle h4.sku-title > a')

产品数据 = {
'标题': title_element.text.strip() if 标题元素 其他 不包含,
'评分': rating_element.text.strip() if 评级元素 其他 不包含,
“评论计数”: review_count_element.text.strip() if 评论计数元素 其他 不包含,
'价格': Price_element.text.strip() if 价格元素 其他 不包含,
“产品网址”: 'https://www.bestbuy.com' + 产品网址元素['href'] if 产品网址元素 其他 不包含
}

搜索结果.append(产品数据)

其他:
打印(f'错误: {回复[“标题”][“电脑状态”]}')
打破 # 出错时退出循环

回报 搜索结果

DEF ():
API_TOKEN = 'YOUR_CRAWLBASE_JS_TOKEN'
爬行 API = 爬行 API({'令牌':API_TOKEN})

搜索项= “iPhone”
网址= f'https://www.bestbuy.com/site/searchpage.jsp?st=${引用(搜索词)}'
结果 = scrape_bestbuy_listing(crawling_api, url)

# 进一步处理抓取的结果

if __名字__ == “__主要的__”:
主()

Tips:: 爬虫库 提供许多与我们的爬行 API 兼容的即用型抓取工具。在我们的中探索更多详细信息 文件。此外,我们还根据您的具体要求量身定制解决方案。我们的专业团队可以为您设计专属的解决方案。这意味着您无需持续监控网站详细信息和 CSS 选择器。让 Crawlbase 为您处理这件事,让您专注于实现您的目标。联系我们 点击此处.

最后的思考

在抓取百思买产品数据时,简单性和有效性非常重要。虽然 DIY 方法需要一定的学习曲线,但 Crawlbase 爬行 API 成为了明智的选择。告别对可靠性和可扩展性的担忧;采用 Crawlbase 爬行 API,获得简单、可靠且可扩展的解决方案,轻松抓取百思买 (Best Buy) 信息。

如果您渴望探索从各种电子商务平台进行抓取,请考虑深入研究这些详细指南:

📜 如何抓取亚马逊

📜 如何抓取目标

📜 如何刮沃尔玛

📜 如何抓取全球速卖通

📜 如何抓取 Flipkart

网页抓取可能会带来挑战,而您的成功至关重要。如果您需要额外的指导或遇到障碍,请随时与我们联系。我们的 敬业的团队 在这里为您的网络抓取世界之旅提供支持。快乐刮擦!

常见问题解答

如果以负责任的方式进行并遵守网站的服务条款,百思买的网络抓取通常是合法的。确保您查看并遵守百思买的政策,以维持道德的抓取行为。如果抓取导致未经授权的访问、过多的请求或违反任何适用的法律,则可能会产生法律影响。尊重网站指南和适用的法律法规来进行网络抓取至关重要。

问:使用 Crawlbase 抓取 API 抓取 Best Buy 时如何管理动态内容?

管理动态内容是使用 Crawlbase 抓取 API 抓取 Best Buy 的一个关键方面。该 API 旨在处理通过 JavaScript 加载的动态元素,确保全面的数据检索。利用 page_wait 和 ajax_wait 等参数来导航和捕获动态生成的内容,确保您的抓取工作涵盖百思买网页的所有方面。此功能增强了抓取脚本的有效性,使您能够获取完整的数据集,包括初始页面加载后可能加载的内容。

问:为什么有人会从百思买 SERP 中抓取产品数据?

从百思买 SERP(搜索引擎结果页面)中抓取产品数据有多种用途。企业和研究人员可以抓取这些数据来监控价格波动、分析市场趋势或收集竞争情报。它提供了有关产品可用性、客户评论和整体市场动态的宝贵见解,有助于决策过程。 Crawlbase 爬行 API 可以无缝地促进这种抓取,确保为不同目的可靠且高效地提取数据。

问:Crawlbase 的爬虫 API 采取哪些措施来避免 IP 封锁?

Crawlbase 的抓取 API 包含多项战略措施,以最大程度地降低 IP 封锁风险并确保无缝抓取体验:

  • 智能IP轮换:API动态 轮换 IP 地址,防止过度使用单个IP并降低被阻止的可能性。
  • 反机器人措施处理:Crawlbase 能够导航反机器人措施,增强匿名性并减少被发现的机会。
  • 智能速率限制:API 智能管理请求速率,防止速率限制造成的中断,并确保数据检索的稳定流。这些功能共同有助于实现更顺畅、不间断的抓取过程,同时降低网站检测和 IP 封锁的风险。