问题是您尝试从页面中抓取的 div 是使用 Javascript 动态生成的。它不在HTML source code 中,这意味着urllib.request 无权访问该信息。当您在浏览器中加载页面时,您应该注意到该信息不会立即显示在屏幕上,而是在页面加载几秒钟后显示统计信息。
您可以尝试查看网站的 Javascript 或源文件,并尝试使用 find where the information is coming from(通常是 JSON 或 XML 文件),或使用 selenium(自动浏览器)之类的东西来解析之后的页面页面上有相关元素:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
try:
driver.get("http://smartgriddashboard.eirgrid.com/#all/generation") # load the page
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.key-stats-container > .stat-box'))) # wait till relevant elements are on the page
except:
driver.quit() # quit if there was an error getting the page or we've waited 15 seconds and the stats haven't appeared.
stat_elements = driver.find_elements_by_css_selector('.key-stats-container > .stat-box')
for el in stat_elements:
print(el.find_element_by_css_selector('label').text)
print(el.find_element_by_css_selector('p').text)
driver.quit()
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.key-stats-container > .stat-box'))) 将等待 15 秒或until 在超时之前通过 css 选择器找到一个元素,您可以根据需要更改 15 秒。
我不只是等待.key-stats-container,而是等待.key-stats-container > .stat-box(具有stats-box 类的元素,它是.key-stats-container 的直接子元素),因为有一个点.key-stats-container 已加载但统计数据没有:
<span class="load"></span>
<div class="error-msg">
<p>We had some trouble gathering the data.</p>
<p>Refresh to try again.</p>
</div>
</div>
这是输出:
LATEST SYSTEM
GENERATION
4,885 MW
THERMAL GENERATION
(COAL, GAS, OTHER)
56.81 %
RENEWABLE
GENERATION
43.03 %
NET
IMPORT
0.16 %