哪个在Python中最好:urllib2,PycURL还是机械化?

好吧,我需要使用Python下载一些网页,并对我的选项做了一个快速调查。

包含在Python中:

urllib – 在我看来,我应该使用urllib2来代替。 urllib没有cookie支持,只有HTTP / FTP /本地文件(没有SSL)

urllib2 – 完整的HTTP / FTP客户端,支持cookies等最需要的东西,不支持所有的HTTP动词(只有GET和POST,没有TRACE等)

全function:

机械化 – 可以使用/保存Firefox / IE cookies,采取行动如下第二个环节,积极维护(2011年3月发布0.2.5)

PycURL – 支持所有curl(FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP),坏消息:自2008年9月9日起更新(7.19.0)

新的可能性:

urllib3 – 支持连接重用/共享和文件发布

不推荐使用(也可以使用urllib / urllib2):

httplib – 仅HTTP / HTTPS(无FTP)

httplib2 – 仅HTTP / HTTPS(无FTP)

第一件令我感到震惊的事情是,urllib / urllib2 / PycURL / mechanize都是非常成熟的解决scheme。 机械化和PycURL附带一些Linux发行版(例如Fedora 13)和BSD,因此安装通常不是问题(所以这很好)。

urllib2看起来不错,但我想知道为什么PycURL和机械化两者似乎非常受欢迎,是否有我缺less的东西(即如果我使用urllib2将我画在一个angular落在某个点?)。 我真的很喜欢这些东西的利弊反馈,所以我可以为自己做出最好的select。

编辑:在urllib2中添加动词支持的注释

  • urllib2在每一个Python安装中都能find,所以它是一个很好的基础。
  • PycURL对于已经习惯了使用libcurl的人来说非常有用,它暴露了更多的HTTP的底层细节,并且可以获得应用于libcurl的修正或改进。
  • mechanize被用来持久地驱动连接,就像浏览器一样。

这不是一个比另一个更好的问题,而是select合适的工具。

我认为这个谈话(在pycon 2009)有你正在寻找的答案(Asheesh Laroia在这个问题上有很多的经验)。 他指出了你的大部分上市的好处和坏处

  • 刮网:编程网站的策略,不期望它(1的3)
  • 刮网:编程网站的策略,不期望的(2/3)
  • 刮网:编程网站的策略,不期望它(第3部分3)

从PYCON 2009的时间表来看:

你发现自己面临的网站有数据,你需要提取? 如果你能够以编程方式将数据input到Web应用程序,甚至那些被机器人阻止交互的应用程序,你的生活会更简单吗?

我们将讨论networking抓取的基础知识,然后深入探讨不同方法的细节和最适用的地方。

您将了解何时应用不同的工具,并了解我在电子边界基金会的一个项目中采集的“重锤”,以了解屏幕抓图。

如果可能的话,参加者应该带一台笔记本电脑来尝试我们讨论的例子,并select记笔记。

更新: Asheesh Laroia更新了他的pycon 2010演讲

  • PyCon 2010:刮网:编程网站的策略,不希望它

     * My motto: "The website is the API." * Choosing a parser: BeautifulSoup, lxml, HTMLParse, and html5lib. * Extracting information, even in the face of bad HTML: Regular expressions, BeautifulSoup, SAX, and XPath. * Automatic template reverse-engineering tools. * Submitting to forms. * Playing with XML-RPC * DO NOT BECOME AN EVIL COMMENT SPAMMER. * Countermeasures, and circumventing them: o IP address limits o Hidden form fields o User-agent detection o JavaScript o CAPTCHAs * Plenty of full source code to working examples: o Submitting to forms for text-to-speech. o Downloading music from web stores. o Automating Firefox with Selenium RC to navigate a pure-JavaScript service. * Q&A; and workshopping * Use your power for good, not evil. 

更新2:

PyCon US 2012 – Web抓取:可靠且高效地从不期望的页面提取数据

令人兴奋的信息被困在网页和HTML表单之后。 在本教程中,您将学习如何parsing这些页面,以及何时应用先进的技术,使刮擦更快,更稳定。 我们将介绍Twisted,gevent和其他的并行下载。 分析SSL后面的站点; 用Selenium驾驶JavaScript-y网站; 并避开常见的防刮技术。

Python的请求也是HTTP的一个很好的候选人。 它有一个更好的api恕我直言,从他们的官方文档的示例http请求:

 >>> r = requests.get('https://api.github.com', auth=('user', 'pass')) >>> r.status_code 204 >>> r.headers['content-type'] 'application/json' >>> r.content ... 

要“获取一些网页”,请使用请求

http://docs.python-requests.org/en/latest/

Python的标准urllib2模块提供了你所需要的大部分HTTPfunction,但是API被彻底的破坏了。 它是build立在不同的时间和不同的networking。 它需要大量的工作(甚至是方法重写)来执行最简单的任务。

事情不应该是这样的。 不在Python中。

 >>> r = requests.get('https://api.github.com/user', auth=('user', 'pass')) >>> r.status_code 200 >>> r.headers['content-type'] 'application/json; charset=utf8' >>> r.encoding 'utf-8' >>> r.text u'{"type":"User"...' >>> r.json() {u'private_gists': 419, u'total_private_repos': 77, ...} 

不要担心“上次更新”。 在过去的几年里,HTTP并没有太大的变化;)

urllib2是最好的(因为它是内置的),然后切换到机械化,如果你需要从Firefox的cookie。 mechanize可以作为urllib2的一个直接replace – 他们有类似的方法等等。使用Firefox cookies意味着你可以使用你的个人login凭据从网站(比如说StackOverflow)获取东西。 只要对您的请求数量负责(或者您将被阻止)。

PycURL适用于需要libcurl中所有低级内容的人员。 我会先尝试其他库。

Urllib2仅支持HTTP GET和POST,可能会有解决方法,但是如果您的应用程序依赖于其他HTTP动词,则可能更喜欢不同的模块。

每个说HTTP的python库都有自己的优点。

使用具有特定任务所需的最less量function的那个。

您的列表至less缺lessurllib3 – 一个很酷的第三方HTTP库,它可以重用HTTP连接,从而大大加快了从同一站点检索多个URL的过程。

看看Grab(http://grablib.org)。; 这是一个networking库,它提供了两个主要接口:1)抓取创buildnetworking请求和parsing检索到的数据2)蜘蛛创build批量站点刮刀

Grab使用pycurl和lxml,但可以使用其他networking传输(例如请求库)。 请求运输还没有很好的testing。