首页IT科技pycurl安装(Pycurl的简单使用与对比 一只橘子的异想世界)

pycurl安装(Pycurl的简单使用与对比 一只橘子的异想世界)

时间2025-08-04 09:00:38分类IT科技浏览4542
导读:标签: python,pycurl 在几次莫名其妙的退出之后,我终于有点放弃urllib2,开始尝试其他的模块。看到很多人推荐wget和pycurl。wget是独立软件,所以就没考虑。pycurl的话,得益于基于c语言开发的curl性能强劲,使得普遍反映它效率快、稳定性高、功能强大。于是决定尝试...

标签: python,pycurl

在几次莫名其妙的退出之后            ,我终于有点放弃urllib2                  ,开始尝试其他的模块            。看到很多人推荐wget和pycurl                  。wget是独立软件       ,所以就没考虑       。pycurl的话         ,得益于基于c语言开发的curl性能强劲                  ,使得普遍反映它效率快            、稳定性高                  、功能强大         。于是决定尝试之          ,简单测试了下(见后面)      ,如果用平均值来比较的话                  ,pycur所消耗的时间远小于urllib2                  。这对于爬虫来讲             ,累积之后变化就非常可观了          。

PycURL 是一个非常快速(参考多并发操作)和丰富完整特性的   ,但是有点复杂的接口      。如果你需要些简单或纯 Python 的模块                  ,你可以参考一下urllib2 或 urlgrabber                   。通过 http://pycurl.sourceforge.net/ 了解 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 >>> pycurl.version 3 libcurl/7.19.7 GnuTLS/2.8.5 zlib/1.2.3.3 libidn/1.15

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

pycurl的使用:

pycurl.Curl() -> Curl object

这个函数创建一个同 libcurl中的CURL处理器相对应的Curl对象.Curl对象自动的设置CURLOPT_VERBOSE为0, CURLOPT_NOPROGRESS为1,提供一个默认的CURLOPT_USERAGENT和设置CURLOPT_ERRORBUFFER指向一个私 有的错误缓冲区.

pycurl.CurlMulti() -> CurlMulti object

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

pycurl.CurlShare() -> 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 = pycurl.Curl() c.setopt(pycurl.URL, "http://www.python.org/") c.setopt(pycurl.HTTPHEADER, ["Accept:"]) import StringIO b = StringIO.StringIO() c.setopt(pycurl.WRITEFUNCTION, b.write) c.setopt(pycurl.FOLLOWLOCATION, 1) c.setopt(pycurl.MAXREDIRS, 5) c.perform() print b.getvalue()

getinfo(option) -> Result 对应于 libcurl中的curl_easy_getinfo方法, option同样使用libcurl中的CURLOPT_*常量来指定,只可惜CURLOPT_前缀现在已经被去掉了. Result包含一个整数,浮点数或字符串,这都信赖于给定的option.getinfo方法不能在perform方法未调用或完成之前进行调用.

Example usage:

import pycurl c = pycurl.Curl() c.setopt(pycurl.URL, "http://sf.net") c.setopt(pycurl.FOLLOWLOCATION, 1) c.perform() print c.getinfo(pycurl.HTTP_CODE), c.getinfo(pycurl.EFFECTIVE_URL) ... --> 200 "http://sourceforge.net/"

errstr() -> String 返回这个处理器中内部libcurl错误缓冲区的字符串表示.

其他的就以后再翻译吧。

urilib2 VS pycurl的一个简单对比

编码如下            ,就是取一批url                  ,然后分别用urllib2和pycurl的方法来获取页面内容       ,计算它们各自所消耗的时间               。最后比较平均时间                   。

我这跑了一下         ,相关的数据如下                  ,大概pycurl能比urllib2减少20%以上的消耗时间    。

1: urllib2 平均时间:0.379438, pycurl平均时间:0.279213 2: urllib2 平均时间:0.568966, pycurl平均时间:0.395201 3: urllib2 平均时间:0.606843, pycurl平均时间:0.459965 4: urllib2 平均时间:0.381241, pycurl平均时间:0.239673 5: urllib2 平均时间:0.503715, pycurl平均时间:0.543600 6: urllib2 平均时间:0.291307, pycurl平均时间:0.188492 7: urllib2 平均时间:0.449666, pycurl平均时间:0.299233

