Product Hunt 成立于 2013 年,现已发展成为一个动态平台,突出展示不同行业的新产品和初创公司。它拥有庞大的创作者和爱好者社区。自成立以来,Product Hunt 积累了广泛的简介和产品。目前,该平台拥有许多注册的配置文件和产品,使其成为探索信息的宝贵资源。抓取 Product Hunt 以查找产品的详细描述和评论,以及对用户参与度的见解。该平台提供了大量可供发现的信息。

在这篇博文中,我们将使用以下方法从 Product Hunt 配置文件和产品中抓取信息: Crawlbase 爬取 API 和 JavaScript。通过这些工具,我们可以抓取重要数据,例如产品名称、描述、制造商详细信息、点赞数、发布日期以及用户对 Product Hunt 平台的评价。让我们仔细看看整个过程是如何运作的,以及我们可以从 Product Hunt 的数据中了解到哪些有趣的事情。

目录:

要抓取的产品搜索数据

  • 产品数据
  • 用户数据
  • 参与度指标
  • 趋势和历史数据

特色产品和简介

  • 精选展品
  • 增加可见度

抓取产品搜索数据

  • 学习 JavaScript 基础知识
  • 获取 Crawlbase API 令牌
  • 设置环境

获取 Product Hunt 产品数据 HTML

抓取产品搜寻产品有意义的数据

抓取产品搜寻资料数据

结论

常见问题

要抓取的产品搜索数据

Product Hunt 提供了丰富的数据集,其中包含各种信息,提供产品和社区的全面视图。以下是可用的关键数据类型的细分:

  1. 产品数据:
    • 名称和描述: Product Hunt 上列出的每个产品都带有名称和详细说明,概述了其功能和用途。
    • 分类: 产品分为不同的部分,从软件和移动应用程序到硬件和书籍。
    • 发行日期: 记录产品正式推出的日期,提供对创新时间表的深入了解。
  2. 用户数据:
    • 简介: 用户的个人资料包含有关他们自己、他们提交的产品以及他们在社区内的互动的信息。
    • 提交的产品: 用户提交的产品的记录,反映他们对平台的贡献。
    • 参与度指标: 有关用户如何与产品互动的信息,包括点赞、评论和关注者。
  3. 参与度指标:
    • 赞成票: 产品收到的点赞数表明了其在社区中的受欢迎程度和接受度。
    • 管理员评论: 用户评论提供了围绕特定产品的定性见解、反馈和讨论。
    • 人气: 量化产品整体受欢迎程度的指标,可以是点赞数、评论和其他参与因素的组合。
  4. 趋势和历史数据:
    • 热门产品: 识别当前势头强劲且受欢迎的产品。
    • 历史趋势: 分析产品的受欢迎程度如何随时间变化,帮助识别影响成功的模式和因素。
抓取产品搜寻数据

Product Hunt 在其主页上突出展示了精选的产品和简介。了解特色标准可以提供对平台动态的宝贵见解:

精选精选:

  • 产品搜寻团队选择: Product Hunt 团队策划并展示他们认为特别创新、有趣或相关的产品。
  • 社区参与: 获得大量用户参与(例如点赞和评论)的产品更有可能成为特色产品。

提高知名度:

  • 首页曝光: 特色产品在 Product Hunt 主页上占据首要位置,从而提高了其在更广泛受众中的知名度。
  • 增强识别: 特色化可以提高产品的可信度和认可度,有可能吸引用户、投资者和媒体的更多关注。

对于使用 Product Hunt 平台的任何人来说,了解不同类型的数据如何协同工作以及影响哪些产品获得推荐的因素至关重要。这些知识可以帮助您有效地导航并充分利用 Product Hunt。

抓取产品搜索数据

学习 JavaScript 基础知识:

在从 Product Hunt 中抓取数据之前,我们必须了解 JavaScript(我们将使用的编程语言)的一些基础知识。熟悉 DOM 操作等概念,这有助于我们与网页的不同部分进行交互、发出 HTTP 请求以获取数据以及处理异步操作以实现更流畅的编码。了解这些基础知识将对我们的项目有所帮助。

获取 Crawlbase API 令牌:

让我们谈谈从 Crawlbase 获取所需的令牌,以使我们的 Product Hunt 抓取工作正常进行。

  1. 在其网站上登录您的 Crawlbase 帐户。
  2. 登录后,找到“账户文件“Crawlbase 仪表板内的页面。
  3. 在该页面上查找名为“JavaScript 令牌”的代码。复制此代码 - 它就像一个密钥,确保我们的代码可以与 Product Hunt 正确通信。
