Я пытаюсь собрать точку данных с веб-сайта данных об электричестве:
электричествоКарта | Выбросы 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?
Спасибо, Тим. Я впервые работаю с HTML/Javascript. Определенно ошибка новичка, чтобы перепутать два. Хвае подал заявку на получение ключа для доступа к API. Попробую и это.
Как заявил @ Тим Робертс, веб-сайт полностью создан с помощью 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 от новичка в программировании! Это было именно то, что я искал.
Этот веб-сайт построен полностью с помощью Javascript. Ни один из этих текстов не присутствует в загруженном HTML-коде (вы его смотрели?). Вам нужно будет использовать Selenium для запуска настоящего браузера Chrome, чтобы выполнить Javascript. Прежде чем делать все эти проблемы, вы должны проверить, есть ли на этом веб-сайте API, с помощью которого вы можете напрямую получить номер. Это такой сайт, на котором может быть такая вещь.