相关代码如下:

1: #coding=utf-8 2: import os 3: import datetime as dt 4: import time 5: import urllib2 6: import pycurl 7: import cStringIO as StringIO 8: 9: 测试用程序          ,用于比较pycurl和urllib2效率 10: 一只橘子 2010.12.05 11: 12: 13: def fetch_url(menuurl = ""): 14: 从url获取目录页内容;返回返回页面内容字符串 15: 使用urllib2来实现 16: 17: the_page = "" 18: try: 19: #下载页面 20: req = urllib2.Request(menuurl) 21: req.add_header(User-Agent, Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12) 22: #设置超时 23: response = urllib2.urlopen(req, timeout = 30) 24: the_page = response.read() 25: except Exception, e: 26: crawlerlog("+++++++++fetch_url():Error4: %s; menuurl: %s" % (e, menuurl)) 27: return the_page 28: 29: def fetch_url2(menuurl = ""): 30: 从url获取目录页内容;返回返回页面内容字符串 31: 使用pycurl来实现 32: 33: the_page = "" 34: try: 35: #下载页面 36: req = pycurl.Curl() 37: req.setopt(pycurl.URL, menuurl) 38: # 设置超时 39: req.setopt(pycurl.TIMEOUT, 30) 40: fp = StringIO.StringIO() 41: req.setopt(pycurl.WRITEFUNCTION, fp.write) 42: req.setopt(pycurl.USERAGENT, Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12) 43: req.perform() 44: the_page = fp.getvalue() 45: except Exception, e: 46: crawlerlog("+++++++++fetch_url():Error555: %s; menuurl: %s" % (e, menuurl)) 47: return the_page 48: 49: def crawlerlog(doc): 50: 保存日志 51: 52: logfile = u"./crawler_error.log" 53: try: 54: out = open(logfile, "a") 55: out.write(" Time: %s %s \n" % (dt.datetime.now(), doc)) 56: except Exception,e: 57: print " Error: %s" % e 58: finally: 59: out.close() 60: 61: def url_vs_curl(): 62: print "开始:",dt.datetime.now() 63: import timeit 64: link = [http://www.baidu.com/, http://www.sina.com.cn, http://www.qq.com, http://www.sohu.com, http://www.163.com/, http://www.ifeng.com/, http://www.cctv.com/default.shtml, http://www.xinhuanet.com/, http://www.people.com.cn/, http://cn.msn.com/, http://www.google.cn/, http://cn.yahoo.com/, http://www.amazon.cn/?source=2009hao123famousdaohang, http://www.chinamobile.com/, http://www.pconline.com.cn/, http://www.chinahr.com/, http://www.gov.cn/, http://www.zhcw.com/, http://www.autohome.com.cn/, http://www.zhaopin.com/Market/hao123.jsp, http://fund.eastmoney.com/, http://www.eastmoney.com/, http://www.xiaonei.com/, http://www.soufun.com/, http://www.51.com/, http://www.rayli.com.cn/, http://youa.baidu.com/, http://www.360.cn/, http://www.ctrip.com/, http://www.xcar.com.cn/, http://www.qq163.com, http://www.samsung.com/, http://www.zol.com.cn/, http://www.taobao.com/, http://www.icbc.com.cn/, http://www.sto.cn, http://www.dianping.com, http://www.gougou.com, http://www.ct10000.com] 65: link +=[http://www.qidian.com/, http://www.readnovel.com/, http://www.hongxiu.com/, http://www.bookge.com/, http://www.jjwxc.net/, http://hjsm.tom.com/, http://www.4yt.net/, http://www.cuiweiju.com/, http://book.sina.com.cn/, http://www.xxsy.net/, http://www.wansong.net/, http://www.myfreshnet.com/, http://www.fmx.cn/, http://www.xs8.cn/, http://www.rongshuxia.com/, http://www.booksky.org/, http://www.zhulang.com/, http://www.3320.net/, http://www.17k.com/, http://www.xhsd.net/, http://www.qukanshu.com/, http://www.fbook.net/, http://www.duyidu.com/, http://www.soso999.com/, http://www.junzitang.com/, http://msn.hongxiu.com/, http://www.yuanwen.com/, http://top.baidu.com/book.html, http://www.lcread.com/, http://www.sodu.com.cn/, http://www.cc222.com/, http://www.feiku.com/, http://book.hqdoor.com/, http://book.sooyuu.com/, http://www.52eshu.com/, http://bbs.91txt.com/, http://book.qq.com/, http://book.sohu.com/, http://www.baidu.com/search/guoxue/dir/fenlei.html, http://wind.yinsha.com/, http://www.duzhe.com/, http://www.storychina.cn/, http://www.shigeku.org/, http://www.goodmood.cn/, http://www.nlc.gov.cn/, http://www.qnwz.cn/, http://wenxue.xilu.com/] 66: link +=[http://www.ganji.com/, http://www.58.com/, http://www.baixing.com/, http://www.263.com/, http://www.kuxun.cn/, http://www.mangocity.com/, http://www.qunar.com/, http://www.dianping.com/, http://www.fantong.com/, http://www.55bbs.com/, http://www.19lou.com/, http://www.koubei.com/, http://www.nike.com.cn/, http://www.li-ning.com.cn/, http://www.bosideng.com/, http://www.pirateship.com.cn/, http://www.goelia.com.cn/, http://www.adidas.com/, http://www.converse.com.cn/, http://www.romon.com/index.php, http://www.youngor.com/, http://www.etam.com.cn, http://www.heilanhome.com/, http://www.mizuno.com.cn/, http://www.goldlion-china.com/, http://www.phland.com.cn/, http://www.betu.com.hk/, http://www.puma.com.cn/, http://www.anta.com/, http://www.pierrecardin.com.cn/, http://www.bobdog.com.cn/, http://www.idaphne.com/, http://www.e-giordano.com/, http://www.361sport.com/, http://www.levi.com.cn/, http://www.lee.com.cn/, http://www.shanshan.com/, http://www.semir.com, http://www.versace.com/flash.html, http://www.k-boxing.com/, http://only.nzn.cn/, http://www.pb89.com/%20, http://www.aimer.com.cn/, http://www.balenciaga.com, http://www.ordifen.com.cn/, http://www.ochirly.com/, http://www.uggaustralia.com/, http://www.jshyx.com/, http://www.givenchy.com/default.php, http://www.thenorthface.com.cn/, http://www.tissot.com.hk/, http://www.azona.com.hk/, http://www.3suisses.com.cn/, http://www.valentino.it/, http://www.yishion.com.cn/, http://www.chowtaiseng.com/, http://www.tsljewellery.com/, http://www.jeanswest.com/, http://www.baoxiniao.com.cn/, http://www.qsyr.com/%20, http://www.septwolves.com/, http://www.baleno.com.hk/, http://www.belle.com.cn/, http://www.teenmix.com.cn/, http://www.fairwhale.com.cn/, http://www.swatch.com.cn/, http://www.staccato.com/, http://www.daphne.com.cn/, http://www.c-banner.com/, http://www.xtep.com.cn/, http://www1.jeanswest.com.cn/, http://www.kappa.com.cn/, http://www.laofengxiang.com/, http://www.cnhqt.com/, http://www.tatashoes.com.cn/, http://www.robinhood.com.cn/, http://www.doublestar.com.cn/, http://www.ozarkgear.com.cn/, http://www.aokang.com.cn/, http://www.ctf.com.cn/, http://www.crpttan.com/, http://www.calvinklein.com/, http://www.citizen.com.cn/, http://www.longines.com/, http://www.jackjonescn.net/, http://www.famoustone.com/, http://www.kfc.com.cn/, http://www.bjyoshinoya.com.cn/, http://www.starbucks.cn/, https://cdn.yuucn.cn/wp-content/uploads/2022/08/1660055395-26ad0f67244c1d8.icoke.cn/, http://www.mengniu.com.cn/, http://www.mcdonalds.com.cn/, http://www.yonghe.com.cn/, http://www.ubccn.com/, http://www.dicos.com.cn/, http://www.yili.com/, http://www.pizzahut.com.cn/, http://www.quanjude.com.cn/direct.php, http://www.nescafe.com.cn/, http://www.masterkong.com.cn/, http://www.heinz.com.cn/, http://www.origus.com/, http://www.xfy.com.cn/, http://www.haagendazs.com.cn/, http://www.wyeth.com.cn/, http://www.moutaichina.com/index.asp, http://www.tsingtao.com.cn/, http://www.meadjohnson.com.cn/, http://www.dumex.com.cn/, http://www.wuliangye.com.cn/, http://www.zkungfu.com/, http://www.dovechocolate.com.cn/, http://www.ganso.com.cn/%20%20%20, http://www.beingmate.com/, http://www.waffleboy.com.cn/, http://www.holiland.com.cn/, http://www.goldenjaguar.com/, http://www.huiyuan.com.cn/%20%20%20, http://www.hsufuchifoods.com/%20%20%20%20, http://www.maybellinechina.com/, http://www.dabao.com/, http://www.lorealchina.com/, http://www.shiseidochina.com/, http://www.esteelauder.com.cn/, http://www.avon.com.cn/PRSuite/home/home.jsp, http://www.tjoy.biz/, http://www.lancome.com.cn/_zh/_cn/index.aspx, http://www.kose.co.jp/, http://www.h2oplus.com.hk/, http://www.yuesai.com.cn/, http://www.nivea.com.cn/, http://www.chanel.com/, http://www.clinique.com.cn/index.tmpl?ngextredir=1, http://www.ponds.com.cn/, http://www.vichy.com.cn/, http://www.efu.org.cn/, http://www.laneigechina.com/Front-Page/index2.jsp, http://www.olay.com.cn/, http://www.guerlain.com.cn/, http://www.aupres-shiseido.com.cn/, http://www.dior.com/pcd/International/JSP/Home/prehomeFlash.jsp, http://www.herborist.com.cn/, http://www.dhc.net.cn/, http://www.ysl.com/, http://www.kose.com.cn/, http://www.liangfei.com/, http://www.tayoi.com/, http://www.chcedo.com/, http://www.head-shoulders.com.cn/, http://www.slek.com.cn/, http://www.mentholatum.com.cn/, http://www.pg.com.cn/, http://www.china-ajjj.com/, http://www.rejoice.com.cn/, http://www.cnnice.com/, http://www.watsons.com.cn/, http://www.unilever.com.cn/, http://www.ikea.com/cn/zh/, http://www.pantene.com.cn/, http://www.colgate.com.cn/app/Colgate/CN/HomePage.cvsp, http://www.auchan.com.cn/, http://www.c-bons.com.cn/, http://www.carrefour.com.cn/, http://www.vs.com.cn/, http://www.crest.com.cn/, http://www.tongrentang.com/, http://www.amway.com.cn/index.aspx, http://www.wal-martchina.com/, http://www.tupperware.com.cn/, http://www.ourlotus.com/, http://www.skyworth.com/cn/, http://www.sony.com.cn/, http://www.siemens.com.cn/, http://www.gree.com.cn/, http://www.shinco.com/, http://www.midea.com.cn/, http://www.samsung.com.cn/, http://www.hitachi-shha.com.cn/, http://www.electrolux.com.cn/, http://www.toshiba.com.cn/, http://www.panasonic.com.cn/, http://www.canon.com.cn/, http://www.tcl.com/, http://www.lg.com.cn/, http://cn.changhong.com/, http://www.haier.com/, http://www.philips.com.cn/, http://www.konka.com/, http://www.rsd.com.cn/, http://www.supor.com.cn/, http://www.fotile.com/, http://www.cnsuning.com/, http://www.sharp.cn/, http://www.galanz.com.cn/, http://www.chinamacro.cn/, http://www.robam.com/, http://www.gome.com.cn/, http://www.joyoung.com.cn/, http://www.staccato.com/, http://www.meiling.com/, http://www.fushibao.com/, http://www.sacon.cn/, http://www.yongle.com.cn/, http://www.xinfei.com/] 67: t_url = [] #urllib2 每个url的消耗时间的列表 68: t_curl = [] #pycurl 每个url的消耗时间的列表 69: f = "./time.csv" #保存相关数据      ,供进一步分析 70: inf = open(f,a) 71: for index, each in enumerate(link): 72: # urllib2 73: a = time.time() 74: aa = fetch_url(each) 75: b = time.time() 76: # pycurl 77: bb = fetch_url2(each) 78: c = time.time() 79: t_url.append(b-a) 80: t_curl.append(c-b) 81: # 保存urllib2的数据 82: sum_url=0 83: inf.write("urllib2\n") 84: for each in t_url: 85: inf.write(str(each)+"\n") 86: sum_url += each 87: inf.write("\n\n") 88: # 保存pycurl的数据 89: inf.write("pycurl\n") 90: sum_curl = 0 91: for each in t_curl: 92: inf.write(str(each)+"\n") 93: sum_curl += each 94: print "urllib2 平均时间:%f, pycurl平均时间:%f" % (sum_url*1.0/len(t_url), sum_curl*1.0/len(t_curl)) 95: inf.close() 96: print "结束:",dt.datetime.now() 97: 98: if __name__ == "__main__": 99: for i in xrange(7): 100: url_vs_curl()

