在 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的主要内容,如果未能解决你的问题,请参考以下文章

在Scrapy中启动shell来调试

Scrapy xpath在scrapy shell中返回空列表

Scrapy——2 Scrapy shell

Scrapy之Scrapy shell

Scrapy框架----- Scrapy Shell

python爬虫scrapy之scrapy终端(Scrapy shell)