轻盈高效的异步访问库grequests库

轻盈高效的异步访问库grequests库

今天发现一个grequests库,是将gevent库与requests库结合起来的请求库。可以实现异步访问,我觉得挺方便的,就拿来分享一下。

grequests库重点方法就是下面这两行。

import grequests

#请求队列,还未发出请求
rs = (grequests.get(u) for u in urls)

#批量发出请求,得到响应的列表resps
resps = grequests.map(rs)

对异步或者gevent库不太了解的可以看看我之前的这两篇文章。这两篇文章加起来阅读时间十多分钟,图文并茂,很好理解的。

使用gevent实现高效异步请求

gevent:异步理论与实战

今天我就直接上代码和效果图。


import grequests
from pyquery import PyQuery as pq

words = ['good', 'bad', 'cool',
         'hot', 'nice', 'better',
         'head', 'up', 'down',
         'right', 'left', 'east']

#构建urls
urls = ["http://dict.youdao.com/w/eng/{}/".format(w) for w in words]

def word_info(resp):
    """
    解析出单词信息
    resp 为requests对网址请求后得到的响应
    返回字典信息
    """
    doc = pq(resp.text)
    pros = ''
    for pro in doc.items('.baav .pronounce'):
        pros += pro.text()
    description = ''
    for li in doc.items('#phrsListTab .trans-container ul li'):
        description += li.text()
    return {'音标': pros, '注释': description}

#请求队列,还未发出请求
rs = (grequests.get(u) for u in urls)

#批量发出请求,得到响应的列表resps
resps = grequests.map(rs)

for resp in resps:
    #解析出单词的信息。
    print(word_info(resp))

轻盈高效的异步访问库grequests库

从上图可见greqeusts库实现了requests不能实现的异步请求,不过grequests缺点是不能像requests那样高度灵活的构建headers,proxy等参数。如果爬的网站防护很Low的话,我们不需要高灵活的requests,就可以放心的使用gerequests提高效率。

上一篇:转载——gunicorn的实践经验


下一篇:Get小技巧等分列表