好的,我需要使用Python下载一些网页,并快速调查我的选项.
包含在Python中:
urllib - 在我看来,我应该使用urllib2代替.urllib没有cookie支持,只有HTTP/FTP /本地文件(没有SSL)
urllib2 - 完整的HTTP/FTP客户端,支持最需要的东西,如cookie,不支持所有HTTP动词(只有GET和POST,没有TRACE等)
功能齐全:
机械化 - 可以使用/保存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中添加了关于动词支持的注释
我认为这个演讲(在2009年的pycon上)有你想要的答案(Asheesh Laroia在此事上有很多经验).他指出了你大部分上市的好与坏
刮网:对不期望它的网站进行编程的策略(第1部分,共3部分)
刮网:对不期望它的网站进行编程的策略(第2部分,共3部分)
刮网:对不期望它的网站进行编程的策略(第3部分,共3部分)
从PYCON 2009时间表:
您是否发现自己面临拥有需要提取的数据的网站?如果您能够以编程方式将数据输入到Web应用程序中,即使那些经过调整以抵御机器人交互的应用程序,您的生活会更简单吗?
我们将讨论网络抓取的基础知识,然后深入探讨不同方法的细节以及最适用的方法.
您将了解何时应用不同的工具,并了解我在电子前沿基金会项目中选择的用于屏幕抓取的"重锤".
如果可能的话,参加者应带一台笔记本电脑来试试我们讨论的例子,并可选择做笔记.
更新: Asheesh Laroia更新了他对pycon 2010的演讲
PyCon 2010:Scrape the Web:为不期望它的网站编程的策略
* 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表单后面.在本教程中,>您将学习如何解析这些页面以及何时应用使刮擦更快更稳定的高级技术.我们将介绍使用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 ...
urllib2
在每个Python安装中都可以找到,因此是一个很好的基础.
PycURL
对于已经习惯使用libcurl的人来说非常有用,它暴露了更多HTTP的低级细节,并且它获得了应用于libcurl的任何修复或改进.
mechanize
用于持久驱动连接,就像浏览器一样.
这不是一个比另一个好的问题,而是为工作选择合适的工具.