У меня есть следующий url для начала: http://somedomain.mytestsite.com/?offset=0. Я хотел бы пропустить этот url, увеличивая параметр смещения, скажем, на 100 каждый раз. Каждый раз, когда я получаю ответ, мне нужно проверить какое-то условие, чтобы решить, следует ли мне запускать следующую итерацию. Например:итерация по шаблону url params в Scrapy
class SomeSpider(BaseSpider):
name = 'somespider'
offset = 0
items = list()
def start_requests(self):
return [scrapy.Request("http://somedomain.mytestsite.com/?offset="+str(self.offset), callback=self.request_iterator)]
def request_iterator(self, response):
body = response.body
#let's say we get json as response data
data = json.loads(body)
#check if page still have data to process
if data["matches"]:
self.items.extend(data["matches"])
self.offset += 100
return self.start_requests()
else:
#process collected data in items list
return self.do_something_with_items()
Это работает, но я не могу не почувствовать что-то не так с этим кодом. Может быть, я должен использовать некоторые scrapy's rules
?
Спасибо! Я отредактировал свойство 'start_urls', чтобы обработать хотя бы 1 элемент +, нет необходимости в обратном вызове' next_request' из-за того, что мы все делаем в методе 'parse'. – Helvdan