在本综合指南中,我们将学习如何使用不同编程语言的 cURL 进行网页抓取 — Python 中的 cURL、Java 中的 cURL 和 PHP 中的 cURL。 cURL 是“Client URL”的缩写,是一种多功能命令行工具,用于跨各种网络协议传输数据,包括 HTTP、HTTPS、FTP 等。我们将尽力涵盖您需要了解的所有重要方面。无论您是经验丰富的程序员还是编码新手,学习如何在网页抓取项目中使用 cURL 都可以提高您的效率并允许您做许多不同的事情。让我们开始使用 Python、Java 和 PHP 进行网页抓取教程的 cURL!

目录

  1. 什么是卷曲?
  2. 什么是 cURL 用例?
  3. Python 中的 cURL
  • PycURL的安装
  • 发出 GET 请求
  • 发送POST请求
  • 发送自定义 HTTP 标头
  • 发送 JSON 数据
  • 处理重定向
  • 仅获取 HTTP 标头
  • PycURL 与请求
  1. Java 中的 cURL
  • 在 Java 中设置 cURL
  • 发出 GET 请求
  • 发送POST请求
  • 处理 HTTP 标头
  • 处理 JSON 数据
  • 跟随重定向
  • 错误处理
  • cURL 与 HttpClient
  1. PHP 中的 cURL
  • 在 PHP 中安装 cURL
  • 发出 GET 请求
  • 发送POST请求
  • 添加自定义 HTTP 标头
  • 发送 JSON 数据
  • 管理重定向
  • 错误处理
  • cURL 与 HttpRequest
  1. 跨语言 cURL 实现的比较
  2. 最后的思考
  3. 常见问题解答(FAQ)

什么是卷曲?

cURL 是“客户端 URL”的缩写,是一种功能强大的命令行工具,用于通过各种网络协议在服务器和客户端之间传输数据。它允许用户向网络服务器发出请求并从网站检索信息。凭借其多功能性,cURL 通常用于诸如获取网页、下载文件以及与 Web 服务交互等任务。

在网络抓取的背景下,cURL 是一种高效、有效地从网站提取数据的有价值的工具。其简单的语法和广泛的功能使其成为开发人员和数据爱好者的首选。

无论您是从单个网页获取数据还是执行复杂的 API 请求,cURL 都能提供完成抓取任务所需的灵活性和可靠性。

什么是 cURL 用例?

cURL 凭借其多功能性和易用性,在各个领域都有大量应用。 cURL 的一些常见用例包括:

cURL 用例
  1. 网页抓取:cURL 被广泛用于从网站抓取数据,因为它能够有效地发出 HTTP 请求并处理响应。开发人员经常利用 cURL 从网页中提取信息、进行市场研究以及收集数据进行分析。
  2. API测试:使用 cURL,开发人员可以通过发送 HTTP 请求并检查响应来轻松测试 RESTful API 并与之交互。这使其成为 API 开发和调试的宝贵工具。
  3. 文件传输:cURL 支持 FTP 和 SFTP 等协议,非常适合在服务器之间传输文件。它允许用户通过互联网安全地上传和下载文件。
  4. 网络诊断:系统管理员和网络工程师使用 cURL 来排除网络问题和诊断连接问题。它使他们能够检查服务器可用性、验证 SSL 证书并执行 DNS 查找。
  5. 自动化任务:cURL 可以集成到脚本和自动化工作流程中,以执行重复性任务,例如从网站获取数据、监控服务器运行状况和发送通知。

总体而言,cURL 是一种多功能且可靠的工具,适用于从网页抓取到网络诊断等各种任务,这使其成为开发人员和 IT 专业人员不可或缺的工具

Python 中的 cURL

将 cURL 与 Python 结合使用提供了一种与 Web 资源和 API 交互的强大方法。让我们探讨如何使用 PycURL 库执行各种任务。

PycURL的安装

要在Python中使用cURL,您需要安装PycURL库。您可以使用 Python 包安装程序 pip 来完成此操作。打开命令行界面并运行以下命令:

1
pip 安装 pycurl

发出 GET 请求

