Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法根据字典中的项获取值_Python_Python 3.x_Web Scraping_Beautifulsoup - Fatal编程技术网

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部分会动态更改,因此除了下面尝试的内容外,我无法在

我已经用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)

有很多方法可以做到这一点。你有正确的想法使用一个变量;你只需要弄清楚什么时候改变它。一个简单的方法是在进入循环之前将“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!!多亏了一万亿。第二个更强大。你让我很开心。真是个好机会!!多亏了一万亿。第二个更强大。你让我开心。