Я новичок ie в python, но как мне получить первое значение осадков, температуры, wind_gust и влажности? - PullRequest
1 голос
/ 13 июля 2020
from selenium import webdriver
import time

PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)

driver.get("https://www.metoffice.gov.uk/weather/forecast/gcvwr3zrw#?date=2020-07-12")

time.sleep(5)

precipitation = driver.find_element_by_class_name("step-pop")
print(precipitation.text)

temperature = driver.find_element_by_class_name("step-temp")
print(temperature.text)

wind_gust = driver.find_element_by_class_name("step-wind-gust")
print(wind_gust.text)

humidity = driver.find_element_by_class_name("step-humidity")
print(humidity.text)

Вывод

50% 10% 10% 30% 20% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% <5% <5% <5% <5% <5%
15°
15°
16°
15°
15°
15°
15°
15°
15°
15°
16°
16°
16°
16°
17°
17°
17°
17°
17°
16°
15°
14°
13°
12°
18 20 26 24 23 23 24 23 22 22 23 26 26 25 26 26 26 28 28 27 27 24 22 22
71% 74% 77% 81% 82% 82% 85% 88% 87% 84% 74% 71% 74% 71% 69% 67% 65% 65% 62% 63% 63% 66% 69% 74%

1 Ответ

0 голосов
/ 13 июля 2020

Попробуйте использовать xpath для извлечения этих данных:

humidity = driver.find_elements_by_xpath('//tr[@class="detailed-view step-humidity"]//span[@class="humidity"][@data-type="percentage"]')
temperature = driver.find_elements_by_xpath('//tr[@class="step-temp"][@data-type="temp"]//td[@data-temp]/div')
precipitation = driver.find_elements_by_xpath('//tr[@class="step-pop"]//td[@class]')
wind_gust = driver.find_elements_by_xpath('//tr[@class="detailed-view step-wind-gust"]//td/span[@class="gust"]')

for h in humidity:
    print(h.get_attribute('data-value'))
for t in temperature:
    print(t.text)
for p in precipitation:
    print(p.text)
for w in wind_gust:
    print(w.text)

Поскольку в подобных случаях xpath является лучшим подходом к таргетингу, и, с другой стороны, поддержка xpath селена довольно ограничена, я обычно просто передаю через page_source в библиотеку, такую ​​как l xml, и проанализируйте ее там.

Я бы также просто загрузил все в pandas фрейм данных после того, как все это будет сделано.

Изменить:

Чтобы получить только первый элемент каждой функции погоды, используйте:

print(humidity[0].get_attribute('data-value'),temperature[0].text,precipitation[0].text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...