我试图从XML文件中获取2个不同的元素;我试图在散点图上将它们打印为x和y。我可以设法获得这两个元素,但是一个列表长155个,另一个列表只有50个。
因此,我需要添加if
语句,以便只选择具有关联from
元素的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
我假设它是因为列表的长度不同。 我知道这可能是解决它的一种简单方法,任何想法都会很棒。
答案 0 :(得分:2)
只需修改您的代码段,如下所示。它将解决长度问题。
....
for element in times:
time = element.get("from")
t = datetime.datetime.strptime(time, form)
if element.find('windSpeed'):
x.append(t)
....