识别目标网页,检查完整的 HTML,找到所需数据,使用解析工具提取数据,手动管理代理,并祈祷不会因为重复操作而被封禁。这是一个繁琐的过程,但在基于 API 的抓取技术出现之前,网页抓取就是这样的。

如今, Crawlbase 让整个过程变得非常简单。它们让你跳过所有复杂的步骤,专注于真正重要的事情:获取你需要的数据。

本文将教您如何了解传统和基于 API 的抓取之间的主要区别,以及如何通过以下方式开始更有效地提取 Web 数据: Crawlbase.

目录

  1. 传统爬虫的局限性
  1. 传统方法示例
  1. 基于 API 的数据抓取的主要优势
  1. Crawlbase 基于 API 的方法
  1. 为什么使用基于 API 的抓取 Crawlbase 胜利
  1. 常见问题 (FAQ)

传统爬虫的局限性

从零开始构建你的网页爬虫说起来容易做起来难。首先,你需要对以下方面有扎实的理解: HTML 的工作原理你必须检查页面的结构,找出哪些标签,例如 <div>, <span><a>;保存所需的数据,并确切知道如何提取。这仅仅是个开始。传统的数据抓取还面临其他一些挑战:

处理 JavaScript 渲染的页面

自己解决这个问题需要付出很多努力。你可能需要像 Selenium 或 Playwright 这样的工具来运行 无头浏览器,因为您想要的数据并不总是出现在页面的初始 HTML 中。它通常是在页面加载后动态生成的。如果您依赖于简单的 GET 请求,您的爬虫可能会返回空响​​应。

IP 禁令和速率限制

这是传统数据抓取面临的最大挑战之一,因为它决定了网站如何检测和阻止自动抓取和爬取活动。绕过这些防御措施通常意味着需要编写自定义代码来轮换代理或 IP 地址,并添加逻辑来模拟人类的浏览行为。所有这些都需要高级的编码技能,并且会大大增加抓取工具的复杂性。

维修费用

传统的爬虫程序几乎总是会花费更多,不仅在资金上,还在开发时间和精力上。手动编写的爬虫程序经常崩溃,需要不断更新。管理健康 IP 或轮换代理还会增加额外的维护开销。爬虫失败或数据不完整也会导致计算资源的浪费。使用现代且支持良好的 API 时,大多数这些问题都是可以避免的。

缺乏可扩展性

综合以上所有问题,扩展它必然会面临巨大挑战。高昂的成本和低可靠性使其成为一个糟糕的选择,尤其是在你打算为大型公司扩展项目时。如果增长和效率至关重要,那么坚持使用传统的数据抓取方式并不合理,尤其是在如今,像 Crawlbase 存在。

传统抓取示例

这个方法相当简单。在这个例子中,我们将使用 Python 的请求库来演示爬取和抓取网站数据的最基本形式。

设置编码环境

  1. 安装Python 3 您的计算机上
  2. 打开终端并运行
1
python -m pip 安装请求

基本(非 JavaScript)页面

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
进口 要求
请求异常 进口 请求异常

# 配置
目标网址 = “https://www.google.com/search?q=Mike+Tyson”
标头= {
“用户代理”
“Mozilla/5.0(Windows NT 10.0;Win64;x64)”
“AppleWebKit/537.36(KHTML,如 Gecko)”
“Chrome/122.0.0.0 Safari/537.36”
)
}

# 获取页面的 HTML 内容
尝试:
响应 = 请求.get(TARGET_URL,标头=HEADERS)
响应.raise_for_status()

html_content = 响应. 文本
打印(html_内容) # 输出原始 HTML 内容

# 提取结构化数据(例如搜索结果),
# 在“html_content”上使用像 Beautiful Soup 这样的解析器。

请求异常 as 错误:
打印(f"\n 无法获取页面: {错误}\n")

将以下代码保存在名为 basic_page.py,然后使用以下命令从命令行执行它:

1
python basic_page.py

输出:

传统抓取后的示例输出的屏幕截图

从输出中可以看出,此方法返回页面的原始 HTML。虽然它适用于基本页面或静态页面,但在处理严重依赖 JavaScript 渲染内容的现代网站时,它显得力不从心,您将在下一个示例中看到这一点。

JavaScript 页面

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
进口 要求
请求异常 进口 请求异常

