好的,我需要使用Python下载一些网页,并快速调查我的选项。
包含在Python中:
urllib - 在我看来,我应该使用urllib2代替。 urllib没有cookie支持,只有HTTP / FTP /本地文件(没有SSL)
urllib2 - 完整的HTTP / FTP客户端,支持最需要的东西,如cookie,不支持所有HTTP动词(只有GET和POST,没有TRACE等)
全功能:
mechanize - 可以使用/保存Firefox / IE cookie,采取跟随第二个链接的行动,积极维护(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都是非常成熟的解决方案,效果很好。机械化和PycURL随附了许多Linux发行版(例如Fedora 13)和BSD,因此安装通常不是问题(这样很好)。
urllib2看起来不错,但我想知道为什么PycURL和机械化看起来都非常受欢迎,是否有一些我缺少的东西(即如果我使用urllib2,我会在某个时候把自己画到一个角落?)。我真的很喜欢这些事情的优点/缺点的反馈,所以我可以为自己做出最好的选择。
编辑:在urllib2中添加了关于动词支持的注释
答案 0 :(得分:45)
我认为这次演讲(在2009年的pycon上)有你想要的答案(Asheesh Laroia在此事上有很多经验)。他指出了你大部分上市的好与坏
来自PYCON 2009时间表:
你发现自己面对 拥有您需要的数据的网站 提取? 如果你的生活会更简单吗? 您可以以编程方式输入数据 进入Web应用程序,甚至是那些 调整抵抗机器人的互动?
我们将讨论网络的基础知识 刮,然后潜入 不同方法的细节和地点 它们最适用。
你会离开 了解何时申请 不同的工具,并了解一个 用于筛网刮擦的“重锤” 我参加了一个项目 电子前沿基金会。
如果,参加者应携带笔记本电脑 可能,尝试我们的例子 讨论并选择做笔记。
<强>更新强> Asheesh Laroia更新了他对pycon 2010的演讲
PyCon 2010: Scrape the Web: Strategies for programming websites that don't expected it
* 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 scraping: Reliably and efficiently pull data from pages that don't expect it
令人兴奋的信息被困在网页和HTML表单后面。在本教程中,&gt;您将学习如何解析这些页面以及何时应用使&gt;更快,更稳定的抓取的高级技术。我们将介绍使用Twisted,gevent,&gt;等进行并行下载;分析SSL背后的网站;用Selenium驱动JavaScript-y网站;并且&gt;规避常见的反刮技术。
答案 1 :(得分:39)
Python requests也是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
...
答案 2 :(得分:35)
urllib2
,所以这是一个很好的基础。PycURL
对于已经习惯使用libcurl的用户非常有用,它会暴露更多HTTP的低级细节,并且会获得应用于libcurl的任何修复或改进。mechanize
用于持久驱动连接,就像浏览器一样。这不是一个比另一个好的问题,而是为工作选择合适的工具。
答案 3 :(得分:3)
要“获取一些网页”,请使用请求!
来自http://docs.python-requests.org/en/latest/:
Python的标准urllib2模块提供了大部分HTTP 您需要的功能,但API彻底打破。它建成了 在不同的时间 - 和不同的网络。它需要巨大的 执行最简单的工作量(甚至方法覆盖) 任务。
事情不应该是这样的。不是在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, ...}
答案 4 :(得分:2)
不要担心“上次更新”。 HTTP在过去几年中没有太大变化;)
urllib2是最好的(因为它是内置的),如果你需要来自Firefox的cookie,则切换到机械化。 mechanize可以用作urllib2的直接替换 - 他们有类似的方法等。使用Firefox cookie意味着你可以使用你的个人登录凭据从站点(比如说StackOverflow)获取东西。只需对您的请求数量负责(或者您将被阻止)。
PycURL适用于需要libcurl中所有低级内容的人。我会首先尝试其他库。
答案 5 :(得分:2)
Urllib2仅支持HTTP GET和POST,可能有解决方法,但如果您的应用依赖于其他HTTP谓词,您可能更喜欢不同的模块。
答案 6 :(得分:1)
每个讲HTTP的python库都有自己的优势。
使用具有特定任务所需的最少功能的那个。
您的列表至少缺少urllib3 - 一个很酷的第三方HTTP库,它可以重用HTTP连接,从而大大加快了从同一站点检索多个URL的过程。
答案 7 :(得分:1)
看看Grab(http://grablib.org)。它是一个网络库,提供两个主要接口: 1)抓取用于创建网络请求和解析检索到的数据 2)用于创建批量场地刮刀的蜘蛛
引擎盖下Grab使用pycurl和lxml,但可以使用其他网络传输(例如,请求库)。请求传输尚未经过良好测试。