Crawlbase 帐户仪表板

现在您拥有了此令牌,您可以完成我们的 Product Hunt 抓取项目的设置,使其顺利运行。

设置环境

现在一切准备就绪,让我们设置 JavaScript 代码所需的工具。按顺序执行以下步骤:

  1. 创建项目文件夹:

打开您的终端并输入 mkdir producthunt_scraper 为您的项目创建一个新文件夹。您可以随意命名该文件夹。

1
mkdirproducthunt_scraper
  1. 导航到项目文件夹:

Type cd producthunt_scraper 进入新文件夹。这可以帮助您更好地管理项目文件。

1
cd 产品hunt_scraper
  1. 创建 JavaScript 文件:

Type touch scraper.js 创建一个名为的新文件 scraper.js。如果您愿意,可以以不同的方式命名该文件。

1
触摸scraper.js
  1. 安装 Crawlbase 包:

Type npm install crawlbase 安装名为 Crawlbase 的软件包。这个包对于我们的项目至关重要,因为它可以帮助我们与 Crawlbase Crawling API 进行交互,从而更轻松地从网站获取信息。

1
npm 安装爬虫库

通过执行这些步骤,您将为 Product Hunt 抓取项目设置基本结构。您将拥有一个专用文件夹、一个用于编写代码的 JavaScript 文件以及必要的 Crawlbase 工具,以使抓取过程顺利且有组织。

获取 Product Hunt 产品数据 HTML

获取 API 凭据并安装用于网页抓取的 Node.js 库后,就可以处理“scraper.js”文件了。现在,选择您想要抓取的 Product Hunt 类别页面。对于此示例,我们将重点关注“产品搜寻”类别页面2024 年最佳工程与开发产品“来抓取不同的产品数据。在“scraper.js”文件中,您将使用 Node.js 和 Cheerio 库从所选的 Product Hunt 页面中提取信息。确保将代码的占位符 URL 替换为页面的实际 URL。

产品搜寻类别页面

要使 Crawlbase 爬网 API 正常工作,请按照下列步骤操作:

  1. 确保您已创建“scraper.js”文件,如前所述。
  2. 将提供的脚本复制并粘贴到该文件中。
  3. 通过输入“node scraper.js”并按 Enter 键在终端中运行脚本。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
常量 { 抓取API } = 要求('crawlbase'),
FS = 要求('fs'),
抓取基础令牌 = 'YOUR_CRAWLBASE_JS_TOKEN',
接口= 抓取API({ 象征:crawlbaseToken }),
产品搜索页面URL = 'https://www.producthunt.com/categories/engineering-development';

蜜蜂。得到(产品搜索页面 URL)。然后(处理CrawlResponse)。捕捉(处理抓取错误);

功能 处理抓取响应(响应){
if (回复。状态码 === 200){
fs。写文件同步('响应.html', 回复。身体);
领事.日志('HTML 已保存到response.html');
}
}

功能 处理抓取错误(错误){
领事.错误(错误);
}

HTML 响应:

抓取 HTML 格式的产品搜索数据

抓取产品搜寻产品有意义的数据

此示例向您展示如何从“产品搜索”类别页面中抓取不同的产品数据。这包括产品的名称、描述、星级和评论。我们将使用两个 JavaScript 库:Cheerio(通常用于网页抓取)和 fs(通常用于处理文件)。

提供的 JavaScript 代码使用 Cheerio 库从 Product Hunt 页面提取详细信息。它获取您在上一步中从“scraper.js”获得的 HTML 内容,使用 Cheerio 对其进行处理,并收集产品名称、描述、星级和评论等信息。该脚本审查每个产品列表并将收集的数据保存在 JSON 数组中。

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
常量 FS = 要求('fs'),
欢呼= 要求('cheerio'),
html内容 = fs.读取文件同步('响应.html', 'utf8'),
$ = 快乐。加载(html内容),
产品=[];

$('div.flex.direction-column.mb-mobile-10.mb-tablet-15.mb-desktop-15.mb-widescreen-15').((索引、元素) => {
常量 产品信息 = {
姓名:$(元素)。发现('div.color-blue.fontSize-18.fontWeight-600').文本()
星星:$(元素)。发现('div.flex.direction-row.align-center 标签').长度,
评论:$(元素)。发现('div.ml-3.color-lighter-grey.fontSize-14.fontWeight-400').文本()。修剪()
描述:$(元素)
.发现(
'div.color-lighter-grey.fontSize-mobile-14.fontSize-tablet-16.fontSize-desktop-16.fontSize-widescreen-16.fontWeight-400',
)
.文本()
.修剪()
};

产品。(产品信息);
});

