Невозможно получить значения в соответствии с элементами в словаре - PullRequest
0 голосов
/ 26 июня 2018

Я написал скрипт на 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 голосов
/ 26 июня 2018

Есть несколько способов сделать это. Вы имеете правильную идею, используя переменную; вам просто нужно выяснить, когда это изменить. Самый простой способ - присвоить «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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...