在选择新软件时,以前用户的观点非常宝贵。 在线评论可以直观地了解真实的用户体验。 在这种情况下,G2 已成为提供值得信赖的软件反馈的可靠平台。

许多买家向 G2 寻求见解,欣赏其评论的真实性和深度。 鉴于这种趋势,企业越来越有兴趣利用这些评论所包含的丰富信息。

本指南将引导您完成网络抓取 G2 产品评论的过程。 我们将涵盖从理解评论结构到绕过潜在障碍和分析数据等主题。 培养自己有效利用 G2 评论见解的技能。

表的内容

一、项目范围

二、 入门

三. 安装所需的包

四. 初始化 ExpressJS 和 Crawlbase 抓取 API

五、用Crawlbase爬取G2评论页面

六. 使用 Cheerio 解析 HTML

七. 配置 Firebase 数据库

八. 在 Firebase 实时数据库中存储数据

九。 结论

十、常见问题

一、项目范围

让我们探讨一下我们项目的核心,它的核心是提取 G2 产品评论。 为了确保流程顺利进行,我们结合了一系列精选工具:Crawlbase、JavaScript、Firebase、ExpressJS 和 Cheerio。 这些工具中的每一个都在该项目中发挥着独特的作用。

1. Crawlbase 的优势

Crawlbase的 抓取 API 是我们应对区块和验证码等挑战时的主要工具。 该 API 确保我们可以不间断地收集所需的数据。 有了 Crawlbase,我们就可以有效且高效地进行抓取。

2. 释放 JavaScript 的魔力

JavaScript的 是现代 Web 开发背后的魔力,我们正在将其应用到我们的项目中。 这是我们让事情动态发生的首选。 从处理内容到调整 HTML 元素,JavaScript 的灵活性使我们能够制定响应式动态抓取解决方案。

3.Firebase 连接

在这次冒险中我们值得信赖的伙伴是 火力地堡。 这个强大的实时数据库平台成为我们的游乐场,我们安全地存储所有这些珍贵的 G2 产品评论。 借助 Firebase,我们的数据组织得井井有条,随时可以在需要时进行分析。

4. 使用 Express 构建

想想 Express.js 作为我们项目的坚实基础。 它就像让我们处理传入请求并提供响应的脚手架。 设置路线、管理抓取任务以及连接到 Firebase——所有这一切以及更多的事情都可以通过 ExpressJS 实现。

5.Cheerio:HTML 魔术师

切里奥 是我们理解 HTML 的秘诀。 通过这个抓取工具,我们可以从 G2 评论的原始 HTML 中挑选出重要信息。

二、 入门

创建 Crawlbase 帐户

访问网站并 完成注册过程 创建一个帐户。 跟踪您的帐户令牌,尤其是 正常请求/tcp 令牌,因为我们将利用它来抓取 G2 评论页面内容。

请注意,G2 是一个复杂的网站,Crawlbase 实现了一种特定的解决方案来绕过 G2 的机器人检测算法。 联系支持团队 为您的帐户启用此定制解决方案。

安装Node.js.

去官方 Node.js的 网站并下载适合您的操作系统(Windows、macOS 或 Linux)的安装程序。 运行安装程序并按照屏幕上的说明进行操作。

邮差

创建一个免费的 邮差 帐户。 它是一种流行的 API(应用程序编程接口)测试和开发工具,可简化 API 的使用。 它提供了一个用户友好的界面,允许开发人员向 API 发送 HTTP 请求、查看响应并与不同的 API 端点进行交互。

Firebase 项目

设置一个免费帐户 Google Firebase。 请保留您的帐户,因为我们将在本文中进一步使用此实时数据库。

三. 安装所需的包

现在您已经奠定了初步的基础,让我们为您的开发环境配备必要的工具。 我们将使用 npm(节点包管理器)安装所需的包来实现此目的。

使用 Node.js 附带的命令行工具 npm,您可以轻松下载和管理外部库和包。 这些软件包提供了可简化各种任务的预构建功能,包括网页抓取。

