Я использую (через urllib
/ urllib2
) API, который возвращает результаты XML. 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)
p.s. Я давно пользуюсь StackOverflow, особенно вопросами Python, но это мой первый опубликованный вопрос. Вы, ребята, просто великолепны.