Очистка веб-страниц с использованием запросов-html. Как получить простой номер с веб-сайта?

Я пытаюсь собрать точку данных с веб-сайта данных об электричестве:
электричествоКарта | Выбросы CO₂ в реальном времени при потреблении электроэнергии

До сих пор я написал этот код:

from requests_html import HTMLSession              #import libraries

s = HTMLSession()

url = 'https://app.electricitymap.org/zone/DK-DK2'

r = s.get(url, headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36'})

webpageTitle = (r.html.find('title', first=True).text)
print(webpageTitle)

Я могу заставить VS Code распечатать название веб-сайта, но меня интересует только количество возобновляемой энергии в данный момент. Это отображается как «обновляемый» циферблат в левом верхнем углу веб-сайта.

Я просмотрел веб-сайт и нашел значение, которое пытаюсь собрать: Скриншот Chrome DevTools.

Что мне нужно написать, чтобы иметь возможность распечатать это значение в Python?

Этот веб-сайт построен полностью с помощью Javascript. Ни один из этих текстов не присутствует в загруженном HTML-коде (вы его смотрели?). Вам нужно будет использовать Selenium для запуска настоящего браузера Chrome, чтобы выполнить Javascript. Прежде чем делать все эти проблемы, вы должны проверить, есть ли на этом веб-сайте API, с помощью которого вы можете напрямую получить номер. Это такой сайт, на котором может быть такая вещь.

Tim Roberts 21.03.2022 23:46

Спасибо, Тим. Я впервые работаю с HTML/Javascript. Определенно ошибка новичка, чтобы перепутать два. Хвае подал заявку на получение ключа для доступа к API. Попробую и это.

BatS00p 22.03.2022 20:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как заявил @ Тим Робертс, веб-сайт полностью создан с помощью Javascript. Я тестировал и requests_html, и selenium. request_html дает пустой вывод, означающий, что JavaScript не может отображать, но селен дает идеальный вывод.

from requests_html import HTMLSession    #import libraries
from bs4 import BeautifulSoup as bs
         
s = HTMLSession()

url = 'https://app.electricitymap.org/zone/DK-DK2'

r = s.get(url, headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36'})


soup=bs(r.text,'html.parser')
renewable=[x.get_text() for x in soup.select('g[class = "circular-gauge"] text')]
print(renewable)

Выход:

[]

#Selenium: You have nothing to install just  you can run the code


from bs4 import BeautifulSoup as bs
import time
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

url = 'https://app.electricitymap.org/zone/DK-DK2'

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()

driver.get(url)
time.sleep(2)


soup=bs(driver.page_source,'html.parser')
renewable=[x.get_text() for x in soup.select('g[class = "circular-gauge"] text')][1]
print(renewable)

Выход:

69%

Большое спасибо @F.hoque от новичка в программировании! Это было именно то, что я искал.

BatS00p 22.03.2022 20:42

Другие вопросы по теме