在此步骤中,我们将启动一个新的 Node.js 项目并安装三个重要的软件包: express, cheerioCrawlbase。 该 ExpressJS 包使您能够轻松创建网络服务器, 切里奥 促进 HTML 解析,并且 爬虫库 库可以增强您的抓取工作。

打开终端或命令提示符,导航到项目目录,然后启动以下命令:

1
2
npm 初始化 --
npm 安装expresscheeriocrawlbase

第一个命令使用默认设置初始化一个新的 Node.js 项目,而第二个命令下载并安装这些包及其依赖项,并将它们保存在名为的文件夹中 node_modules 在您的项目目录中。

这些包将作为该项目的构建块,使我们能够与网络内容交互、提取信息并存储有价值的见解。

四. 初始化 Express 和 Crawlbase 抓取 API

初始化您的 ExpressJS 应用程序并定义必要的路由。 我们将创建一条路线来处理抓取过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
常量 快递= 要求(“表示”);
常量 { 抓取API } = 要求(“爬行基地”);

// 使用Crawlbase爬取API来爬取HTML
常量 接口= 抓取API({ 象征: “用户令牌” }); // 将其替换为您的 Crawlbase 普通令牌

// 主应用程序
常量 应用= 特快();
常量 PORT = 过程。ENV.PORT || 3000;

应用程序。得到(“/刮”, (请求,资源) => {
API
.得到(要求。询问.网址)
.然后((响应) => {
资源状态(200).JSON(回复。身体);
})
.捕捉((错误) => {
回报 资源状态(500).提交({ 的话: “请求失败”});
});
});

应用程序。(PORT, () =>
领事.日志(`服务器正在端口上运行 ${端口}`);
);

此代码建立了一个 ExpressJS Web 服务器,通过以下方式促进 Web 抓取: crawlbase 图书馆。 收到 GET 请求后 /scrape 端点,服务器从查询参数中提取 URL。 然后它采用 CrawlingAPI 类,通过您的身份验证 user token (确保将 USER_TOKEN 值替换为您的实际值 Normal request/ TCP token),对给定的 URL 执行 GET 请求。

成功的响应将被格式化为 JSON 并发送回客户端。 如果 API 调用期间出现错误,服务器会响应 500 状态代码和错误消息。 服务器配置为侦听指定端口或默认为 3000,并带有一条指示其运行状态的日志消息。

五、用Crawlbase爬取G2评论页面

在提取G2产品评论的过程中,我们将利用Crawlbase强大的功能。 此步骤涉及检索 G2 评论页面的 HTML 内容,这是解析和提取有价值信息的关键前提。

通过集成 Crawlbase,您可以在应对验证码和 IP 块等潜在挑战方面获得显着优势。 Crawlbase 的爬行 API 允许您绕过这些障碍,确保高效且不间断的提取过程。

为了验证您的功能 /scrape 路由,您可以通过运行命令来启动 ExpressJS 服务器 node index.js,或者如果您在 package.json 文件中配置了启动脚本,则可以使用 npm start。 此操作将启动服务器并允许您评估已定义路由的功能。

默认情况下,服务器将处于活动状态并在端口 3000 上运行。 您可以通过浏览器访问它,方法是导航至 http://localhost:3000.

终端服务器

测试 /scrape 路由,打开Postman并创建一个新的 GET request。 输入网址 http://localhost:3000/scrape 并添加请求URL查询参数。 在这个例子中,我们将抓取和抓取 Xcode 评论.

通过单击发送请求 Send button。 Postman 将捕获响应,其中将包含 G2 产品评论页面的 HTML 内容。

邮递员 HTML 响应

通过使用 Postman 获取目标 URL 的 HTML 内容,您可以直观地检查返回的内容。 此验证步骤可确保您与 Crawlbase 的集成成功,并且您能够检索基本的网页内容。

六. 使用 Cheerio 解析 HTML

