无法获取与词典中的项目一致的值

时间:2018-06-26 19:32:34

标签: python python-3.x web-scraping beautifulsoup

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

1 个答案:

答案 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)