FormRequest, das JS-Inhalte in einer Scrapy-Shell rendert

Aug 24 2020

Ich versuche, Inhalte von dieser Seite mit den folgenden Formulardaten zu entfernen:

Ich brauche das County:Set von Prince George und DateOfFilingFromsetze es, 01-01-2000damit ich Folgendes mache:

% 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]:    

Aber es funktioniert nicht (Antwort ist Keine) und die nächste Seite sieht wie folgt aus, die dynamisch geladen wird. Ich muss wissen, wie ich mit der folgenden Überprüfung auf jeden der unten gezeigten Links zugreifen kann (soweit ich das weiß Möglicherweise Splashbin ich jedoch nicht sicher, wie ich ein SplashRequestinnerhalb eines kombinieren FormRequestund alles aus einer Scrapy-Shell heraus zu Testzwecken ausführen soll. Ich muss wissen, was ich falsch mache und wie ich die nächste Seite (diejenige, die das macht) rendere Ergebnisse aus dem FormRequestunten gezeigten)

Antworten

2 WimHermans Aug 24 2020 at 10:10

In der Anfrage, die Sie senden, fehlen einige Felder, weshalb Sie wahrscheinlich keine Antwort erhalten. Die Felder, die Sie ausfüllen, entsprechen auch nicht den Feldern, die sie in der Anforderung erwarten. Ein guter Weg, um damit umzugehen, ist die Verwendung von scrapys from_response ( doc ), mit der einige Felder für Sie bereits ausgefüllt werden können, basierend auf den Informationen im Formular.

Für diese Website hat Folgendes für mich funktioniert (mit 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)