一旦我们获得了 HTML 内容,我们将使用 Cheerio 对其进行解析并提取相关信息。 这涉及找到正确的选择器和用于定位 HTML 结构中特定元素的模式。 以下是获取选择器的方法:

1. 检查网页

在网络浏览器中打开 G2 产品评论页面。 右键单击要抓取的元素并选择 Inspect or Inspect Element。 这将打开浏览器的开发人员工具。

2. 找到元素

在开发人员工具中,您将看到页面的 HTML 结构。 浏览元素,直到找到包含所需数据的元素。 将鼠标悬停在不同的 HTML 元素上可在页面上突出显示它们,帮助您识别正确的元素。

3. 识别类和ID

查找 class 和 id 等属性,唯一标识您要抓取的元素。 这些属性是选择器,您可以将它们与 Cheerio 一起使用以获得所需的值。

4.使用CSS选择器

一旦您确定了类或 ID,您就可以在 Cheerio 代码中将它们用作 CSS 选择器。 例如,如果您想抓取评论标题,您可能有一个像 .review-title 来定位元素 review-title 类。

5. 使用 Cheerio 测试选择器

为了确保您的选择器准确,请打开一个新的 Node.js 脚本并使用 Cheerio 加载 HTML 内容并测试您的选择器。 使用 $(selector) 语法来选择元素并验证您是否捕获了正确的数据。

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
功能 HTML 解析数据(HTML){
尝试 {
// 使用 Cheerio 加载 HTML
常量 $ = 快乐。加载(html),
// 初始化产品数据对象
产品数据 = {
产品名称: '',
星星: '',
总评论数: '',
所有评论:[],
};

// 使用 Cheerio 选择器填充 ProductData 字段
产品数据['产品名称'] = $('.product-head [itemprop=名称]').文本();
产品数据[“星星”] = $('#products-dropdown .fw-semibold').第一()。文本();
产品数据[“总评论”] = $('.filters-产品 h3').文本();

// 遍历评论元素
$('.nested-ajax-loading > div.paper').((_, 元素) => {
// 使用 Cheerio 选择器提取数据
常量 评论者姓名 = $(元素).发现('[itemprop=作者]').文本()
星星 = $(元素).发现(“[itemprop='评级值']”).属性('内容'),
评论文本 = $(元素)
.发现('.pjax')
.文本()
.更换(/[^a-zA-Z]/g, ''),
评论者头像 = $(元素).发现('.avatar [ue=deferred-image]').属性('数据延迟图像-src') || '',
评论链接 = $(元素).发现('.pjax').属性('href'),
个人资料标题 = $(元素)
.发现('.mt-4th')
.地图((_, 标签) => $(标签)。文本())
.得到()
配置文件标签 = $(元素)
.发现('[ue=工具提示]')
.地图((_, 标签) => $(标签)。文本())
.得到()
审核日期 = $(元素).发现('.x-当前评论日期').文本();

// 填充 reviewData 对象并推送到 allReviews 数组
产品数据[“所有评论”].({
审稿人姓名,
评论文本,
明星,
个人资料标题: 个人资料标题。长度 ? 个人资料标题。加入(''): '',
审稿人头像,
个人资料标签,
审核日期,
评论链接,
});
});
回报 产品数据;
} 捕捉 (错误) {
回报 错误;
}
}

这段代码定义了一个名为 parsedDataFromHTML 它采用 HTML 内容作为输入,使用 Cheerio 库从 HTML 中提取特定数据。 它初始化一个名为 productData 包含产品信息和评论字段。

该代码使用 Cheerio 选择器来提取详细信息,例如 product name, star rating, total reviews count,以及个人评论数据。 它迭代评论元素,提取评论者详细信息、评论文本、星级、评论者头像、评论链接、个人资料标题、个人资料标签和评论日期。

所有这些数据都被组织成一个结构化对象并返回。 如果解析过程中出现任何错误,该函数将返回错误消息。

