我用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)
发布于 2018-06-27 03:48:50
有许多方法可以做到这一点。使用变量的想法是正确的;您只需要弄清楚何时更改它即可。一种简单的方法是在进入循环之前将"foo“赋值给val
,使用它来赋值您的字典值,然后在使用它之后将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
val = "bar"
另一种方法是将值放入一个列表中,在列表上创建一个迭代器,然后使用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)
https://stackoverflow.com/questions/51050202
复制相似问题