现在 PycURL 已安装,让我们发出一个简单的 GET 请求来从网站获取数据。下面是一个 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
进口 pycurl
io 进口 字节IO

# 初始化一个缓冲区来存储响应
缓冲区 = BytesIO()

# 创建一个新的 cURL 对象
c = pycurl.Curl()

# 设置要获取的URL
c.setopt(c.URL, 'https://example.com')

# 设置将响应写入缓冲区的选项
c.setopt(c.WRITEDATA, 缓冲区)

# 执行请求
c.perform()

# 关闭 cURL 对象
c.close()

# 检索并打印响应
响应 = buffer.getvalue()
打印(响应.解码('utf-8'))

发送POST请求

要使用 PycURL 发送 POST 请求,您需要设置 POSTFIELDS 选项。 您可以这样做:

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
进口 pycurl
io 进口 字节IO

# 初始化一个缓冲区来存储响应
缓冲区 = BytesIO()

# 创建一个新的 cURL 对象
c = pycurl.Curl()

# 设置发送POST请求的URL
c.setopt(c.URL, 'https://example.com/post')

# 设置POST数据
帖子数据 = '字段1=值1&字段2=值2'
c.setopt(c.POSTFIELDS, post_data)

# 设置将响应写入缓冲区的选项
c.setopt(c.WRITEDATA, 缓冲区)

# 执行请求
c.perform()

# 关闭 cURL 对象
c.close()

# 检索并打印响应
响应 = buffer.getvalue()
打印(响应.解码('utf-8'))

发送自定义 HTTP 标头

要随请求发送自定义 HTTP 标头,您可以使用 HTTPHEADER 选项。这是一个例子:

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
进口 pycurl
io 进口 字节IO

# 初始化一个缓冲区来存储响应
缓冲区 = BytesIO()

# 创建一个新的 cURL 对象
c = pycurl.Curl()

# 设置要获取的URL
c.setopt(c.URL, 'https://example.com')

# 设置自定义标头
标题 = ['用户代理:MyCustomUserAgent', 'X-我的标题:MyCustomHeaderValue']
c.setopt(c.HTTPHEADER, 标头)

# 设置将响应写入缓冲区的选项
c.setopt(c.WRITEDATA, 缓冲区)

# 执行请求
c.perform()

# 关闭 cURL 对象
c.close()

# 检索并打印响应
响应 = buffer.getvalue()
打印(响应.解码('utf-8'))

发送 JSON 数据

要在 POST 请求中发送 JSON 数据,您需要设置 POSTFIELDS 选项与 JSON 数据,并设置 Content-Type 标题到 application/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
进口 pycurl
进口 JSON
io 进口 字节IO

# 初始化一个缓冲区来存储响应
缓冲区 = BytesIO()

# 创建一个新的 cURL 对象
c = pycurl.Curl()

# 设置发送POST请求的URL
c.setopt(c.URL, 'https://example.com/post')

# 设置JSON数据
json_数据 = {'字段1': '值1', '字段2': '值2'}
post_data = json.dumps(json_data)
c.setopt(c.POSTFIELDS, post_data)

# 设置 Content-Type 标头
c.setopt(c.HTTPHEADER, [“内容类型:应用程序/ JSON”])

# 设置将响应写入缓冲区的选项
c.setopt(c.WRITEDATA, 缓冲区)

# 执行请求
c.perform()

# 关闭 cURL 对象
c.close()

# 检索并打印响应
响应 = buffer.getvalue()
打印(响应.解码('utf-8'))

处理重定向

默认情况下,cURL 自动遵循重定向。但是,您可以通过设置来禁用此行为 FOLLOWLOCATION 选项 0。 这是一个例子:

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
进口 pycurl
io 进口 字节IO

# 初始化一个缓冲区来存储响应
缓冲区 = BytesIO()

# 创建一个新的 cURL 对象
c = pycurl.Curl()

# 设置要获取的 URL(重定向的 URL)
c.setopt(c.URL, 'http://example.com/redirect')

# 禁用自动跟随重定向
c.setopt(c.FOLLOWLOCATION, 0)

