FormRequest che esegue il rendering del contenuto JS in scrapy shell
Sto cercando di estrarre il contenuto da questa pagina con i seguenti dati del modulo:
Ho bisogno del County:
set per Prince George e DateOfFilingFrom
impostato su, 01-01-2000
quindi faccio quanto segue:
% 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]:
Ma non funziona (la risposta è Nessuno) inoltre, la pagina successiva ha l'aspetto seguente che viene caricata dinamicamente, ho bisogno di sapere come essere in grado di accedere a ciascuno dei collegamenti mostrati di seguito con la seguente ispezione (per quanto ne so potrebbe essere fatto utilizzando Splash
tuttavia, non sono sicuro di come combinare a SplashRequest
all'interno di a FormRequest
e fare tutto da una shell scrapy a scopo di test. Ho bisogno di sapere cosa sto facendo di sbagliato e come rendere la pagina successiva (quella che risultati da quanto FormRequest
mostrato di seguito)

Risposte
Nella richiesta che stai inviando mancano un paio di campi, motivo per cui probabilmente non ricevi una risposta. I campi che compili inoltre non corrispondono ai campi attesi nella richiesta. Un buon modo per risolvere questo problema è usare from_response ( doc ) di scrapy , che può popolare alcuni campi per te già in base alle informazioni nel modulo.
Per questo sito Web ha funzionato per me (utilizzando 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)