【问题标题】:FormRequest that renders JS content in scrapy shell在 scrapy shell 中呈现 JS 内容的 FormRequest
【发布时间】: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 产生的页面如下所示)

【问题讨论】:

    标签: scrapy dynamic-content


    【解决方案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 应该返回到 '>>>' 这样你就可以编写新命令了。如果它停留在“...”上,您可能缺少括号或引号。
    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多