FormRequest che esegue il rendering del contenuto JS in scrapy shell

Aug 24 2020

Sto cercando di estrarre il contenuto da questa pagina con i seguenti dati del modulo:

Ho bisogno del County:set per Prince George e DateOfFilingFromimpostato su, 01-01-2000quindi 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 Splashtuttavia, non sono sicuro di come combinare a SplashRequestall'interno di a FormRequeste 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 FormRequestmostrato di seguito)

Risposte

2 WimHermans Aug 24 2020 at 10:10

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)