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

时间:2016-09-17 18:45:19

标签: 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>

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

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

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

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

没有运气。

修改

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

我不太了解服务器后端,而不是用.NET 2.0构建。这是一个来自政府依赖的非常古老的网站。

感谢。

1 个答案:

答案 0 :(得分:3)

要发送包含多个选项的表单,您应该尝试以下列格式传递formdata

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

yield scrapy.FormRequest.from_response(
            response=response,
            formid='UserLoginForm',
            formdata=formdata,
            callback=self.search_result,
        )

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

codes%5B%5D=0&codes%5B%5D=1&codes%5B%5D=2&codes%5B%5D=3

引文结束

codes[]=0&codes[]=1&codes[]=2&codes[]=3

拆分&amp;

codes[]=0
codes[]=1
codes[]=2
codes[]=3