常量 json数据 = JSON.串化(产品, , 2);
fs。写文件同步('产品信息.json', json数据, 'utf8');
领事.日志(json数据);

JSON 响应:

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
[
{
“名称”: “免费网站的家伙”,
“星星”: 5,
“评论”: “151 条评论”,
“说明”: “The Free Website Guys 是一家颇受欢迎的网站开发机构,以其免费网站程序而闻名。迄今为止,它已帮助超过 10,000 多名企业家建立了专业的网站。它不收取任何费用,而是将其免费网站程序用作一种与企业主建立信任和建立联系的方式,其中一部分人后来雇用该公司进行更大的付费项目。\n\n它被 Clutch、G1、TrustPilot、UpCity 和 UpCity 评为排名第一的网络代理机构好企业。”
},
{
“名称”: “齐皮”,
“星星”: 5,
“评论”: “132 条评论”,
“说明”: “Zipy 是一个集用户会话重放、前端和网络监控于一体的调试平台。 ⏰ 一分钟内安装 ▶️ 实时重放错误会话 🚀 开发工具、堆栈跟踪、控制台和网络日志 有问题吗?询问制作者”
},
{
“名称”: “石墨”,
“星星”: 5,
“评论”: “60 条评论”,
“说明”: “使用 Graphite 更快地交付代码。通过“堆叠”保持代码审查畅通无阻——顶级公司的工作流程工程师用它来加速他们的开发。现在任何拥有 GitHub 帐户的人都可以使用。”
},
{
“名称”: “法师”,
“星星”: 5,
“评论”: “63 条评论”,
“说明”: “用于转换和集成数据的开源数据管道工具。Airflow 的现代替代品。\n- 集成和同步来自第 3 方来源的数据\n- 构建实时和批处理管道以使用 Python、SQL 和 R 转换数据\n- 运行、监控和编排数千个管道,而不会失去睡眠”
},
{
“名称”: “SingleStore Kai™”,
“星星”: 5,
“评论”: “105 条评论”,
“说明”: “SingleStore Kai 使现有 MongoDB 应用程序中的 JSON 数据分析速度提高了 100 倍。易于使用的 MongoDB API 使开发人员能够使用熟悉的 MongoDB 命令来实现其应用程序的实时分析。”
},
{
“名称”: “洛蒂实验室”,
“星星”: 5,
“评论”: “66 条评论”,
“说明”: “轻松创建 Lottie 动画并将其导出到您的网站和应用程序! - 从 Figma 导入 SVG、Lotties 或从头开始创建 - 使用简单但功能强大的时间线制作动画 - 以 Lottie、Gif 或 MP4 形式导出到任何平台 - 与您的团队协作”
},
{
“名称”: “维瓦特”,
“星星”: 5,
“评论”: “34 条评论”,
“说明”: “一个目录可满足您所有的无代码需求,再加上营销和销售工具,可帮助您启动、营销和销售。根据您的项目要求或预算,使用 30 多种不同类别的工具搜索和发现工具。”
},
{
“名称”: “Datatera.ai”,
“星星”: 5,
“评论”: “41 条评论”,
“说明”: “借助人工智能的力量,无需代码和映射,只需几秒钟即可将任何网站或文件转换为结构化数据集或 CRM/ERP/HR 和其他解决方案”
},
{
“名称”: “梁”,
“星星”: 5,
“评论”: “86 条评论”,
“说明”: “持续的上下文切换、太多打开的选项卡和分散注意力的通知 - 听起来很熟悉?光束会直接从菜单栏轻轻地引导您度过忙碌的工作日。现在只需按一下按键即可加入通话或进入不受干扰的专注时间。敬请期待! ”
},
{
“名称”: 《科德利塔》,
“星星”: 5,
“评论”: “81 条评论”,
“说明”: “Codelita® 是一个从头开始学习编程的在线平台,甚至可以在移动设备上学习!”
}
]

抓取产品搜寻资料数据

在此示例中,我们将解释如何从 Product Hunt 用户个人资料中提取信息,特别关注 萨斯战士简介。我们想要收集的数据包括用户详细信息,例如用户 ID、姓名、关于部分、关注者、关注者、积分、兴趣、徽章等。为此,我们首先获取 Product Hunt 用户配置文件页面的 HTML 代码,然后创建自定义 JavaScript Product Hunt 抓取器以从此 HTML 代码中提取所需的数据。

