XMLファイルから2つの異なる要素を取得しようとしています。私は散布図上でxとyとしてそれらを印刷しようとしています。私は両方の要素を得ることができますが、1つのリストは長さが長く、他のものは50だけです。特定のXML属性のみを選択する文の場合
if
ステートメントを追加すると、windSpeed
要素が関連付けられた要素が選択されます。
url = "http://api.met.no/weatherapi/locationforecast/1.9/?lat=52.41616;lon=-4.064598"
response = requests.get(url)
xml_text=response.text
weather= bs4.BeautifulSoup(xml_text, "xml")
f = open('file.xml', "w")
f.write(weather.prettify())
f.close()
私は、時間(from
)要素と(windSpeed > mps)
要素や属性を取得しようとしています。可能であればBeautifulsoupを使用したい、まっすぐなif
ループが大好きです。
with open ('file.xml') as file:
soup = bs4.BeautifulSoup(file, "xml")
times = soup.find_all("time")
windspeed = soup.select("windSpeed")
form = ("%Y-%m-%dT%H:%M:%SZ")
x = []
y = []
for element in times:
time = element.get("from")
t = datetime.datetime.strptime(time, form)
x.append(t)
for mps in windspeed:
speed = mps.get("mps")
y.append(speed)
plt.scatter(x, y)
plt.show()
私はそれが次のエラーを発生させ実行
:raise ValueError("x and y must be the same size")
ValueError: x and y must be the same size
私はリストの長さには違いがあるからだと仮定しています。 私はおそらく、それを修正する簡単な方法があることを知っています、任意のアイデアは素晴らしいだろう。
別々のループを持つのではなく、時刻項目を追加する前に 'windspeed'要素がある場合は、' times in:element 'の内部でチェックできますか? – usr2564301