Я использую Scrapy 1.5.1
Моя цель - пройти всю цепочку запросов для каждой переменной, прежде чем перейти к следующей переменной. По какой-то причине Scrapy принимает 2 переменные, затем отправляет 2 запроса, затем принимает еще 2 переменные и т. Д.
CONCURRENT_REQUESTS = 1
Вот мой пример кода:
def parsed ( self, response):
# inspect_response(response, self)
search = response.meta['search']
for idx, i in enumerate(response.xpath("//table[@id='ctl00_ContentPlaceHolder1_GridView1']/tr")[1:]):
__EVENTARGUMENT = 'Select${}'.format(idx)
data = {
'__EVENTARGUMENT': __EVENTARGUMENT,
}
yield scrapy.Request(response.url, method = 'POST', headers = self.headers, body = urlencode(data),callback = self.res_before_get,meta = {'search' : search}, dont_filter = True)
def res_before_get ( self, response):
# inspect_response(response, self)
url = 'http://www.moj-yemen.net/Search_detels.aspx'
yield scrapy.Request(url, callback = self.results, dont_filter = True)
Мое желаемое поведение: 1 значение от Parse
отправляется на res_before_get
, а затем я делаю что-то с ним. затем другие значения из Parse
отправляются в res_before_get
и т. д.
Post
Get
Post
Get
Но в настоящее время Scrapy принимает 2 значения из Parse
и добавляет их в очередь, затем отправляет 2 запроса из res_before_get
,Таким образом, я получаю повторяющиеся результаты.
Post
Post
Get
Get
Что мне не хватает?
PS Это сайт asp.net. Его логика следующая:
- делает запрос POST с полезной нагрузкой поиска.
- Сделайте GET-запрос для получения фактических данных.
- Оба запроса используют один и тот же sessionID
Вот почему важно сохранить заказ.
На данный момент я получаю POST1 и POST2. А поскольку sessionID связан с POST2, и GET1, и GET2 возвращают одну и ту же страницу.