Python 无法根据字典中的项获取值
我已经用python编写了一个脚本,用于在字典中获取项目及其值。当我运行我的脚本时,它确实以错误的方式获取它,我的意思是不以我希望的方式获取它 我现在得到的结果是:Python 无法根据字典中的项获取值,python,python-3.x,web-scraping,beautifulsoup,Python,Python 3.x,Web Scraping,Beautifulsoup,我已经用python编写了一个脚本,用于在字典中获取项目及其值。当我运行我的脚本时,它确实以错误的方式获取它,我的意思是不以我希望的方式获取它 我现在得到的结果是: {'4194813.75690': 'foo', '4194813.75691': 'foo'} 但是,我希望: {'4194813.75690': 'foo', '4194813.75691': 'bar'} 在name属性中,此部分4194813始终是稳定的,但此.75691部分会动态更改,因此除了下面尝试的内容外,我无法在
{'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)
有很多方法可以做到这一点。你有正确的想法使用一个变量;你只需要弄清楚什么时候改变它。一个简单的方法是在进入循环之前将“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
另一种方法是将值放入列表,在列表上生成迭代器,然后使用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)
有很多方法可以做到这一点。你有正确的想法使用一个变量;你只需要弄清楚什么时候改变它。一个简单的方法是在进入循环之前将“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
另一种方法是将值放入列表,在列表上生成迭代器,然后使用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)
foo和bar来自哪里?他们不存在于该站点中。我想使用它们,因为一个将用作
用户名
(foo),另一个将用作密码
(条形图)。希望这是有意义的。那么,您是否希望每次迭代都在foo和bar之间交替?我不能完全理解它们只出现了两次,所以应该不会有任何混淆。您可以创建一个列表val=[“foo”,“bar”]
,然后将另一个变量设置为0。当if语句发生一次时,设置formdata[item]=val[i]
。然后`i+=1`然后下一个循环,它将把第二个项bar放入formdatafoo和bar来自哪里?它们在该站点中不存在。我想使用它们,因为一个将用作用户名
(foo),另一个将用作密码
(条形图)。希望这是有意义的。那么,您是否希望每次迭代都在foo和bar之间交替?我不能完全理解它们只出现了两次,所以应该不会有任何混淆。您可以创建一个列表val=[“foo”,“bar”]
,然后将另一个变量设置为0。当if语句发生一次时,设置formdata[item]=val[i]
。然后`i+=1`然后在下一个循环中,它将把第二个项bar放入formdataWhat a fix@kindall!!多亏了一万亿。第二个更强大。你让我很开心。真是个好机会!!多亏了一万亿。第二个更强大。你让我开心。