【发布时间】:2016-10-11 23:43:07
【问题描述】:
我目前正在通过一个 API 提取数据,该 API 以分页方式返回近 100,000 个文档(每页 100 个)。我目前有一些代码大致如下:
while c <= limit:
if not api_url:
break
req = urllib2.Request(api_url)
opener = urllib2.build_opener()
f = opener.open(req)
response = simplejson.load(f)
for item in response['documents']:
# DO SOMETHING HERE
if 'more_url' in response:
api_url = response['more_url']
else:
api_url = None
break
c += 1
以这种方式下载数据真的很慢,我想知道是否有任何方法可以以异步方式循环浏览页面。有人建议我看看twisted,但我不完全确定如何继续。
【问题讨论】:
-
一种直接的方法是重用与服务器的连接。我强烈建议使用requests 处理所有与 HTTP 相关的内容。此外,您能否预测下一页令牌(在您的情况下为
more_url)。如果可以的话,消息可以并行发送,这将大大加快整个操作。 -
不幸的是,more_url 是不可预测的。我会看看请求,谢谢!
标签: python api asynchronous pagination twisted