我已经用python编写了一个脚本来获取项目及其在字典中的值。当我运行脚本时,它确实以错误的方式获取了该脚本,这意味着我不想以这种方式拥有。
我现在得到的结果是:
{'4194813.75690': 'foo', '4194813.75691': 'foo'}
但是,我希望拥有:
{'4194813.75690': 'foo', '4194813.75691': 'bar'}
在name
属性中,该部分4194813
始终是稳定的,但是该.75691
部分是动态变化的,因此我无法在.startswith()
中使用任何合适的标志,我在下面尝试过。
这是脚本:
import requests
from bs4 import BeautifulSoup
url = "https://www.electricityregistry.co.nz/bin_public/jadehttp.dll?MariaWebR"
res = requests.get(url)
soup = BeautifulSoup(res.text,"lxml")
formdata = {}
for items in soup.select("[name='JadeForm'] input"):
if items.get("name").startswith('4194813'):
item = items.get("name")
val = "foo" #how to change it to "bar" in the second iteration
formdata[item] = val
print(formdata)
答案 0 :(得分:2)
有很多方法可以做到这一点。您有使用变量的正确想法;您只需要弄清楚何时进行更改即可。一种简单的方法是在进入循环之前为val
分配“ foo”,使用它分配字典值,然后在使用val
后将其更改为“ bar”。
val = "foo"
for items in soup.select("[name='JadeForm'] input"):
if items.get("name").startswith('4194813'):
item = items.get("name")
formdata[item] = val
另一种方法是将值放入列表,在列表上进行迭代,然后使用next()
从迭代器获取下一个值。这是一种更通用的方法,可以用于任何数量的项目,而不仅仅是两个。
val = iter(["foo", "bar"])
for items in soup.select("[name='JadeForm'] input"):
if items.get("name").startswith('4194813'):
item = items.get("name")
formdata[item] = next(val)