Не могу спарсить значение температуры с сайта https://yandex.ru/pogoda/samara
Задача спарсить значение температуры с сайта https://yandex.ru/pogoda/samara. При поиске по тегу выводится значение None пробовал с других сайтов значение погоды брать, та же проблема везде
import requests
from bs4 import BeautifulSoup
headers = {"user-agent":
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
}
url = 'https://yandex.ru/pogoda/samara'
responce = requests.get(url, headers=headers)
soup = BeautifulSoup(responce.text, 'lxml')
temp = soup.find('span', class_='temp__value temp__value_with-unit')
print(temp)
Ответы (2 шт):
Автор решения: Sergey
→ Ссылка
Ошибка не воспроизводится. Добавил в вашу программу (в конец) строки:
if temp:
print(temp.text)
else:
print("Тег <span> не найден.")
И печатается ответ:
>>> %Run -c $EDITOR_CONTENT
+8
>>>
Автор решения: Dmitry Websmith
→ Ссылка
javascript динамически генерирует элементы по адресу 'https://yandex.ru/pogoda/samara'. В этом можно убедиться, если посмотреть вывод responce.text . Там нет 'temp__value temp__value_with-unit'. В этом случае можно использовать selenium:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options=options)
driver.get('https://yandex.ru/pogoda/samara')
soup = BeautifulSoup(driver.page_source, 'lxml')
temp = soup.find('span', class_='temp__value temp__value_with-unit')
driver.quit()
print(temp)
Результат:
<span class="temp__value temp__value_with-unit">+8</span>