注意:要验证解析是否成功,可以按照以下步骤操作。

  1. 确保您的 Express 服务器正在端口上运行 3000。 或者,您可以运行 node index.js or npm start 启动服务器。
  2. 可选 邮差 并创建一个新的 GET 请求。 进入 http://localhost:3000/scrape 作为请求 URL 并添加 URL 查询参数。
  3. 通过单击发送请求 Send button。 由于 Postman,G2 产品评论页面的 JSON 内容将被捕获。
邮差 JSON 响应

七. 配置 Firebase 数据库

此时,我们将把 Firebase 集成到您的网页抓取项目中。 您可以按照以下步骤操作。

1.创建一个新项目

登录到您的 Firebase 控制台并通过单击创建一个新项目 Add project 按钮。 为您的项目指定合适的名称并选择您喜欢的选项。

创建 Firebase 项目

2. 创建实时数据库

成功设置项目后,导航到 Firebase 控制台的左侧菜单并选择 Database。 从那里,点击 Create Database 并选择 Start in test mode 选择。 这种方法允许您建立具有受限安全规则的实时数据库,使其非常适合测试和开发目的。

创建 Firebase 数据库

3.审查规则和安全

在测试模式下,重要的是要注意您的数据库可以通过有限的安全规则进行访问。 当您转向生产时,请确保检查并实施适当的安全规则以保护您的数据。 点击 Next 然后 Enable.

下一个 Firebase 数据库 启用 Firebase 数据库

4. 生成私钥

继续设置您的 Firebase 项目,然后生成一个新的 private key 专门用于 Firebase Admin SDK。 生成密钥后,请确保将生成的 JSON 文件保存到项目的根目录中。 此 JSON 文件包含您的服务帐户密钥,对于 SDK 功能至关重要。

Firebase 数据库密钥

5. 集成私钥

在您的 ExpressJS 项目,安装 Firebase Admin SDK 包并使用您的 private key 和数据库 URL。

1
npm 我 firebase 管理员
1
2
3
4
5
6
7
常量 管理员= 要求('firebase 管理员');
常量 服务帐号 = 要求('./path/to/serviceAccountKey.json'); // 替换为你的路径

管理员。初始化应用程序({
凭据: 行政。凭据.证书(服务帐户),
数据库URL: 'https://your-project-id.firebaseio.com', // 替换为您的 Firebase URL
});

此代码片段首先安装 firebase-admin 使用 npm 进行打包。 然后,它导入包并使用用于身份验证的服务帐户 JSON 文件和 Firebase 实时数据库的 URL 来初始化 SDK。 此设置允许您的 Node.js 应用使用 Admin SDK 的功能与 Firebase 服务进行交互。

八. 在 Firebase 实时数据库中存储数据

在你里面 /scrape 路由的逻辑,在使用 Cheerio 解析 HTML 后,以适合您需要的格式构建提取的数据。 这可以是一个对象数组,其中每个对象代表一条评论。

  1. 在数据库中选择一个有意义的位置来存储与特定产品相关的评论。 您可以使用产品名称作为数据库中的键来区分多个产品评论。

  2. 实现一条路线,例如 ~/productName/reviews,对应于数据库中您要存储评论的位置。

  3. 当对此路由发出请求时,将结构化数据推送到 Firebase 实时数据库中的指定位置。

这里 是用于爬行和抓取 G2 产品评论并将抓取的数据存储到数据库中的完整代码。

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
常量 快递= 要求('表示');
常量 欢呼= 要求('cheerio');
常量 { 抓取API } = 要求('crawlbase');
常量 管理员= 要求('firebase 管理员');
常量 服务帐号 = 要求(“./path/to/serviceAccountKey.json”); // 替换为你的路径

管理员。初始化应用程序({
凭据: 行政。凭据.证书(服务帐户),
数据库URL: 'https://your-project-id.firebaseio.com', // 替换为您的 Firebase URL
});
// 使用Crawlbase爬取API来爬取HTML
常量 接口= 抓取API({ 象征: 'USER_TOKEN' }); // 将其替换为您的 Crawlbase 普通令牌
// 主应用程序
常量 应用= 特快();
常量 PORT = 过程。ENV.PORT || 3000;

