Noon 是中东最大的电子商务平台之一,在阿联酋、沙特阿拉伯和埃及拥有数百万客户。Noon 拥有庞大的产品目录和数千笔每日交易。抓取 Noon 数据有助于企业跟踪价格、竞争对手和市场洞察。

但抓取 Noon 很难。该网站具有动态内容、基于 JavaScript 的元素和可以阻止传统抓取方法的反机器人措施。我们将使用 爬虫库 Crawling API 在应对这些挑战的同时提取搜索结果和产品详细信息。

本教程将向您展示如何使用 Python 抓取 Noon 数据,并提供分步示例进行结构化数据提取。

开始吧!

目录

  1. 为什么要抓取 Noon 数据?
  2. 从 Noon 中提取的关键数据点
  3. 中午吃饭时的挑战
  4. 设置 Python 环境
  • 安装 Python 和所需的库
  • 选择 IDE
  1. 抓取 Noon 搜索结果
  • 检查 HTML 中的 CSS 选择器
  • 编写 Noon 搜索列表抓取工具
  • 处理分页
  • 将数据存储在 CSV 文件中
  • 完整代码示例
  1. 抓取 Noon 产品页面
  • 检查 HTML 中的 CSS 选择器
  • 编写产品页面抓取工具
  • 将数据存储在 CSV 文件中
  • 完整代码示例
  1. 总结
  2. 常见问题

为什么要抓取 Noon 数据?

该公司的产品目录涵盖电子产品、时尚、美容、杂货等,是该地区电子商务行业的主要参与者。

以下是人们抓取 Noon 的原因:

  • 价格跟踪:监控竞争对手的价格并调整您的定价策略。
  • 产品供货:跟踪库存水平和需求趋势。
  • 客户洞察:分析评论、评级和产品描述以了解消费者偏好。
  • 搜索引擎优化和营销策略:获取产品元数据并优化您的列表以提高可见性。
  • 销售和折扣监控:跟踪正在进行的促销和特价优惠。

从 Noon 中提取的关键数据点

Noon 拥有数百万种不同类别的产品,因此为了充分利用抓取功能,Noon 会专注于最重要的数据点,以帮助您做出业务决策并获得竞争优势。下图显示了一些需要关注的数据点。

该图显示了从 Noon 抓取的重要数据点

中午吃饭时的挑战

抓取 Noon 数据可能很好,但您可能会遇到一些挑战。以下是一些常见的 Noon 抓取挑战及其解决方案:

  • 动态内容(JavaScript 渲染):Noon 使用 JavaScript 加载动态内容,因此更难抓取。如果没有适当的工具,内容可能根本无法加载或加载不正确,从而导致数据不完整或错误。

  • 解决方案: 使用 爬虫库 Crawling API,它可以无缝处理 JavaScript 渲染,您可以获得完整的页面内容,包括产品详细信息和价格等动态加载的元素。

  • 反机器人措施:Noon 等网站采用了 CAPTCHA 和速率限制等反机器人技术来防止自动抓取。

  • 解决方案: 爬虫库 Crawling API 通过轮换 IP 地址、解决 CAPTCHA 和模仿人类的浏览行为来绕过这些保护,这样您在抓取时就不会被阻止。

  • 复杂分页:浏览搜索结果和产品页面涉及多页数据。正确处理分页非常重要,这样您才不会错过任何内容。

  • 解决方案: 爬虫库 Crawling API 提供不同的参数来处理分页,以便您可以抓取所有搜索结果页面或产品列表,而无需手动浏览它们。

  • 法律和道德问题:抓取任何网站(包括 Noon)都必须遵守法律和道德准则。您必须尊重网站的 robots.txt 文件、限制抓取频率并避免抓取敏感信息。

  • 解决方案:始终遵循负责任的抓取最佳实践,例如使用适当的延迟间隔和匿名化您的请求。

通过使用正确的工具(例如 Crawlbase)并遵循道德抓取实践,您可以克服这些挑战并有效地抓取 Noon。

设置 Python 环境

在开始抓取 Noon 数据之前,您需要设置您的环境。这包括安装 Python、所需的库以及选择正确的 IDE 进行编码。

安装 Python 和所需的库

如果你没有安装 Python,请从以下位置下载最新版本 蟒蛇网 并按照您的操作系统的安装说明进行操作。

接下来,通过运行以下命令安装所需的库:

1
pip 安装 crawlbase beautifulsoup4 pandas
  • 爬虫库 – 绕过反机器人保护并抓取 JavaScript 较多的页面。
  • 美丽汤 – 从 HTML 中提取结构化数据。
  • 熊猫 – 以 CSV 格式处理和存储数据。

选择用于爬取数据的 IDE

选择正确的集成开发环境 (IDE) 可使抓取工作更加轻松。以下是一些不错的选择:

  • VS代码 – 轻量且功能丰富,具有出色的 Python 支持。
  • PyCharm – 强大的调试和自动化功能。
  • Jupyter笔记本 – 非常适合交互式抓取和 快速数据分析.

安装 Python、设置库并准备好 IDE 后,您现在就可以开始抓取 Noon 数据了。

抓取 Noon 搜索结果

从 Noon 抓取搜索结果将为您提供产品名称、价格、评分和 URL。这些数据可用于竞争分析、价格监控和市场研究。在​​本节中,我们将指导您完成从 Noon 抓取搜索结果、处理分页以及将数据存储在 CSV 文件中的过程。

检查 HTML 中的 CSS 选择器

在开始编写抓取工具之前,我们需要检查 Noon 搜索结果页面的 HTML 结构。通过这样做,我们可以找到 CSS 选择器来提取产品详细信息。

  1. 在MyCAD中点击 软件更新 中午网 并搜索产品(例如“智能手机”)。
  2. 右键单击任何产品,然后在 Chrome 开发者工具中选择“检查”或“检查元素”。
屏幕截图显示了 Noon 搜索结果的 HTML 结构
  1. 识别以下关键 HTML 元素:
  • 产品名称: 发现在 <div data-qa="product-name"> 标签。
  • 价格: 发现在 <strong class="amount"> 标签。
  • 货币: 发现在 <span class="currency"> 标签。
  • 评价: 发现在 <div class="dGLdNc"> 标签。
  • 产品网址: 发现在 href 的属性 <a> 标签。

一旦确定了相关元素及其 CSS 类或 ID,就可以继续编写抓取工具。

编写 Noon 搜索列表抓取工具

现在我们已经检查了 HTML 结构,我们可以编写一个 Python 脚本来从 Noon 抓取产品数据。我们将使用 Crawlbase Crawling API 用于绕过反机器人措施,并使用 BeautifulSoup 来解析 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
 爬行基地 进口 抓取API
bs4 进口 美丽汤

# 初始化Crawlbase API
爬行 API = 爬行 API({'令牌': 'YOUR_CRAWLBASE_TOKEN'})

DEF scrape_noon_search(查询、页面):
"""从 Noon 抓取搜索结果。"""
网址= f"https://www.noon.com/uae-en/search/?q={询问}&页面={页}"
选项= {'ajax_等待': '真的', '页面等待': '5000'}

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