对于此任务,我们将使用两个 JavaScript 库:Cheerio(通常用于网页抓取)和 fs(有助于文件操作)。提供的脚本读取 Product Hunt 用户配置文件页面的 HTML 代码,提取相关数据,并将其保存到 JSON 数组中。

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
常量 { 抓取API } = 要求('crawlbase'),
FS = 要求('fs'),
欢呼= 要求('cheerio'),
抓取基础令牌 = 'YOUR_CRAWLBASE_JS_TOKEN',
接口= 抓取API({ 象征:crawlbaseToken }),
产品搜索页面URL = 'https://www.producthunt.com/@saaswarrior';

蜜蜂。得到(产品搜索页面 URL)。然后(处理CrawlResponse)。捕捉(处理抓取错误);

功能 处理抓取响应(响应){
if (回复。状态码 === 200){
fs。写文件同步('profile_page.html', 回复。身体);
进程配置文件信息();
}
}

功能 处理抓取错误(错误){
领事.错误(错误);
}

功能 进程配置文件信息(){
常量 html内容 = fs.读取文件同步('profile_page.html', 'utf8'),
$ = 快乐。加载(html内容),
个人资料信息 = {};

个人资料信息。头像 = $('div[data-test="userImage"] img.styles_image__Je5S2').属性('源代码');
个人资料信息。姓名 = $('h1.color-darker-grey.fontSize-24.fontWeight-600').文本()。修剪();
个人资料信息。标题 = $('div.color-lighter-grey.fontSize-18.fontWeight-300').文本()。修剪();
个人资料信息。用户身份 = $('div.color-lighter-grey.fontSize-14.fontWeight-400').第一()。文本()。修剪();
个人资料信息。追随者 = $('a[href="/@saaswarrior/followers"]').文本()。修剪();
个人资料信息。以下 = $('a[href="/@saaswarrior/以下"]').文本()。更换(/\n\s+/g, '').修剪();
个人资料信息。 = $('span.color-lighter-grey.fontSize-14.fontWeight-400:包含(“点”)').文本()。修剪();
个人资料信息。条纹 = $('a[href="/visit-streaks?ref=profile_page"]')
.Contents()
.过滤(功能 (){
回报 Free Introduction.节点类型 === 3;
})
.文本()
.更换(/\n\s+/g, '')
.修剪();

个人资料信息。产品及技术 = [];
$('.styles_even__Qeyum,.styles_odd__wazk7').((索引、元素) => {
常量 产品 = {
姓名:$(元素)。发现('img.styles_thumbnail__Y9ZpZ').属性('替代'),
图片来源:$(元素)。发现('img.styles_thumbnail__Y9ZpZ').属性('源代码'),
};
个人资料信息。产品及技术.(产品);
});
个人资料信息。关于 = $('.styles_aboutText__AnpTz').文本()。更换(/\n\s+/g, '').修剪();

个人资料信息。社交链接 = [];
$('.styles_userLink__eDq16').((索引、元素) => {
常量 链接={
标题:$(元素)。文本()。修剪()
网址:$(元素)。属性('href'),
};
个人资料信息。社交链接.(关联);
});

个人资料信息。利益 = [];
$('.styles_topicLink__WH5Y6').((索引、元素) => {
常量 兴趣=$(元素)。文本()。修剪();
个人资料信息。利益.(兴趣);
});

个人资料信息。徽章 = [];
$('.styles_badge__HPZB8').((索引、元素) => {
常量 徽章={
姓名:$(元素)。发现('.color-darker-grey.fontSize-14.fontWeight-600').文本()。修剪()
图片来源:$(元素)。发现('img').属性('源代码'),
};
个人资料信息。徽章.(徽章);
});

常量 json数据 = JSON.串化(个人资料信息, , 2);
领事.日志(json数据);
}