# 配置
目标网址 = “https://www.instagram.com/leomessi”
输出文件名 = “输出.html”
标头= {
“用户代理”
“Mozilla/5.0(Windows NT 10.0;Win64;x64)”
“AppleWebKit/537.36(KHTML,如 Gecko)”
“Chrome/122.0.0.0 Safari/537.36”
)
}

# 获取并保存页面
尝试:
响应 = 请求.get(TARGET_URL,标头=HEADERS)
响应.raise_for_status()

- open(输出文件名, “w”, 编码=“utf-8”) as 文件:
文件.写入(响应.文本)

打印(f"\n页面已成功保存至'输出文件名'\n")

请求异常 as 错误:
打印(f"\n无法获取页面: {错误}\n")

将以下代码保存在名为 javascript_page.py,然后使用以下命令从命令行执行它:

1
python javascript_page.py

以下是终端控制台输出:

传统抓取后终端控制台输出的屏幕截图

当你打开文件时 output.html 在浏览器上:

传统抓取后的浏览器截图

浏览器呈现空白的 Instagram 页面,因为负责加载内容的 JavaScript 在抓取过程中未执行。

在这种情况下,您需要实施额外的工具或切换到更高级的解决方案,例如使用无头浏览器,或者更好的是基于 API 的抓取工具,以节省时间和精力。

基于 API 的数据抓取的主要优势

在数据抓取的语境中,“基于 API”是指通过向网站或服务提供的官方端点发出请求来收集数据。这使得整个过程更快、更可靠,而且更简单。

虽然官方 API 类似 GitHub API 是传统抓取的一个很好的替代方案, Crawlbase 提供更强大的解决方案。其通用方法允许您抓取几乎所有公开的网站,并且还可以与官方 API 一起使用,从而显著增强您的抓取工作流程。以下是一些主要优势:

IP 管理和 CAPTCHA 处理

Crawlbase 提供一个充当中间件的 API,以简化网页抓取。它们无需访问官方网站 API,而是处理诸如 IP 轮换、机器人检测和验证码验证等复杂任务。该 API 利用海量 IP 池、基于 AI 的行为和内置自动化功能来规避封禁和屏蔽。用户只需向端点发送目标 URL 即可获得准确的数据。无需担心管理代理、规避验证码或手动模拟浏览器行为。

内置数据抓取工具

Crawlbase 不仅提供目标页面的完整 HTML 代码;它还可以提供干净的结构化数据,从而无需在网站每次发生任何更改时不断调整代码。

它内置了适用于 Facebook、Instagram、亚马逊、eBay 等主要平台的抓取工具, 许多人。这为开发人员节省了大量的时间和麻烦,让他们专注于使用数据而不是弄清楚如何提取数据。

高效可靠

即使您计划抓取少量或大量数据,可靠性和速度都是决定项目采用哪种方法的关键因素。 Crawlbase 以其在市场上最稳定、最可靠的服务而闻名。快速浏览一下 Crawlbase 状态页面 显示其 API 的正常运行时间几乎为 100%。

快速集成和可扩展性

通过单个 API 端点,您可以访问 Crawlbase的主要产品是 Crawling API,用于抓取和数据提取。任何支持 HTTP 或 HTTPS 请求的编程语言都可以使用此 API,从而轻松跨平台使用。为了进一步简化集成, Crawlbase 还提供免费 库和 SDK 适用于各种语言。使用此 API 作为抓取工具的基础,可以大大简化项目扩展。

Crawlbase 基于 API 的方法

你可以花时间学习无头浏览器、管理代理和解析 HTML,也可以跳过所有这些复杂性,使用 Crawling API 而是。入门非常简单:

注册和快速入门指南

Crawling API (基本页​​面)

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
进口 要求
进口 JSON
请求异常 进口 请求异常

# 配置
API_TOKEN = “ “
目标网址 = “https://www.google.com/search?q=Mike+Tyson”
API_ENDPOINT = “https://api.crawlbase.com/”

参数= {
“令牌”:API_TOKEN,
“网址”:目标网址,
“刮刀”: “谷歌搜索引擎结果页面”,
“国家”: “我们”
}

# 以结构化的 JSON 格式获取页面内容
尝试:
响应 = 请求.get(API_ENDPOINT,params=params)
响应.raise_for_status()

