在 scrapy shell 中呈现 JS 内容的 FormRequest
Posted
技术标签:
【中文标题】在 scrapy shell 中呈现 JS 内容的 FormRequest【英文标题】:FormRequest that renders JS content in scrapy shell 【发布时间】:2020-12-12 19:50:19 【问题描述】:我正在尝试使用以下表单数据从 page 中抓取内容:
我需要将County:
设置为乔治王子的并将DateOfFilingFrom
设置为01-01-2000
,所以我执行以下操作:
% 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]:
但它不起作用(响应为无)另外,下一页看起来像下面动态加载的,我需要知道如何能够通过以下检查访问下面显示的每个链接(就我知道这可以使用Splash
完成,但是,我不确定如何在FormRequest
中组合SplashRequest
并在scrapy shell 中完成所有操作以进行测试。我需要知道我在做什么错误以及如何呈现下一页(由FormRequest
产生的页面如下所示)
【问题讨论】:
【参考方案1】:您发送的请求缺少几个字段,这可能是您没有收到回复的原因。您填写的字段也与他们在请求中期望的字段不对应。解决这个问题的一个好方法是使用 scrapy 的 from_response (doc),它可以根据表单中的信息为您填充一些字段。
对于这个网站,以下内容对我有用(使用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)
【讨论】:
谢谢,您的解决方案运行良好,我需要帮助触发 JS 事件以登陆下一页,请查看我的其他问题 here 像往常一样,@Wim Hermans 是唯一的问题!♥ 我想问一个问题:如果我将 formdata 传递到 shell,每一行都以“...”开头,但我需要再次获取,我怎样才能“完成”我的命令,以便我可以使用 fetch 命令?希望它能指出我想说的话,提前谢谢:) 不确定你的意思——如果你只是按下回车,你的 shell 应该返回到 '>>>' 这样你就可以编写新命令了。如果它停留在“...”上,您可能缺少括号或引号。以上是关于在 scrapy shell 中呈现 JS 内容的 FormRequest的主要内容,如果未能解决你的问题,请参考以下文章