Веб-сайт, который я просматриваю, иногда перенаправляет на страницу с формой, которую я хотел бы обработать в промежуточном программном обеспечении загрузчика. Идея состоит в том, что каждый раз, когда происходит это перенаправление, оно автоматически отправляет форму и получает результаты. Мое промежуточное программное обеспечение выглядит примерно так:
from scrapy import FormRequest
class SubmitFormMiddleware:
def process_response(self, request, response, spider):
if response.css('form.loginbox').getall():
post_form_url = response.css('form.loginbox::attr(action)').get()
return FormRequest(url=response.urljoin(post_form_url),
formdata={'username': 'my_username',
'password': 'my_password',
'data_selection': 'all'
},
method='POST',
dont_filter=True)
else:
return response
Это не работает, поскольку у меня не определен какой-либо обратный вызов (и я не должен, потому что я нахожусь в промежуточном программном обеспечении):
NotImplementedError: DefaultSpider.parse callback is not defined
Если бы я хотел просто вернуть запрос, у меня было бы что-то вроде:
redirected = request.replace(url=response.urljoin(post_form_url))
return self._redirect(redirected, request, spider, response.status)
, но это не работает для отправки формы. Кто-нибудь знает, что такое способ Scrapy-thoni c использовать FormRequest в промежуточном программном обеспечении загрузчика?