2024年5月28日发(作者:)

Pycurl的简单使用与对比

在几次莫名其妙的退出之后,我终于有点放弃urllib2,开始尝试其他的模块。

看到很多人推荐wget和pycurl。wget是独立软件,所以就没考虑。pycurl的

话,得益于基于c语言开发的curl性能强劲,使得普遍反映它效率快、稳定性

高、功能强大。于是决定尝试之,简单测试了下(见后面),如果用平均值来比

较的话,pycur所消耗的时间远小于urllib2。这对于爬虫来讲,累积之后变化

就非常可观了。

PycURL 是一个非常快速(参考多并发操作)和丰富完整特性的,但是有点复杂

的接口。如果你需要些简单或纯 Python 的模块,你可以参考一下 urllib2 或

urlgrabber 。通过 / 了解 PycURL 的文档信

息及其其他信息。因为 PycURL 是对 libcurl 的一个封装,使用时还需要参考

libcurl 的文档(针对 C 的)。

pycurl的安装

获取和安装libcurl非常简单,取决于您所运行的Linux版本,如果你也使用

ubuntu,那只需要使用ap-get就可以轻松安装。

$ sudo apt-get libcurl3

$ sudo apt-get python-pycurl

如果想查看下系统内pycurl版本信息可以:

1 >>> import pycurl

2 >>> n

3 'libcurl/7.19.7 GnuTLS/2.8.5 zlib/1.2.3.3 libidn/1.15'

如上所示,我的系统里的libcurl是7.19.7的最新版本。

pycurl的使用:

() -> Curl object

这个函数创建一个同 libcurl中的CURL处理器相对应的Curl对象.Curl对象自

动的设置CURLOPT_VERBOSE为0, CURLOPT_NOPROGRESS为1,提供一个默认的

CURLOPT_USERAGENT和设置CURLOPT_ERRORBUFFER指向一个私 有的错误缓冲区.

lti() -> CurlMulti object

这个函数创建一个新的与libcurl中的CURLM处理器相 对应的CurlMulti对象.

are() -> CurlShare object

这个函数创建一个新的与libcurl中的CURLSH处理器 相对应的CurlShare对

象.CurlShare对 象可以在Curl对象上传递SHARE选项参数. [待续]

其中:

Curl对象具有以下方法:

close() -> None 对应的是 libcurl中的curl_easy_cleanup方法.当Curl对

象不再被引用时pycurl会自动调用这个方法,但也可直接地调用这个方法.

perform() -> None 对应于libcurl中的curl_easy_perform方法.

setopt(option, value) -> None 对应于libcurl中的curl_easy_setopt方法,

option使用libcurl中的CURLOPT_*常量来指定,只可惜CURLOPT_前缀现在已经

被去掉了.value的数据类型依赖于 option,它可以是一个字符串,整型,长整型,

文件对象,列表或是函数.

Example usage:

import pycurl

c = ()

(, "/")

(ADER, ["Accept:"])

import StringIO

b = IO()

(UNCTION, )

(LOCATION, 1)

(IRS, 5)