JSON 响应:

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
{
“头像”: “https://ph-avatars.imgix.net/2530835/original?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=120&h=120&fit=crop”,
“名称”: “安基特·夏尔马”,
“标题”: “萨斯勇士创始人”,
“用户身份”: “#2530835”,
“追随者”: “2,807 位关注者”,
“下列的”: “110 关注”,
“点”: “1,414点”,
“条纹”: “🔥 连续 793 天”,
“产品”: [
{
“名称”: “画布”,
“图像来源”: "https://ph-files.imgix.net/d7c5e3c2-fab2-42e4-afe3-e525a4c8a953.jpeg?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=24&h=24&fit=crop"
},
{
“名称”: “脸谱”,
“图像来源”: "https://ph-files.imgix.net/91ffb275-f64b-4915-ba70-b77dd6540b71.png?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=24&h=24&fit=crop"
},
{}
],
“关于”: “软件是我喜欢的东西。从上学起我就一直在寻找和评估新工具,现在仍然如此。🤩”,
“社交链接”: [
{
“标题”: “推特”,
“网址”: “https://twitter.com/iamsaaswarrior”
},
{
“标题”: “脸谱”,
“网址”: “https://www.facebook.com/groups/saaswarrior/”
},
{
“标题”: “领英”,
“网址”: “https://www.linkedin.com/in/ankitsharmaofficial/”
}
],
“兴趣”: [「设计工具」, “营销”, “搜索引擎优化”, “人工智能”, “科技”, “动画片”],
“徽章”: [
{
“名称”: “很好的发现🧐”,
“图像来源”: "https://ph-files.imgix.net/855ca417-a531-4de4-b205-28cbf1d6f85a.png?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=44&h=44&fit=max"
},
{
“名称”: “像素完美💎”,
“图像来源”: "https://ph-files.imgix.net/5d0878a7-4f73-4ffd-85f3-219eeff97a2f.png?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=44&h=44&fit=max"
},
{
“名称”: “好主意💡”,
“图像来源”: "https://ph-files.imgix.net/996af07f-85bc-455c-8289-ffcddf7132d7.png?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=44&h=44&fit=max"
},
{
“名称”: “已接通电源🔌”,
“图像来源”: "https://ph-files.imgix.net/9e2c38ac-2858-44a0-958f-9b482a7474c6.png?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=44&h=44&fit=max"
}
]
}

结论

本指南提供的信息和工具可帮助您使用 JavaScript 和 Crawlbase 抓取 API 从 Product Hunt 中抓取数据。您可以收集各种数据集,例如用户个人资料详细信息(用户 ID、姓名、关注者、关注者、积分、社交链接、兴趣、徽章)以及有关不同产品的信息(产品名称、图像、描述、评级、评论)。无论您是网络抓取新手还是有一定经验,这些提示都会帮助您入门。如果您有兴趣尝试在其他网站上进行抓取,例如 Etsy, 沃尔玛Glassdoor,我们还有更多指南供您探索。

相关 JavaScript 指南:

常见问题

从 Product Hunt 抓取数据是否有任何速率限制或 IP 阻止措施?

Product Hunt 可能会实施速率限制和 IP 封锁措施,以防止滥用并确保公平使用其平台。过度或激进的抓取可能会触发这些机制,导致暂时或永久的阻塞。为了缓解这种情况,建议使用可靠的解决方案,例如 Crawlbase Crawling API。该 API 允许用户抓取网站,而无需担心速率限制或 IP 块,因为它通过池管理请求 轮换IP地址。将 Crawlbase 集成到您的开发流程中可确保更顺畅的抓取体验、避免中断,并确保您有效地遵循 Product Hunt 的政策。

可以从 Product Hunt 配置文件中提取哪些信息?

您可以从 Product Hunt 配置文件中提取有用的信息。此信息包括产品名称、描述、制造商详细信息、点赞数、发布日期和用户评论。产品说明告诉您其功能,而制造商信息则详细说明创建者。点赞数显示了社区对它的喜欢程度。发布日期为您提供时间表,用户评论提供反馈和讨论,让您了解用户体验。

我可以将抓取的数据用于商业目的吗?

如果您出于商业原因想要使用通过抓取 Product Hunt 获得的数据,则必须遵循 Product Hunt 的规则。阅读并遵守他们的政策很重要,因为他们规定了你可以使用他们的数据做什么,不能做什么。未经许可将数据用于商业目的可能会违反他们的规则并导致法律问题。如果您打算将这些数据用于商业目的,请请求 Product Hunt 的许可或检查他们是否有允许您将这些数据用于商业用途的官方方式(例如 API)。遵守平台规则对于公平合法地使用数据非常重要。

Product Hunt API 有哪些限制?

Product Hunt API 有一些限制,包括默认的商业用途限制。用户必须联系 Product Hunt 以获得批准才能将其用于商业目的。此外,API 采用 OAuth2 令牌身份验证,并且可能具有速率限制以防止滥用。对于替代抓取解决方案,Crawlbase Crawling API 提供了一个强大的选项。它使用轮换 IP 地址池,在没有速率限制或 IP 块的情况下促进网络抓取。这有助于确保不间断的数据检索。对于寻求可靠且高效的网页抓取解决方案的开发人员来说,Crawlbase 是一个有用的工具,特别是在需要考虑速率限制的情况下。