python - 为一个名称 urllib2 发送多个值

标签 python html request urllib2

我正在尝试提交一个包含复选框的网页,我最多需要选中其中的 10 个复选框

问题是当我尝试将它们分配给字典中的一个名称时,它只分配最后一个而不是全部 10

那么我该怎么做,这里是请求代码:

forms = {"_ref_ck": ref,
         "type": "create",
         "selected_items[]": sel_itms[0],
         "selected_items[]": sel_itms[1],
         "selected_items[]": sel_itms[2],
         "selected_items[]": sel_itms[3],
         "selected_items[]": sel_itms[4],
         "selected_items[]": sel_itms[5],
         "selected_items[]": sel_itms[6],
         "selected_items[]": sel_itms[7],
         "selected_items[]": sel_itms[8],
         "selected_items[]": sel_itms[9]

         }
data = urllib.urlencode(forms)
req = urllib2.Request('http://www.neopets.com/island/process_tradingpost.phtml',data)
res = self.opener.open(req)
html =  res.read()

这行得通,但我只为 "selected_itmes[]" 发送一个值,当我在 Web 调试代理中查看实际请求时,它为 "selected_items[]"< 发送多个值 但我不知道如何用 python 来做

请帮忙谢谢!!

最佳答案

问题与urlencode无关; Python 字典不能为同一个键保存多个值。您可以在发送之前通过print打印出forms 来查看这一点——selected_items[] 只有一个值。那个值被编码得很好。

作为the documentation解释说,有两种解决方法。

首先,您可以将一系列值附加到一个键,并使用 doseq=True 标志:

forms = {"_ref_ck": ref,
     "type": "create",
     "selected_items[]": sel_itms[:10]
     }
 data = urllib.urlencode(forms, doseq=True)

或者,您可以传递一个双元素元组序列而不是映射:

forms = (("_ref_ck", ref),
         ("type", "create"),
         ("selected_items[]", sel_itms[0]),
         ("selected_items[]", sel_itms[1]),
         # ...
         )
data = urllib.urlencode(forms)

(您还可以使用允许重复键的自定义 Mapping 类型,而不是标准的 dict,但这可能有点矫枉过正。特别是因为通常的构造方法自定义 Mapping 类型是通过向其传递一系列键值对......)

关于python - 为一个名称 urllib2 发送多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18201752/

相关文章:

python - 是否可以在我的 python 可执行文件中包含解释器权限?

java - 在 JPype : package not callable error 中使用自定义 Java 类

HTML : Parse, 移动端解析重构

node.js - Nodejs instagram api post 请求授权码,它给出 err 400

mysql - SQL 请求无法正常工作

go - 从给定与浏览器相同的参数的页面发出 GET 请求在 golang 上不起作用

python - Django 模型字段 unique=True 和 default=function

html - 如何制作网页的可打印版本?

php - DOM 解析 - 如何解析这样的文件中的 html

python - 不平等列表列表的平均值