Scrapy - 使用多个选项发送表单数据

alf*_*kim 1 python forms scrapy

我正在使用scrapy来解析具有以下形式的网站:

<form id="form1"...>
    <select name="codes" multiple="multiple"...>
        <option value="0">Option one</option>
        <option value="1">Option two</option>
        <option value="2">Option three</option>
        ....
    </select>
</form>
Run Code Online (Sandbox Code Playgroud)

我正在填写并使用以下代码提交表单:

submit_form = FormRequest.from_response(response,
                                        formxpath="//form[@id='form1']",
                                        formdata={'codes': '0'},
                                        callback=self.parse_table)
yield submit_form
Run Code Online (Sandbox Code Playgroud)

如何在表单数据中提交多个代码?我试过了:

formdata={'codes': '["0", "1", "2"]'},
formdata={'codes': ['0', '1', '2']},
Run Code Online (Sandbox Code Playgroud)

没有任何运气。

编辑:

表单有额外的输入控件,其中一些是隐藏的,它们在表单中正确传递。我在表单提交后看到的就像服务器返回到与表单相同的页面,当我期待一个新页面的表格实际上包含我想要检索的数据时。

我对服务器后端知之甚少,只知道它是用 .NET 2.0 构建的。这是一个非常古老的网站,来自政府的依赖。

谢谢。

MrP*_*dav 5

要发送具有多个选项的表单,您应该尝试以以下格式传递表单数据

formdata = {}
formdata['codes[]'] = ["0","1","2","3"]

yield scrapy.FormRequest.from_response(
            response=response,
            formid='UserLoginForm',
            formdata=formdata,
            callback=self.search_result,
        )
Run Code Online (Sandbox Code Playgroud)

验证代码值是否以所需格式提交,这是 request_body 的输出

codes%5B%5D=0&codes%5B%5D=1&codes%5B%5D=2&codes%5B%5D=3
Run Code Online (Sandbox Code Playgroud)

取消引用

codes[]=0&codes[]=1&codes[]=2&codes[]=3
Run Code Online (Sandbox Code Playgroud)

拆分 &

codes[]=0
codes[]=1
codes[]=2
codes[]=3
Run Code Online (Sandbox Code Playgroud)