Python比urllib更好的网络API
我发现urllib这个库里没有办法关闭连接(关闭连接的功能不起作用)。有没有更好、更强大的网络接口可以用在Python里?
5 个回答
0
这里有两个链接,分别指向Python的文档。
第一个链接是关于一个叫做“urllib2”的库,这个库可以帮助你在Python中处理网络请求,比如下载网页内容。
第二个链接是关于“requests”库的文档,这是一个更简单易用的库,同样用于处理网络请求。很多人觉得用这个库比用“urllib2”更方便。
2
Urllib在完成urlopen后会自动关闭连接,而fp.close()只是关闭了文件缓冲区,这个缓冲区用来保存获取到的信息:
>>> import urllib
>>> fp = urllib.urlopen('http://www.httpbin.org/ip')
>>> fp.read()
0: '{"origin": "::ffff:92.242.181.219"}'
>>> fp.close()
有很多不错的http库可以使用:
- requests - 一个简单易用的http客户端,基于urlib2和httplib构建。
- tornado asyncclient - 非常轻量的异步接口,主要用来发送简单的REST请求。
pycurl - 速度最快、功能最强大的网络库,支持多种协议,还有一些curl模块可以用在tornado和gevent上。
我目前正在为这些库构建性能分析工具:源代码 - 也会有速度和内存的对比。
还有其他选择:
- twisted webclient - 一个成熟的异步库。
- urllib2 - 传统的打开URL的库。
- httplib - HTTP协议客户端。
- Doug Hellman的互联网和网络模块列表
4
你并不是唯一一个在使用urllib时遇到问题的人。Python社区已经提出了一些替代方案。
可以试试这里:
http://pypi.python.org/pypi/requests
Requests是一个比urllib更好用的接口。
http://urlgrabber.baseurl.org/
Urlgrabber是对urllib的快速改写,支持更高级的HTTP下载功能。