# 设置将响应写入缓冲区的选项
c.setopt(c.WRITEDATA, 缓冲区)

# 执行请求
c.perform()

# 关闭 cURL 对象
c.close()

# 检索并打印响应
响应 = buffer.getvalue()
打印(响应.解码('utf-8'))

仅获取 HTTP 标头

要仅获取响应的 HTTP 标头,您可以将 HEADERFUNCTION 选项设置为自定义函数。这是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
进口 pycurl

# 定义一个函数来处理头部
DEF 进程头(标题行):
打印(header_line.decode('utf-8')。条())

# 创建一个新的 cURL 对象
c = pycurl.Curl()

# 设置要获取的URL
c.setopt(c.URL, 'https://example.com')

# 设置自定义标头处理函数
c.setopt(c.HEADERFUNCTION, process_header)

# 禁用主体输出
c.setopt(c.NOBODY, 1)

# 执行请求
c.perform()

# 关闭 cURL 对象
c.close()

PycURL 与请求

PycURL 与请求

Java 中的 cURL

在将 cURL 与 Java 集成时,了解如何在 Java 代码中有效地设置和使用 cURL 命令非常重要。通过利用 ProcessBuilder 类,我们可以从 Java 应用程序无缝执行 cURL 命令。

在 Java 中设置 cURL

要在 Java 中使用 cURL,我们将利用 ProcessBuilder 类从 Java 代码中执行 cURL 命令。点击 相关信息 了解如何在您的系统上安装 cURL。

安装后,确保您的系统上安装了 cURL。

1
2
3
4
5
6
7
8
9
10
进口 java.io.IO异常;

国家 卷曲设置 {
国家 静止 无效 (字符串 [] 参数) IOException,中断异常{
流程构建器 流程构建器 = 流程构建器(“卷曲”, “ - 版本”);
疗程过程 过程 = processBuilder.start();
process.waitFor();
系统.out.println(“cURL设置成功!”);
}
}

发出 GET 请求

让我们在 Java 中使用 cURL 发出一个简单的 GET 请求:

1
2
3
4
5
6
7
8
9
进口 java.io.IO异常;