功能 HTML 解析数据(HTML){
尝试 {
// 使用 Cheerio 加载 HTML
常量 $ = 快乐。加载(html),
// 初始化产品数据对象
产品数据 = {
产品名称: '',
星星: '',
总评论数: '',
所有评论:[],
};

// 使用 Cheerio 选择器填充 ProductData 字段
产品数据['产品名称'] = $('.product-head [itemprop=名称]').文本();
产品数据[“星星”] = $('#products-dropdown .fw-semibold').第一()。文本();
产品数据[“总评论”] = $('.filters-产品 h3').文本();

// 遍历评论元素
$('.nested-ajax-loading > div.paper').((_, 元素) => {
// 使用 Cheerio 选择器提取数据
常量 评论者姓名 = $(元素).发现('[itemprop=作者]').文本()
星星 = $(元素).发现(“[itemprop='评级值']”).属性('内容'),
评论文本 = $(元素)
.发现('.pjax')
.文本()
.更换(/[^a-zA-Z]/g, ''),
评论者头像 = $(元素).发现('.avatar [ue=deferred-image]').属性('数据延迟图像-src') || '',
评论链接 = $(元素).发现('.pjax').属性('href'),
个人资料标题 = $(元素)
.发现('.mt-4th')
.地图((_, 标签) => $(标签)。文本())
.得到()
配置文件标签 = $(元素)
.发现('[ue=工具提示]')
.地图((_, 标签) => $(标签)。文本())
.得到()
审核日期 = $(元素).发现('.x-当前评论日期').文本();

// 填充 reviewData 对象并推送到 allReviews 数组
产品数据[“所有评论”].({
审稿人姓名,
评论文本,
明星,
个人资料标题: 个人资料标题。长度 ? 个人资料标题。加入(''): '',
审稿人头像,
个人资料标签,
审核日期,
评论链接,
});
});
回报 产品数据;
} 捕捉 (错误) {
回报 错误;
}
}

应用程序。得到('/刮', (请求,资源) => {
API
.得到(要求。询问.网址)
.然后((响应) => {
常量 解析数据 = HTML 解析数据(回复。身体);
常量 数据库参考 = admin.数据库()。文献(`${解析数据['产品名称']}/`); // 替换为你要保存数据的路径

数据库引用
.(解析数据)
.然后(() => {
回报 资源状态(200).JSON(解析数据);
})
.捕捉((错误) => {
资源状态(500).提交('保存数据时出错:' + 错误。的话);
});
})
.捕捉((错误) => {
领事.日志(错误, ‘错误’);
回报 资源状态(500).提交({ 状态: '失败的', 味精: “数据未保存” });
});
});

应用程序。(PORT, () => 领事.日志(`服务器正在端口上运行 ${端口}`));

总之,此代码创建了一个具有多种功能的 Node.js 应用程序。 首先导入必要的库,包括 express.js 用于创建网络服务器, cheerio 对于 HTML 解析, crawlbase 用于网络爬行,以及 firebase-admin 用于与 Firebase 服务交互。 Firebase Admin SDK 使用服务帐户的 JSON 文件和相应的数据库 URL 进行初始化。 的一个实例 CrawlingAPI 类使用用户令牌实例化以方便网络爬行。

然后,该代码创建一个 ExpressJS 应用程序并将其设置为侦听特定端口(自定义端口或默认 3000)。一个名为 parsedDataFromHTML 定义并利用 Cheerio 选择器来解析 HTML 内容并将其构建为有组织的数据。

一条路线 /scrape 是在 ExpressJS 应用程序中建立的,配置为处理 GET 请求。 收到请求后,API 使用以下内容抓取提供的 URL CrawlingAPI。 使用以下内容解析响应 parsedDataFromHTML 函数,产生结构化数据。 然后,解析后的数据通过 Firebase Admin SDK 存储在 Firebase 实时数据库中,并将其放置在指定路径下。 成功的数据存储会提示包含已解析数据的 JSON 响应。

