Trip,Tornado & Requests In Pair,一个协程的网络库。
与 Requests 同样的操作,Trip 让你摆脱网络延时阻塞程序。
Python 的协程可以这么简单(兼容 Python 2.7-3.7):
- import trip
- def main():
- r = yield trip.get('https://httpbin.org/get', auth=('user', 'pass'))
- print(r.content)
- trip.run(main)
有了协程,同样的代码量, 一百份请求一份时间 。
Trip 的名字来源于其两个依赖包,也旨在将两个包的内容融合起来:'Tornado & Requests In Pair'。 在兼容中使用了大量上述两个包结构和处理的代码,我只是做了一些简单的整合工作,感谢 Tornado 与 Requests 让我能如此轻易的完成本项目的编写。
通过使用 Trip,你可以充分使用 Requests 的各种特性,包括但不限于:带持久 Cookie 的会话、 浏览器式的 SSL 认证、自动内容解码、 基本 / 摘要式的身份认证、 优雅的 key/value Cookie。 同时你的请求又和使用 Tornado 的 AsyncHTTPClient 一般是协程的,网络延时不再会阻塞你的 程序,在程序正常运行的时候你可以同时等待多项任务的完成。
爬虫耗时太久优化困难吗?各种协程网络框架难以使用吗?大型爬虫框架臃肿无法灵活定制吗? 试试 Trip,你不会后悔的!
无论你是使用的 2.7,3.3,3.7,Trip 都可以完美运行。
安装 Trip 非常简单,只需要在命令行中输入:
- python - m pip install trip
你可以在 这里 找到本项目详细的文档。
如果在阅读文档过程当中遇到了问题, 也可以加入 qq 群与我们讨论:462703741。
这里展示部分的进阶应用:
- import trip
- async def main():
- r = await trip.get('https://httpbin.org/get', auth=('user', 'pass'))
- print(r.content)
- trip.run(main)
- import trip
- def main():
- s = trip.Session()
- r = yield s.get(
- 'https://httpbin.org/cookies/set',
- params={'name': 'value'},
- allow_redirects=False)
- r = yield s.get('https://httpbin.org/cookies')
- print(r.content)
- trip.run(main)
- import trip
- def main():
- def print_url(r, *args, **kwargs):
- print(r.url)
- def record_hook(r, *args, **kwargs):
- r.hook_called = True
- return r
- url = 'http://httpbin.org/get'
- r = yield trip.get('http://httpbin.org', hooks={'response': [print_url, record_hook]})
- print(r.hook_called)
- trip.run(main)
- import trip
- def main():
- r = yield trip.get('http://github.com', timeout=0.001)
- print(r)
- trip.run(main)
- import trip
- proxies = {
- 'http': '127.0.0.1:8080',
- 'https': '127.0.0.1:8081',
- }
- def main():
- r = yield trip.get('https://httpbin.org/get', proxies=proxies)
- print(r.content)
- trip.run(main)
来源: http://www.tuicool.com/articles/vQjIz2M