json_string_content = 响应.文本
json_data = json.loads(json_string_content)
pretty_json = json.dumps(json_data,缩进=2)
打印(漂亮的json)

请求异常 as 错误:
打印(f"\n 无法获取页面: {错误}\n")

请注意:

  • 确保更换 Normal_requests_token 用你的实际令牌。
  • - "scraper": "google-serp" 是可选的。如果您希望获取完整的 HTML 响应,请将其删除。

将脚本另存为 basic_page_using_crawling_api.py,然后使用以下命令从命令行运行它:

1
python basic_page_using_crawling_api.py

响应

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
{
“原始状态”: 200,
“电脑状态”: 200,
“网址”: “https://www.google.com/search?q=Mike+Tyson”,
“领域复杂性”: “复杂的”,
“身体”: {
“广告”: [],
《人家也问》: [],
「零食包」: {
“地图链接”: "",
“更多地点链接”: "",
“结果”: []
},
“搜索结果”: [
{
“位置”: 1,
“标题”: “迈克·泰森 - 维基百科”,
“发布日期”: "",
“网址”: “https://en.wikipedia.org/wiki/Mike_Tyson”,
“目的地”: “en.wikipedia.org › wiki › 迈克·泰森”,
“说明”: 迈克尔·杰拉德·泰森(Michael Gerard Tyson,30年1966月1985日出生)是一位美国前职业拳击手,主要在2005年至2年间参加比赛。绰号“铁人迈克”……对阵巴斯特·道格拉斯·迈克·泰森之谜·迈克·泰森(消歧义)·女孩XNUMX
},
// 注意:为了简洁起见,省略了一些结果。
{
“位置”: 11,
“标题”: “迈克·泰森还活着吗”,
“发布日期”: "",
“网址”: "",
“目的地”: “相关搜索”,
“说明”: “迈克·泰森还活着吗?迈克·泰森的净资产?迈克·泰森的孩子?迈克·泰森的统计数据?迈克·泰森的电影?迈克·泰森的身高?迈克·泰森的女儿?迈克·泰森的纪录”
}
],
“相关搜索”: [
{
“标题”: “迈克·泰森重返里维埃拉海滩,参加在肯尼迪中学举行的“拳击为事业”活动 WTVX · 3 小时前”,
“网址”: "https://google.com/url?q=https://cw34.com/news/local/mike-tyson-returns-to-riviera-beach-for-boxing-for-cause-event-at-jfk-middle-school-florida-may-19-2025&sa=U&ved=2ahUKEwi5_u2asLGNAxURVkEAHZfXAiQQvOMEegQIAhAC&usg=AOvVaw2yO_XM1BxlG5lQ5SFYqrcx"
},
// 注意:为了简洁起见,省略了一些结果。
{
“标题”: “迈克·泰森纪录”,
“网址”: "https://google.com/search?sca_esv=c77914c67f84fb9a&q=mike+tyson+record&sa=X&ved=2ahUKEwi5_u2asLGNAxURVkEAHZfXAiQQ1QJ6BAgBEAg"
}
],
“结果数”: 11
}
}

Crawling API (JavaScript 页面)

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
进口 JSON
进口 要求
请求异常 进口 请求异常

# 配置
API_TOKEN = “ “
目标网址 = “https://www.instagram.com/leomessi”
API_ENDPOINT = “https://api.crawlbase.com/”
输出文件名 = “输出.html”

参数= {
“令牌”:API_TOKEN,
“网址”:目标网址,
## 输出到控制台时取消注释以下代码
#“scraper”:“instagram-profile”
}

# 获取并保存页面
尝试:
响应 = 请求.get(API_ENDPOINT,params=params)
响应.raise_for_status()

## 开始:输出到文件
- open(输出文件名, “w”, 编码=“utf-8”) as 文件:
文件.写入(响应.文本)
## 结束:输出到文件

打印(f"\n页面已成功保存至'输出文件名'\n")

## 输出到控制台时取消注释以下代码
## 开始:输出到控制台
# json_string_content = 响应.文本
# json_data = json.loads(json_string_content)
# pretty_json = json.dumps(json_data, indent=2)
# 打印(pretty_json)
## 结束:输出到控制台

请求异常 as 错误:
打印(f"\n无法获取页面: {错误}\n")

与之前的代码相同,您必须保存它并转到终端执行该代码。

一旦成功执行,您应该会看到以下类似的输出:

终端控制台输出的屏幕截图 Crawlbase 刮

当你打开 output.html 时,你会看到页面不再是空白的,因为 Crawling API 通过无头浏览器基础设施运行您的请求。

之后浏览器输出的屏幕截图 Crawlbase 刮

如果您想要干净、结构化的 JSON 响应数据,只需添加 "scraper": "instagram-profile" 参数。这告诉 Crawlbase 自动解析 Instagram 个人资料页面并仅返回相关数据,从而节省您手动提取整个 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
50
51
52
53
54
{
“原始状态”: 200,
“电脑状态”: 200,
“网址”: “https://www.instagram.com/leomessi”,
“领域复杂性”: “标准”,
“身体”: {
“用户名”: “莱奥梅西”,
“已验证”: true,
“帖子数”: {
“值”: “1,352 个帖子”,
“文本”: “1,352 个帖子”
},
“关注者数”: {
“值”: “1,352”,
“文本”: “1,352”
},
“以下计数”: {
“值”: “505亿粉丝”,
“文本”: “505亿粉丝”
},
“图片”: "",
“名称”: “莱奥梅西”,
“生物”: {
“文本”: “Bienvenidos a lacuenta oficial de Instagram de Leo Messi / 欢迎来到 Leo Messi Instagram 官方帐户”,
“标签”: []
},
《开放的故事》: [
{
“图片”: "https://instagram.fdac5-1.fna.fbcdn.net/v/t51.12442-15/29087606_126595214845908_6406382890979950592_n.jpg?stp=c0.398.1024.1024a_dst-jpg_e35_s150x150_tt6&_nc_ht=instagram.fdac5-1.fna.fbcdn.net&_nc_cat=1&_nc_oc=Q6cZ2QH6EqvaVyfXNk8zSys32rW4yL8DZ4rc2YnAOPfML_oniyB2vNF-QkDP6ODCwR-S1RA&_nc_ohc=r0nEuFs6-HsQ7kNvwFu5CEg&_nc_gid=yagnghB9KYY63NmgzUZcwA&edm=AGW0Xe4BAAAA&ccb=7-5&oh=00_AfI539_HwS461-oFMMMRcfZRsGHpm9g9dK4ZnAzTuy2OLg&oe=6831F937&_nc_sid=94fea1",
“文本”: “Selección 的个人资料图片”
}
// 注意:为了简洁起见,省略了一些结果。
],
“帖子”: [
{
“关联”: “https://www.instagram.com/leomessi/p/DHwD6QfNjtM/”,
“图片”: "https://instagram.fdac5-2.fna.fbcdn.net/v/t51.2885-15/487279743_18564110437033891_6646105334131093181_n.jpg?stp=dst-jpg_e35_p640x640_sh0.08_tt6&_nc_ht=instagram.fdac5-2.fna.fbcdn.net&_nc_cat=107&_nc_oc=Q6cZ2QEQESi6ZBcLSC7mzApMy8pkVFjaMzqMN3LHMBymIMNTLgW-O5pkV7NYRmMMPm-OXUk&_nc_ohc=2syeyScYoDgQ7kNvwF29WUn&_nc_gid=7sozkWOc6vQySL1gR5H2pQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AfLT72_fv6olEKMMljFOlP-rthEnep23at8tiMxiSV9NvA&oe=6831F3EB&_nc_sid=8b3546",
“图像数据”: “莱昂纳多·梅西于 28 年 2025 月 1 日分享的照片,标签为 @masbymessi。照片中可能只有一个人,正在踢足球,踢足球,鞋钉,球,运动器材,运动服和文字。”,
“图片”: [
"https://instagram.fdac5-2.fna.fbcdn.net/v/t51.2885-15/487279743_18564110437033891_6646105334131093181_n.jpg?stp=c0.169.1350.1350a_dst-jpg_e35_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMzUweDE2ODguc2RyLmY3NTc2MS5kZWZhdWx0X2ltYWdlIn0&_nc_ht=instagram.fdac5-2.fna.fbcdn.net&_nc_cat=107&_nc_oc=Q6cZ2QEQESi6ZBcLSC7mzApMy8pkVFjaMzqMN3LHMBymIMNTLgW-O5pkV7NYRmMMPm-OXUk&_nc_ohc=2syeyScYoDgQ7kNvwF29WUn&_nc_gid=7sozkWOc6vQySL1gR5H2pQ&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AfJssBLRDQJbI-ACa2Iq1WwpRv3WwgSTEwlYgZrgOpiIWA&oe=6831F3EB&_nc_sid=8b3546"
// 注意:为了简洁起见,省略了一些结果。
]
},
// 注意:为了简洁起见,省略了一些结果。
{
“关联”: “https://www.instagram.comhttps://privacycenter.instagram.com/policy/”,
“图片”: "",
“图像数据”: "",
“图片”: []
}
],
“igtv”: []
}
}

