【发布时间】:2010-05-05 00:34:01
【问题描述】:
我正在使用(通过urllib/urllib2)一个返回 XML 结果的 API。 API 始终为我的查询返回 total_hit_count,但只允许我分批检索结果,例如 100 或 1000。API 规定我需要指定 start_pos 和 end_pos 来抵消它,以便遍历结果。
假设 urllib 请求看起来像 http://someservice?query='test'&start_pos=X&end_pos=Y。
如果我发送一个具有最低数据传输率的初始“品尝者”查询,例如http://someservice?query='test'&start_pos=1&end_pos=1,以获取total_hits = 1234 猜想的结果,我想制定一种最干净的请求方法那些 1234 的结果是成批的,再说一遍,100 或 1000 或...
这是我迄今为止想出的,它似乎有效,但我想知道你是否会做不同的事情,或者我是否可以改进:
hits_per_page=100 # or 1000 or 200 or whatever, adjustable
total_hits = 1234 # retreived with BSoup from 'taster query'
base_url = "http://someservice?query='test'"
startdoc_positions = [n for n in range(1, total_hits, hits_per_page)]
enddoc_positions = [startdoc_position + hits_per_page - 1 for startdoc_position in startdoc_positions]
for start, end in zip(startdoc_positions, enddoc_positions):
if end > total_hits:
end = total_hits
print "url to request is:\n ",
print "%s&start_pos=%s&end_pos=%s" % (base_url, start, end)
附言我是 StackOverflow 的长期消费者,尤其是 Python 问题,但这是我发布的第一个问题。你们真是太棒了。
【问题讨论】:
标签: python api list-comprehension