国家 的GetRequest {
国家 静止 无效 (字符串 [] 参数) IOException,中断异常{
流程构建器 流程构建器 = 流程构建器(“卷曲”, “https://example.com”);
疗程过程 过程 = processBuilder.start();
process.waitFor();
}
}

发送POST请求

在 Java 中使用 cURL 发送 POST 请求:

1
2
3
4
5
6
7
8
9
进口 java.io.IO异常;

国家 发布请求 {
国家 静止 无效 (字符串 [] 参数) IOException,中断异常{
流程构建器 流程构建器 = 流程构建器(“卷曲”, “-X”, “ POST”, “-d”, “参数1=值1¶m2=值2”, “https://example.com”);
疗程过程 过程 = processBuilder.start();
process.waitFor();
}
}

处理 HTTP 标头

要在 cURL 请求中包含自定义 HTTP 标头:

1
2
3
4
5
6
7
8
9
进口 java.io.IO异常;

国家 自定义标头 {
国家 静止 无效 (字符串 [] 参数) IOException,中断异常{
流程构建器 流程构建器 = 流程构建器(“卷曲”, “-H”, “内容类型:应用程序/json”, “https://example.com”);
疗程过程 过程 = processBuilder.start();
process.waitFor();
}
}

处理 JSON 数据

要使用 cURL 在 POST 请求中发送 JSON 数据:

1
2
3
4
5
6
7
8
9
进口 java.io.IO异常;

国家 Json数据 {
国家 静止 无效 (字符串 [] 参数) IOException,中断异常{
流程构建器 流程构建器 = 流程构建器(“卷曲”, “-X”, “ POST”, “-H”, “内容类型:应用程序/json”, “-d”, “{\“核心价值\”}”, “https://example.com”);
疗程过程 过程 = processBuilder.start();
process.waitFor();
}
}

跟随重定向

在 Java 中使用 cURL 跟踪重定向:

1
2
3
4
5
6
7
8
9
进口 java.io.IO异常;

国家 跟随重定向 {
国家 静止 无效 (字符串 [] 参数) IOException,中断异常{
流程构建器 流程构建器 = 流程构建器(“卷曲”, “-L”, “https://example.com”);
疗程过程 过程 = processBuilder.start();
process.waitFor();
}
}

错误处理

处理 cURL 请求中的错误:

1
2
3
4
5
6
7
8
9
10
11
12
进口 java.io.IO异常;

国家 错误处理 {
国家 静止 无效 (字符串 [] 参数) IOException,中断异常{
流程构建器 流程构建器 = 流程构建器(“卷曲”, “https://nonexistent-url.com”);
疗程过程 过程 = processBuilder.start();
INT 退出代码 = process.waitFor();
if (退出代码!= 0){
系统.out.println(“发生了错误: ” + 退出代码);
}
}
}

cURL 与 HttpClient

cURL 与 HttpClient

PHP 中的 cURL

在本节中,我们将探讨如何在 PHP 中使用 cURL 来执行各种任务,例如发出 GET 和 POST 请求、处理自定义标头、发送 JSON 数据、管理重定向、错误处理以及将 cURL 与 HttpRequest 类。

在 PHP 中安装 cURL

在 PHP 中使用 cURL 函数之前,我们必须安装 libcurl 库,它是 cURL 的基础。需要注意的是,这不是一个 PHP 包;而是一个 PHP 包。它是实际的 cURL 库本身。

确保您的 PHP 安装中启用了 cURL 扩展。您可以通过在 PHP 配置文件 (php.ini) 中查找“cURL”来检查这一点。

1
2
3
4
5
6
7
8
<?php
// 检查cURL扩展是否启用
if (!函数存在('卷曲初始化')){
(“cURL 扩展未启用。”);
} 其他 {
回音 “cURL 扩展已启用。”;
}
?>

发出 GET 请求

要在 PHP 中使用 cURL 发出 GET 请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// 初始化 cURL 会话
$ch = curl_init();

// 设置 cURL 选项
卷曲设置选项($ch, CURLOPT_URL, 'https://example.com');
卷曲设置选项($ch, CURLOPT_RETURNTRANSFER, true);

// 执行 cURL 会话
$响应 = curl_exec($ch);

// 关闭 cURL 会话
curl_close($ch);

// 输出响应
回音 $响应;
?>

发送POST请求

在 PHP 中使用 cURL 发送 POST 请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// 初始化 cURL 会话
$ch = curl_init();

// 设置 cURL 选项
卷曲设置选项($ch, CURLOPT_URL, 'https://example.com');
卷曲设置选项($ch, 卷曲_POST, true);
卷曲设置选项($ch, CURLOPT_POSTFIELDS, '参数1=值1¶m2=值2');
卷曲设置选项($ch, CURLOPT_RETURNTRANSFER, true);

// 执行 cURL 会话
$响应 = curl_exec($ch);

// 关闭 cURL 会话
curl_close($ch);

// 输出响应
回音 $响应;
?>

添加自定义 HTTP 标头

要在 PHP 中的 cURL 请求中包含自定义 HTTP 标头:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// 初始化 cURL 会话
$ch = curl_init();

// 设置 cURL 选项
卷曲设置选项($ch, CURLOPT_URL, 'https://example.com');
卷曲设置选项($ch, CURLOPT_HTTPHEADER, 排列(“内容类型:应用程序/ JSON”));
卷曲设置选项($ch, CURLOPT_RETURNTRANSFER, true);

// 执行 cURL 会话
$响应 = curl_exec($ch);

// 关闭 cURL 会话
curl_close($ch);

// 输出响应
回音 $响应;
?>

发送 JSON 数据

要在 PHP 中使用 cURL 在 POST 请求中发送 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
<?php
// JSON 数据
$数据 = 排列('钥匙' => 价值);
$json_数据 = json_encode($数据);

// 初始化 cURL 会话
$ch = curl_init();

// 设置 cURL 选项
卷曲设置选项($ch, CURLOPT_URL, 'https://example.com');
卷曲设置选项($ch, 卷曲_POST, true);
卷曲设置选项($ch, CURLOPT_POSTFIELDS, $json_数据);
卷曲设置选项($ch, CURLOPT_HTTPHEADER, 排列(“内容类型:应用程序/ JSON”));
卷曲设置选项($ch, CURLOPT_RETURNTRANSFER, true);

// 执行 cURL 会话
$响应 = curl_exec($ch);

// 关闭 cURL 会话
curl_close($ch);

// 输出响应
回音 $响应;
?>

管理重定向

在 PHP 中使用 cURL 处理重定向:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// 初始化 cURL 会话
$ch = curl_init();

// 设置 cURL 选项
卷曲设置选项($ch, CURLOPT_URL, 'https://example.com');
卷曲设置选项($ch, CURLOPT_FOLLOWLOCATION, true);
卷曲设置选项($ch, CURLOPT_RETURNTRANSFER, true);

// 执行 cURL 会话
$响应 = curl_exec($ch);

// 关闭 cURL 会话
curl_close($ch);

// 输出响应
回音 $响应;
?>

错误处理

在 PHP 中处理 cURL 请求中的错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// 初始化 cURL 会话
$ch = curl_init();

// 设置 cURL 选项
卷曲设置选项($ch, CURLOPT_URL, 'https://nonexistent-url.com');
卷曲设置选项($ch, CURLOPT_RETURNTRANSFER, true);

// 执行 cURL 会话
$响应 = curl_exec($ch);

// 检查是否有错误
if(卷曲错误号($ch)){
回音 '错误: ' . 卷曲错误($ch);
}

// 关闭 cURL 会话
curl_close($ch);

// 输出响应
回音 $响应;
?>

cURL 与 HttpRequest

cURL 与 HttpRequest

跨语言 cURL 实现的比较

cURL Python、Java、PHP

最后的思考

cURL 是一种多功能工具,用于从命令行或使用 Python、Java 和 PHP 等编程语言发出 HTTP 请求。无论您是从网站抓取数据、与 API 交互还是测试 Web 服务,cURL 都提供了一种高效执行这些任务的便捷方法。通过掌握 cURL,您可以开启网络抓取和数据提取的无限可能。无论您是初学者还是经验丰富的开发人员,学习如何有效使用 cURL 都可以大大提高您的工作效率,让您轻松完成各种任务。

如果您有兴趣了解有关网络抓取的更多信息,请阅读我们的以下指南。

📜 用于机器学习的网页抓取
📜 如何在网页抓取中绕过验证码
📜 如何使用 Chatgpt 抓取网站
📜 从网站上抓取表格
📜 如何抓取 Redfin 属性数据

如果您有任何问题或反馈,我们的 支持团队 随时为您的网络抓取之旅提供帮助。快乐刮擦!

常见问题解答(FAQ)

问:cURL 有何用途?

cURL 主要用于通过各种网络协议传输数据,包括 HTTP、HTTPS、FTP 等。它允许用户与 Web 服务交互、从网站获取数据以及自动执行涉及 HTTP 请求的任务。

问:cURL 可以用于网页抓取吗?

是的,cURL 可用于通过发出 HTTP 请求从网页检索 HTML 内容来进行网页抓取。然而,使用 Python 等语言(例如 BeautifulSoup 或 Scrapy)中的专用网页抓取库来执行更高级的抓取任务通常更方便。

问:如何在 PHP 中安装 cURL?

要在 PHP 中使用 cURL 函数,您需要确保在 PHP 安装中启用 cURL 扩展。此外,您可能需要安装 libcurl 包,这是 cURL 扩展的先决条件。这通常可以通过系统的包管理器或通过下载和编译来完成 libcurl 来自官方网站。

问:与其他方法相比,使用 cURL 有何优势?

cURL 具有多种优势,包括处理各种网络协议的多功能性、用于快速测试和调试的命令行界面以及跨多种编程语言的可用性。此外,cURL 还提供处理重定向、自定义 HTTP 标头以及以 JSON 等不同格式发送数据的功能,使其适用于广泛的用例。