我正在使用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构建。这是一个来自政府依赖的非常古老的网站。
感谢。
答案 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