Firebase 数据库

我们现已成功在 ExpressJS 应用和 Firebase 实时数据库之间建立无缝连接,使您能够以结构化且有组织的方式存储提取的 G2 产品评论。 这可确保这些有价值的见解得到安全存储,并在需要时轻松访问。

九。 结论

这是一个简单的流程图,总结了我们的项目范围:

申请流程

总之,这份综合指南为您提供了熟练使用 JavaScript 和 Crawlbase 提取 G2 产品评论的必要技术。 通过坚持详细的步骤,您已经对 G2 产品界面的导航、提炼和结构化检索到的数据以及有效地将其归档到数据库中以供后续分析有了深刻的了解。

网络抓取在提取可操作的业务洞察方面的重要性是不可否认的。 它为明智的决策、产品改进和定制策略奠定了坚实的基础。 然而,强调道德抓取实践的必要性至关重要——尊重网站条款至关重要。

当您继续使用 Crawlbase 的旅程时,请记住,网络抓取不仅涉及技术技能,还涉及责任。 致力于持续学习并利用这些丰富的数据来发现新的机会并推动前瞻性创新。

网络抓取的世界是动态且广阔的,提供丰富的知识和见解,可以使您的业务受益匪浅。 迎接挑战,充分利用机遇,让您对发现的热情引导您在 Crawlbase 的未来努力中。

十、常见问题

问:Crawlbase 如何帮助爬行和抓取 G2网 和其他网站?

Crawlbase API 利用先进的算法和广泛的代理网络来浏览块和验证码,同时有效地屏蔽每个请求的 IP。 这一战略过程保证了匿名性并防止目标网站跟踪您的爬行活动。

在处理像 G2.com 这样的复杂网站时,我们利用训练有素的人工智能机器人实施了定制解决方案。 这种增强增强了我们绕过代理挑战并避免由于阻塞而造成中断的能力。 通过利用美国的优质住宅网络,我们有效地模仿了真实的人类浏览行为。 这种方法可确保无缝且不间断的抓取体验。

问:我可以使用任何其他数据库吗?

该博客展示了如何利用 Firebase 实时数据库来存储抓取的数据。 然而,您的选择并不仅限于这条途径。 根据项目的特定用例或需求,您可以深入研究替代数据库解决方案,例如 MongoDB、PostgreSQL、MySQL,甚至基于云的平台(例如 Amazon DynamoDB)。

问:在抓取 G2 评论时如何处理分页?

在抓取 G2 评论时处理分页涉及从评论部分的多个页面获取数据。 以下是在网络抓取中处理分页的一般方法:

  1. 确定分页方法:检查 G2 评论页面的结构以确定分页的实现方式。 在这种情况下,G2 的实施涉及单击审核页面底部的“下一步”按钮。

  2. 调整 URL 或参数:如果分页涉及更改 URL 中的 URL 参数(如页码),请相应地修改每个页面的 URL,如下例所示。
    第1页: https://www.g2.com/products/xcode/reviews
    第2页: https://www.g2.com/products/xcode/reviews.html?page=2
    第3页: https://www.g2.com/products/xcode/reviews.html?page=3

  3. 循环浏览页面:一旦了解了分页方法,就可以使用循环来遍历页面。 向每个页面发送请求,使用抓取库(例如 Axios、Fetch)抓取和抓取数据,以获取 HTML 内容。 然后,使用 Cheerio 或任何其他 HTML 解析库解析 HTML 以提取所需的信息。

问:如何确保网络抓取的合法性和道德性?

确保网络抓取的合法性和道德性质涉及尊重网站制定的规则和准则。 在开始任何抓取之前,请花点时间彻底查看网站的服务条款并检查其 robots.txt 文件。 此外,请注意您正在提取的数据,验证您是否拥有将其用于实现预期目标的合法权限。 这种方法有助于保持负责任和道德的抓取行为。