附相关资料:

urllib2是python的一个获取url(Uniform Resource Locators                  ,统一资源定址器)的模块            。它用urlopen函数的形式提供了一个非常简洁的接口                  。这使得用各种各样的协议获取url成为可能       。它同时 也提供了一个稍微复杂的接口来处理常见的状况-如基本的认证             ,cookies   ,代理等等         。这些都是由叫做opener和handler的对象来处理的                  。urllib2属于python内置模块          。

Libcurl (http://curl.haxx.se/libcurl/)的介绍:

libcurl 是免费而且易于使用的客户端的 URL 传输库                  ,支持 FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 和 LDAP      。libcurl 支持 HTTPS 认证                , HTTP POST, HTTP PUT, FTP 上传, kerberos, 基于 HTTP 表单的上传               ,代理                   ,cookies    ,用户名+密码认证            ,文件传输恢复                  ,http 代理封装等! libcurl 是高度可移植的       ,它在大量平台上都有构建和一致的工作         ,包括: Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HP-UX, IRIX, AIX, Tru64, Linux, Windows, Amigo, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS 和更多...... libcurl 是免费       、线程安全         、IPv6 安全                  、特性丰富                  ,良好支持和快速的                  。

pycurl官方地址http://pycurl.sourceforge.net 官网上有各个版本的pycurl和相关文档             。

$ sudo apt-get  libcurl3 $ sudo apt-get  python-pycurl

Example usage:

import pycurl c = pycurl.Curl() c.setopt(pycurl.URL, "http://www.python.org/") c.setopt(pycurl.HTTPHEADER, ["Accept:"]) import StringIO b = StringIO.StringIO() c.setopt(pycurl.WRITEFUNCTION, b.write) c.setopt(pycurl.FOLLOWLOCATION, 1) c.setopt(pycurl.MAXREDIRS, 5) c.perform() print b.getvalue()

Example usage:

import pycurl c = pycurl.Curl() c.setopt(pycurl.URL, "http://sf.net") c.setopt(pycurl.FOLLOWLOCATION, 1) c.perform() print c.getinfo(pycurl.HTTP_CODE), c.getinfo(pycurl.EFFECTIVE_URL) ... --> 200 "http://sourceforge.net/"
声明:本站所有文章          ,如无特殊说明或标注      ,均为本站原创发布   。任何个人或组织                  ,在未征得本站同意时             ,禁止复制          、盗用      、采集                  、发布本站内容到任何网站             、书籍等各类媒体平台                  。如若本站内容侵犯了原著者的合法权益   ,可联系我们进行处理                。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
打码平台怎么赚钱(打码**平台有哪些-给图片打码,10/张!竟然还有这种**!)