你也可以参观 Crawlbase的 GitHub 存储库 下载本指南中使用的完整示例代码。

为什么基于 API 的抓取比传统的 Web 抓取更受欢迎?

正如您在上面的演示中所看到的,使用基于 API 的解决方案,例如 Crawlbase“ Crawling API 在从网站收集数据方面,它比传统的抓取方法具有明显的优势。让我们仔细看看为什么它对开发者和企业来说都是一个不错的选择。

减少开发时间和成本

您无需花费时间开发一个需要不断更新的抓取工具,因为每当网站更改其 HTML、处理 JavaScript 页面或维护代理以避免被阻止时,您都可以简单地使用 Crawling API传统的抓取方式耗时耗力。通过让 Crawlbase 处理繁重的工作,您将降低整体项目成本并减少对额外人力的需求。

可扩展基础架构

Crawlbase 产品在构建时充分考虑了可扩展性。从简单的 HTTP/HTTPS 请求到支持各种编程语言的即用型库和 SDK,集成快捷便捷。

- Crawling API 旨在满足您的需求。 Crawlbase 使用 现收现付模式,让您灵活地选择每月所需用量。您无需订阅,只需按实际用量付费,非常适合各种规模的项目。

成功率更高

Crawlbase 旨在最大限度地提高成功率,其特点包括健康的 IP 池、基于 AI 的逻辑以避免 CAPTCHA 验证,以及高度维护的代理网络。更高的成功率意味着更快的数据收集速度和更低的运营成本。即使在极少数请求失败的情况下, Crawlbase 不向您收费,使其成为一种极具成本效益的网络抓取解决方案。

给 Crawlbase 今天就尝试一下,看看网页抓取的速度和效率有多高。 立即注册 获得免费帐户即可接收 1,000 个免费 API 请求!

常见问题解答 (FAQs)

问:为什么我应该切换到基于 API 的解决方案,例如 Crawlbase?

A: 传统的抓取速度慢、复杂,而且难以扩展。 Crawlbase 处理 IP 轮换、JavaScript 渲染和验证码规避,让您能够以更少的代码和维护成本更快地获得可靠的数据。即使前期成本较高,总体成本通常也低于自行构建和维护爬虫。

问: Crawlbase?

A: Crawlbase 其设计注重灵活性和可扩展性,但与任何基于 API 的平台一样,它会根据所使用的抓取方法而受到一定的操作限制。以下是默认限制的明细:

Crawling API (同步)

  • 每个请求的带宽: 无限量的
  • 速率限制:
    • 大多数网站每秒 20 个请求
    • 每秒向 Google 域名发出 1 个请求
    • LinkedIn 每秒 5 个请求(异步模式)

请注意: 速率限制可根据要求提高。如果您不确定哪种产品适合您的用例,或者想要申请更高的限制, Crawlbase 客户支持 可帮助您定制项目设置。

问:网络抓取和基于 API 的数据收集之间的主要区别是什么?

A: 基于 API 的数据收集使用数据源提供的结构化和授权接口,以干净、可预测的格式(如 JSON 或 XML)获取信息。

主要区别:

  • 结构体: API 返回结构化数据,而抓取需要解析原始 HTML。
  • 可靠性: API 更加稳定,不太可能因为设计变化而中断,抓取可能会因为布局或代码更新而中断。
  • 权限: API 需要身份验证并且有使用限制,抓取可以访问任何公开可见的内容(尽管这可能会引发道德或法律问题)。
  • 速度和效率: API调用一般来说速度更快、效率更高,特别是对于大规模数据收集。
  • 注释: API 的使用受明确的服务条款管辖,如果操作不正确,抓取可能会违反网站的政策。

当可用时,API 通常是首选方法,但当 API 有限、不可用或限制太多时,抓取很有用。