更新:问题是文档不完整,事件调度程序将 kwargs 传递给钩子函数。
我有一个大约 30k URL 的列表,我想检查各种字符串。我有一个使用 Requests & BeautifulSoup 的脚本的工作版本,但它不使用线程或异步请求,因此速度非常慢。
最终,我想做的是缓存每个 URL 的 html,这样我就可以运行多个检查,而无需向每个站点发出多余的 HTTP 请求。如果我有一个可以存储 html 的函数,那么异步发送 HTTP GET 请求然后传递响应对象的最佳方法是什么?
我一直在尝试使用 Grequests(如此处所述)和“钩子”参数,但我遇到了错误,并且文档没有深入。所以我希望有更多经验的人可以提供一些启示。
这是我要完成的简化示例:
import grequests
urls = ['http://www.google.com/finance','http://finance.yahoo.com/','http://www.bloomberg.com/']
def print_url(r):
print r.url
def async(url_list):
sites = []
for u in url_list:
rs = grequests.get(u, hooks=dict(response=print_url))
sites.append(rs)
return grequests.map(sites)
print async(urls)
它会产生以下类型错误:
TypeError: print_url() got an unexpected keyword argument 'verify'
<Greenlet at 0x32803d8L: <bound method AsyncRequest.send of <grequests.AsyncRequest object at 0x00000000028D2160>>
(stream=False)> failed with TypeError
不知道为什么默认将“验证”作为关键字参数发送;不过,让某些东西工作会很棒,所以如果有人有任何建议(使用 grequests 或其他方式),请分享:)
提前致谢。