if 回复[“标题”]['pc_status'] == '200':
回报 回复['身体']。解码('utf-8')
其他:
打印(f“无法获取页面 {页}.")
回报 没有

DEF 提取产品数据(HTML):
"""从 Noon 搜索结果中提取产品详细信息。"""
汤 = BeautifulSoup(html, 'html.parser')
产品 = []

项目 in 汤.选择('div.grid > span.productContainer'):
标题 = 项目.select_one('div[data-qa="产品名称"]').text.strip() if item.select_one('div[data-qa="产品名称"]') 其他 ''
价格 = item.select_one(‘strong.amount’).text.strip() if item.select_one(‘strong.amount’) 其他 ''
货币 = item.select_one(‘跨度.货币’).text.strip() if item.select_one(‘跨度.货币’) 其他 ''
评级=项目.select_one(‘div.dGLdNc’).text.strip() if item.select_one(‘div.dGLdNc’) 其他 ''
链接 = f“https://www.noon.com{项目.select_one('一种')['href']}" if item.select_one('一种') 其他 ''

if 标题 价格:
产品.附加({
'标题': 标题,
'价格': 价格,
'货币': 货币,
'评分': 评分,
‘网址’: 关联
})

回报 产品

我们首先使用令牌初始化 CrawlingAPI 类以进行身份​​验证。 scrape_noon_search 函数根据查询和页码从 Noon 获取搜索结果页面的 HTML,处理 AJAX 内容加载。 extract_product_data 函数使用 BeautifulSoup 解析 HTML,提取产品标题、价格、评级和 URL 等详细信息。然后,它将这些数据返回到结构化的字典列表中。

处理分页

Noon 的搜索结果跨越多个页面。要抓取所有数据,我们需要处理分页并循环遍历每个页面。我们可以这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DEF scrape_all_pages(查询,max_pages):
"""抓取多页搜索结果。"""
所有产品 = []

in 范围(1, 最大页数 + 1):
打印(f"抓取页面 {页}...“)
html = scrape_noon_search(查询,页面)

if 的HTML:
产品 = 提取产品数据 (html)
if 而不去 产品:
打印(“未找到更多结果。停止。”)
打破
all_products.extend(产品)
其他:
打破

回报 所有产品

此函数循环遍历指定数量的页面,获取并提取产品数据,直到处理完所有页面。

将数据存储在 CSV 文件中

提取产品详细信息后,我们需要以结构化格式存储数据。最常见且易于处理的格式是 CSV。以下是保存抓取数据的代码:

1
2
3
4
5
6
7
8
9
10
11
12
进口 CSV

DEF 保存到csv(数据、文件名):
"""将抓取的数据保存到 CSV 文件。"""
键 = 数据[0].keys() if data 其他 ['标题', '价格', '评分', ‘网址’]

- open(文件名, 'w', 换行='', 编码='utf-8') as f:
writer = csv.DictWriter(f,字段名称=键)
writer.writeheader()
writer.writerows(数据)

打印(f”数据保存至 {文档名称}")

此功能将产品列表保存为 CSV 文件,以便于分析或导入其他工具。

完整代码示例

以下是用于抓取 Noon 搜索结果、处理分页并将数据存储在 CSV 文件中的完整 Python 脚本:

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
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口 CSV

# 初始化Crawlbase API
爬行 API = 爬行 API({'令牌': 'YOUR_CRAWLBASE_TOKEN'})

DEF scrape_noon_search(查询、页面):
“”“从 Noon 搜索结果中抓取产品列表。”””
网址= f"https://www.noon.com/uae-en/search/?q={询问}&页面={页}"
选项= {'ajax_等待': '真的', '页面等待': '5000'}

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

if 回复[“标题”]['pc_status'] == '200':
回报 回复['身体']。解码('utf-8')
其他:
打印(f“无法获取页面 {页}.")
回报 没有

DEF 提取产品数据(HTML):
"""从 Noon 搜索结果中提取产品详细信息。"""
汤 = BeautifulSoup(html, 'html.parser')
产品 = []

项目 in 汤.选择('div.grid > span.productContainer'):
标题 = 项目.select_one('div[data-qa="产品名称"]').text.strip() if item.select_one('div[data-qa="产品名称"]') 其他 ''
价格 = item.select_one(‘strong.amount’).text.strip() if item.select_one(‘strong.amount’) 其他 ''
货币 = item.select_one(‘跨度.货币’).text.strip() if item.select_one(‘跨度.货币’) 其他 ''
评级=项目.select_one(‘div.dGLdNc’).text.strip() if item.select_one(‘div.dGLdNc’) 其他 ''
链接 = f“https://www.noon.com{项目.select_one('一种')['href']}" if item.select_one('一种') 其他 ''

if 标题 价格:
产品.附加({
'标题': 标题,
'价格': 价格,
'货币': 货币,
'评分': 评分,
‘网址’: 关联
})

回报 产品

DEF scrape_all_pages(查询,max_pages):
"""抓取多页搜索结果。"""
所有产品 = []

in 范围(1, 最大页数 + 1):
打印(f"抓取页面 {页}...“)
html = scrape_noon_search(查询,页面)

if 的HTML:
产品 = 提取产品数据 (html)
if 而不去 产品:
打印(“未找到更多结果。停止。”)
打破
all_products.extend(产品)
其他:
打破

回报 所有产品

DEF 保存到csv(数据、文件名):
"""将抓取的数据保存到 CSV 文件。"""
键 = 数据[0].keys() if data 其他 ['标题', '价格', '评分', ‘网址’]

- open(文件名, 'w', 换行='', 编码='utf-8') as f:
writer = csv.DictWriter(f,字段名称=键)
writer.writeheader()
writer.writerows(数据)

打印(f”数据保存至 {文档名称}")

DEF ():
"""运行抓取工具的主要功能。"""
查询 = “智能手机” # 根据需要更改搜索词
最大页数 = 5 # 设置要抓取的页面数量
all_products = scrape_all_pages(查询,max_pages)
保存到 csv(所有产品, ‘中午_智能手机.csv’)

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

noon_smartphones.csv 快照:

noon_smartphones.csv 输出文件快照

抓取 Noon 产品页面

在 Noon 上抓取产品页面将为您提供所有产品详细信息,包括描述、规格和客户评论。这些数据将帮助企业优化其产品列表和客户行为。在本节中,我们将介绍检查产品页面的 HTML 结构、编写抓取工具并将数据保存到 CSV 文件的过程。

检查 HTML 中的 CSS 选择器

在编写抓取工具之前,我们需要检查产品页面的 HTML 结构,以确定要抓取的元素的正确 CSS 选择器。操作方法如下:

  1. 打开 Noon 上的产品页面(例如智能手机页面)。
  2. 右键单击产品详细信息(例如产品名称、价格、说明),然后单击 Chrome 开发者工具中的检查。
屏幕截图显示了 Noon 产品页面的 HTML 结构
  1. 寻找关键元素,例如:
  • 产品名称: 发现在 <h1 data-qa^="pdp-name-"> 标签。
  • 价格: 发现在 <div data-qa="div-price-now"> 标签。
  • 产品亮点: 发现在 <div class="oPZpQ"> 标签,特别是在无序列表内(<ul>).
  • 产品规格: 发现在 <div class="dROUvm"> 标签,在表格内 <tr> 标签包含 <td> 元素。

一旦确定了相关元素及其 CSS 类或 ID,就可以继续编写抓取工具。

编写 Noon 产品页面抓取工具

现在,让我们编写一个 Python 脚本,使用 Crawlbase 从 Noon 产品页面抓取产品详细信息 Crawling API 和BeautifulSoup。

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
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口 re

# 初始化Crawlbase API
爬行 API = 爬行 API({'令牌': 'YOUR_CRAWLBASE_TOKEN'})

DEF scrape_product_page(产品网址):
"""从 Noon 产品页面抓取产品详细信息。"""
选项= {'ajax_等待': '真的', '页面等待': '3000'}

响应 = crawling_api.get(product_url,选项)

if 回复[“标题”]['pc_status'] == '200':
回报 回复['身体']。解码('utf-8')
其他:
打印(f“无法获取产品页面: {产品网址}.")
回报 没有

DEF 提取产品详情(HTML):
"""提取名称、价格、描述和评论等详细信息。"""
汤 = BeautifulSoup(html, 'html.parser')

产品 = {}
产品['姓名'] = soup.select_one('h1[data-qa^="pdp-名称-"]').text.strip() if 汤.select_one('h1[data-qa^="pdp-名称-"]') 其他 ''
产品['价格'] = soup.select_one('div[data-qa="div-price-now"]').text.strip() if 汤.select_one('div[data-qa="div-price-now"]') 其他 ''
产品['亮点'] = soup.select_one('div.oPZpQ ul').text.strip() if 汤.select_one('div.oPZpQ ul') 其他 ''
产品['规格'] = {重新.sub(r'\s+', '',行.find_all(‘TD’)[0].text.strip()): re.sub(r'\s+', '',行.find_all(‘TD’)[1].文本.strip() in 汤.选择(‘div.dROUvm 表 tr’) if LEN(行.find_all(‘TD’)) == 2}

回报 产品展示

将数据存储在 CSV 文件中

提取产品详细信息后,我们需要将这些信息存储为 CSV 等结构化格式,以便于分析。这是一个保存抓取数据的简单函数:

1
2
3
4
5
6
7
8
9
10
11
12
进口 CSV

DEF 保存产品数据到csv(产品,文件名):
"""将产品详细信息保存到 CSV 文件。"""
键 = 产品[0].keys() if 产品 其他 ['姓名', '价格', '描述', “评论”]

- open(文件名, 'w', 换行='', 编码='utf-8') as f:
writer = csv.DictWriter(f,字段名称=键)
writer.writeheader()
writer.writerows(产品)

打印(f”数据保存至 {文档名称}")

完整代码示例

现在,让我们将所有内容组合成一个完整的脚本。 main() 该函数将抓取多个产品页面的数据并将结果存储在 CSV 文件中。

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
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口 CSV
进口 re

# 初始化Crawlbase API
爬行 API = 爬行 API({'令牌': 'YOUR_CRAWLBASE_TOKEN'})

DEF scrape_product_page(产品网址):
"""从 Noon 产品页面抓取产品详细信息。"""
选项= {'ajax_等待': '真的', '页面等待': '3000'}

响应 = crawling_api.get(product_url,选项)

if 回复[“标题”]['pc_status'] == '200':
回报 回复['身体']。解码('utf-8')
其他:
打印(f“无法获取产品页面: {产品网址}.")
回报 没有

DEF 提取产品详情(HTML):
"""提取名称、价格、描述和评论等详细信息。"""
汤 = BeautifulSoup(html, 'html.parser')

产品 = {}
产品['姓名'] = soup.select_one('h1[data-qa^="pdp-名称-"]').text.strip() if 汤.select_one('h1[data-qa^="pdp-名称-"]') 其他 ''
产品['价格'] = soup.select_one('div[data-qa="div-price-now"]').text.strip() if 汤.select_one('div[data-qa="div-price-now"]') 其他 ''
产品['亮点'] = soup.select_one('div.oPZpQ ul').text.strip() if 汤.select_one('div.oPZpQ ul') 其他 ''
产品['规格'] = {重新.sub(r'\s+', '',行.find_all(‘TD’)[0].text.strip()): re.sub(r'\s+', '',行.find_all(‘TD’)[1].文本.strip() in 汤.选择(‘div.dROUvm 表 tr’) if LEN(行.find_all(‘TD’)) == 2}

回报 产品展示

DEF 保存产品数据到csv(产品,文件名):
"""将产品详细信息保存到 CSV 文件。"""
键 = 产品[0].keys() if 产品 其他 ['姓名', '价格', '描述', “评论”]

- open(文件名, 'w', 换行='', 编码='utf-8') as f:
writer = csv.DictWriter(f,字段名称=键)
writer.writeheader()
writer.writerows(产品)

打印(f”数据保存至 {文档名称}")

DEF ():
"""主要功能为抓取产品页面。"""
产品网址 = [
'https://www.noon.com/uae-en/galaxy-s25-ai-dual-sim-silver-shadow-12gb-ram-256gb-5g-middle-east-version/N70140511V/p/?o=e12201b055fa94ee',
'https://www.noon.com/uae-en/a78-5g-dual-sim-glowing-black-8gb-ram-256gb/N70115717V/p/?o=c99e13ae460efc6b'
] # 要抓取的产品 URL 列表

产品数据 = []

网址 in 产品网址:
打印(f”刮擦 {网址}...“)
html = scrape_product_page(网址)
if 的HTML:
产品 = 提取产品详情(html)
product_data.append(产品)

保存产品数据到csv(产品数据, ‘中午产品详情.csv’)

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

noon_product_details.csv 快照:

noon_product_details.csv 输出文件快照

总结

抓取 Noon 数据对企业跟踪价格、分析竞争对手和改进产品列表非常有用。 爬虫库 Crawling API 通过处理 JavaScript 渲染和 CAPTCHA 保护使此过程更容易,以便您毫无障碍地获得完整、准确的数据。

使用 Python 和 BeautifulSoup,从 Noon 搜索结果和产品页面抓取数据非常简单。遵循道德规范并设置正确的环境,您将获得洞察力,在竞争激烈的电子商务游戏中保持领先地位。

如果您想从其他电子商务平台抓取数据,请查看这些其他指南。

📜 如何抓取亚马逊
📜 如何刮沃尔玛
📜 如何抓取全球速卖通
📜 如何抓取 Zalando
📜 从 Zoro 提取数据的简单步骤

请联系我们 支持 如果您有任何疑问,祝您抓取愉快!

常见问题

只要您遵守道德准则,网页抓取就是合法的。请务必尊重网站的 robots.txt 文件,不要用请求使服务器超载,也不要抓取敏感数据。始终确保您的抓取行为符合网站的服务条款和当地法律。

问:什么是 Crawlbase Crawling API 它对抓取 Noon 有什么帮助?

爬虫库 Crawling API 是一款帮助绕过 JavaScript 渲染和 CAPTCHA 等常见障碍的工具,可用于爬取网站。它可确保您可以从 Noon 爬取动态内容而不会被阻止。无论您是爬取产品页面还是搜索结果,Crawlbase 都会处理技术问题,让您轻松获取数据。

问:我可以使用此方法从 Noon 抓取产品价格和供货情况吗?

是的,您可以从 Noon 抓取产品价格、可用性、评级和其他重要数据。检查 HTML 结构以查找 CSS 选择器并使用 BeautifulSoap 进行 HTML 解析。使用 爬虫库 Crawling API 用于处理 JS 渲染和 CAPTCHA。