in

如何在Python中使用cURL?

如何在Python中使用cURL

cURL是一个最流行的命令行工具,用于跨网页传输信息。它具有高度的可配置性,并提供多种编程语言的库,使其成为自动网页爬取的一个很好的选择。它能很好地工作的语言之一是Python,因其通用性和可读性而被广泛使用。

cURL和Python一起可以帮助你编写API请求的脚本,调试复杂的实例,并从网页上检索任何类型的数据。本文将演示如何结合使用这两个工具,特别是对于POST和GET请求。我们将使用 PycURL 包。


什么是cURL?

cURL是一个开源的命令行工具和库,用于在命令行或脚本中用URL语法传输数据。它支持近二十六种协议;在它能处理的多种复杂任务中,包括用户认证、FTP上传和测试REST APIs。

在Python中,cURL使用PycURL向服务器传输请求和数据。PycURL的功能是作为Python中libcURL库的一个接口。

几乎每一种编程语言都可以使用REST APIs来访问托管在网页服务器上的端点。与其使用Java、Python、C++、JavaScript或Ruby创建基于网页的调用,你可以使用cURL来演示调用,它提供了一种独立于语言的方式来显示HTTP请求及其响应。然后,你可以将这些请求翻译成适合你的语言的格式。

下面是cURL提供的一些好处。

  • 它是多功能的。它几乎适用于所有的操作系统和设备,并支持各种各样的协议,包括HTTP、FILE和FTP。
  • 它有助于测试端点,确定它们是否在工作。
  • 它是一个低级别的命令行工具,为传输数据/HTTP请求提供了很好的性能。
  • 它提供了关于发送或接收内容的报告,这可能对故障排除有帮助。

为什么要爬取网页?

网页爬取有时可能是访问互联网信息的唯一途径。很多数据在CSV导出或API中是不可用的。例如,当你可以下载一个网页论坛上的每一个帖子时,想想你可以做哪些类型的分析。

网页爬取是一种自动化技术,用于从网站上提取大量的非结构化数据,然后以结构化格式存储。刮取网站有各种方法,从API到自己编写代码。


在Python中使用cURL

在你开始之前,有一些先决条件。你需要对Python的语法有基本的了解,或者至少要有不同语言的初级编程经验。你还应该了解基本的网页概念,如协议和客户端-服务器通信。

你需要安装以下程序。

Python

  • 选择要下载的 Python 版本,以及适当的 Python 可执行安装程序。本教程使用Windows可执行安装程序x86-64,下载的大小差不多是25MB。
  • 当你下载完Python设置后,运行安装程序。

Pip

如果你选择的是旧版本的 Python,它很可能不包括 pip,一个与 Python 程序一起工作的软件包管理系统。请确保安装它,因为大多数软件包都推荐使用 pip,特别是当工作必须在虚拟环境中进行时。

要确认pip已经安装,请遵循以下步骤。

  • 开始菜单中,选择cmd
  • 打开命令提示符应用程序,输入pip — 版本
  • 如果pip已经安装,它将显示版本号。如果还没有安装,将出现以下信息。
"pip" is not considered to be an external or internal command. A batch file is a program to operate.
PycURL

PycURL

PycURL 需要确保它所构建的 SSL 库与 libcURL 以及 PycURL 所运行的是同一个库。PycURL 的 setup.py 利用 curl-config 来确定这一点。

PycURL

certifi

Certifi用来提供Mozilla根证书的SSL。你可以在项目描述网站上阅读更多关于certifi的信息。

certifi


提出GET请求

你将使用GET请求从HTTP服务器获取资源。为了创建一个GET请求,在cURL和一个网页之间建立一个连接。

import pycurl
import certifi
from io import BytesIO
# Creating a buffer as the cURL is not allocating a buffer for the network response
buffer = BytesIO()
c = pycurl.Curl()
#initializing the request URL
c.setopt(c.URL, 'https://www.scrapingbee.com/')
#setting options for cURL transfer  
c.setopt(c.WRITEDATA, buffer)
#setting the file name holding the certificates
c.setopt(c.CAINFO, certifi.where())
# perform file transfer
c.perform()
#Ending the session and freeing the resources
c.close()

你需要创建一个缓冲区,因为cURL并没有为网页响应分配一个缓冲区。使用buffer = BytesIO()。

#retrieve the content BytesIO
body = buffer.getvalue()
#decoding the buffer 
print(body.decode('iso-8859-1'))

输出应该是这样的:

输出


提出POST请求

POST方法是向HTTP服务器发送数据,或者创建或更新数据的默认方式。

你将使用c.setopt(c.POSTFIELDS, postfields)函数用于POST请求。这意味着下面的程序将向服务器发送JSON数据,方法是在变量数据中填入要发送的JSON数据,并将 “内容类型 “指定为 “application/json”。

Making POST Requests

注意c.POSTFIELDS 是用来设置HTTP请求为POST操作。你可以从Python文档中获得更多关于urlencode的信息。


搜索响应

要在响应中搜索特定的数据,利用c.getinfo()API来访问更多的数据。回到前面提到的GET例子,在最后添加这两行。

Searching Responses

你必须在c.close()之前调用c.getinfo(c.RESPONSE_CODE)),否则代码将无法工作。你可以从PycURL文档中获得更多关于getinfo()的细节。


简单爬取

当你执行代码来爬取网页时,它请求你提到的URL。网页服务器传输数据并允许你访问你的HTML或XML页面作为回应。该代码分析HTML或XML页面,然后定位并提取信息。

要通过网页爬取和Python收集数据,请遵循以下步骤。

  • 寻找你想爬取的URL。
  • 检查该页面,找到你想要的数据。
  • 编写你的代码并提取数据。
  • 将数据保持在规定的格式。

作为一个例子,这里有一个简单的Python代码来展示HTML响应解析代码的样子。这段代码遵循了前面提供的分享缓冲区变量的例子。

Simple Scraping

对于输出,使用['导航','JS插件']

你可以在文档中找到更多关于HTML解析器Python库的信息。


将响应数据写到文件中

向文件写入响应的最简单方法是使用open()方法,并加入你想要的属性。

Writing Response Data to a File

[文中代码源自Scrapingbee]

这将打开一个名为MyParsed.txt的文件。将解析后的StartEndTags加入其中并关闭该文件。

你可以在文档中找到更多关于如何使用打开方法的信息。


总    结

正如你所看到的,PycURL 在如何从网页上抓取信息以及其他任务(如用户认证或 SSL 连接)方面为你提供了很大的灵活性。这是一个强大的工具,可以很好地与你的Python程序配合,特别是在使用PycURL时。与Requests和其他流行的Python中的HTTP客户端相比,PycURL是一个低级别的包。它没有那么容易使用,但如果你需要并发连接的话,速度会快很多。

blank

Written by 爬取 大师

阿里P12级别选手,能够突破各种反爬, 全能的爬取大师,擅长百万级的数据抓取!没有不能爬,只有你不敢想,有爬取项目可以联系我邮箱 [email protected] (带需求和预算哈, 不然多半不回复)