FormRequest que renderiza o conteúdo JS em scrapy shell
Estou tentando extrair conteúdo desta página com os seguintes dados de formulário:
Preciso do County:conjunto para Prince George e DateOfFilingFromdefinido para, 01-01-2000então faço o seguinte:
% scrapy shell
In [1]: from scrapy.http import FormRequest
In [2]: request = FormRequest(url='https://registers.maryland.gov/RowNetWeb/Estates/frmEstateSearch2.aspx', formdata={'DateOfFilingFrom': '01-01-2000', 'County:': "Prince George's"})
In [3]: response
In [4]:
Mas não está funcionando (a resposta é Nenhuma) e a próxima página se parece com a seguinte que é carregada dinamicamente, eu preciso saber como ser capaz de acessar cada um dos links mostrados abaixo com a seguinte inspeção (tanto quanto eu sei isso pode ser feito usando Splash, no entanto, não tenho certeza de como combinar um SplashRequestdentro de FormRequeste fazer tudo de dentro do scrapy shell para fins de teste. Preciso saber o que estou fazendo de errado e como processar a próxima página (aquela que resultados do FormRequestmostrado abaixo)
Respostas
Alguns campos estão faltando na solicitação que você está enviando, provavelmente por isso você não recebeu uma resposta. Os campos que você preencheu também não correspondem aos campos que eles estão esperando na solicitação. Uma boa maneira de lidar com isso é usando o from_response ( doc ) do scrapy , que pode preencher alguns campos para você já com base nas informações do formulário.
Para este site, o seguinte funcionou para mim (usando o scrapy shell):
>>> url = "https://registers.maryland.gov/RowNetWeb/Estates/frmEstateSearch2.aspx"
>>> fetch(url)
>>> from scrapy import FormRequest
>>> req = FormRequest.from_response(
... response,
... formxpath="//form[@id='form1']", # specify the form on the current page
... formdata={
... 'cboCountyId': '16', # the county you select is converted to a number
... 'DateOfFilingFrom': '01-01-2001',
... 'cboPartyType': 'Decedent',
... 'cmdSearch': 'Search'
... },
... clickdata={'type': 'submit'},
... )
>>> fetch(req)