Noon 是中东最大的电子商务平台之一,在阿联酋、沙特阿拉伯和埃及拥有数百万客户。Noon 拥有庞大的产品目录和数千笔每日交易。抓取 Noon 数据有助于企业跟踪价格、竞争对手和市场洞察。
但抓取 Noon 很难。该网站具有动态内容、基于 JavaScript 的元素和可以阻止传统抓取方法的反机器人措施。我们将使用 爬虫库 Crawling API 在应对这些挑战的同时提取搜索结果和产品详细信息。
本教程将向您展示如何使用 Python 抓取 Noon 数据,并提供分步示例进行结构化数据提取。
开始吧!
目录
- 为什么要抓取 Noon 数据?
- 从 Noon 中提取的关键数据点
- 中午吃饭时的挑战
- 设置 Python 环境
- 抓取 Noon 搜索结果
- 检查 HTML 中的 CSS 选择器
- 编写 Noon 搜索列表抓取工具
- 处理分页
- 将数据存储在 CSV 文件中
- 完整代码示例
- 抓取 Noon 产品页面
- 检查 HTML 中的 CSS 选择器
- 编写产品页面抓取工具
- 将数据存储在 CSV 文件中
- 完整代码示例
- 总结
- 常见问题
为什么要抓取 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 选择器来提取产品详细信息。
- 在MyCAD中点击 软件更新 中午网 并搜索产品(例如“智能手机”)。
- 右键单击任何产品,然后在 Chrome 开发者工具中选择“检查”或“检查元素”。

- 识别以下关键 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 进口 美丽汤
爬行 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
爬行 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 产品页面
在 Noon 上抓取产品页面将为您提供所有产品详细信息,包括描述、规格和客户评论。这些数据将帮助企业优化其产品列表和客户行为。在本节中,我们将介绍检查产品页面的 HTML 结构、编写抓取工具并将数据保存到 CSV 文件的过程。
检查 HTML 中的 CSS 选择器
在编写抓取工具之前,我们需要检查产品页面的 HTML 结构,以确定要抓取的元素的正确 CSS 选择器。操作方法如下:
- 打开 Noon 上的产品页面(例如智能手机页面)。
- 右键单击产品详细信息(例如产品名称、价格、说明),然后单击 Chrome 开发者工具中的检查。

- 寻找关键元素,例如:
- 产品名称: 发现在
<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
爬行 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
爬行 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' ]
产品数据 = []
网址 in 产品网址: 打印(f”刮擦 {网址}...“) html = scrape_product_page(网址) if 的HTML: 产品 = 提取产品详情(html) product_data.append(产品)
保存产品数据到csv(产品数据, ‘中午产品详情.csv’)
if __名字__ == “__主要的__”: 主()
|
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。