Вот решение, использующее селен для автоматизации браузера
from selenium import webdriver
import pandas as pd
driver = webdriver.Chrome(chromedriver)
driver.implicitly_wait(30)
driver.get('https://www.wunderground.com/personal-weather-station/dashboard?ID=KMAHADLE7#history/tdata/s20170201/e20170201/mcustom.html')
df=pd.read_html(driver.find_element_by_id("history_table").get_attribute('outerHTML'))[0]
Time Temperature Dew Point Humidity Wind Speed Gust Pressure Precip. Rate. Precip. Accum. UV Solar
0 12:02 AM 25.5 °C 18.7 °C 75 % East 0 kph 0 kph 29.3 hPa 0 mm 0 mm 0 0 w/m²
1 12:07 AM 25.5 °C 19 °C 76 % East 0 kph 0 kph 29.31 hPa 0 mm 0 mm 0 0 w/m²
2 12:12 AM 25.5 °C 19 °C 76 % East 0 kph 0 kph 29.31 hPa 0 mm 0 mm 0 0 w/m²
3 12:17 AM 25.5 °C 18.7 °C 75 % East 0 kph 0 kph 29.3 hPa 0 mm 0 mm 0 0 w/m²
4 12:22 AM 25.5 °C 18.7 °C 75 % East 0 kph 0 kph 29.3 hPa 0 mm 0 mm 0 0 w/m²
Редактирование с разбивкой в точности того, что происходит, поскольку приведенный выше однострочный код на самом деле не очень хороший самодокументированный код:
После настройки драйвера мы выбираем таблицу со значением ее идентификатора (К счастью, этот сайт на самом деле использует разумные и описательные идентификаторы)
tab=driver.find_element_by_id("history_table")
Затем из этого элемента мы получаем HTML вместо элемента веб-драйвераobject
tab_html=tab.get_attribute('outerHTML')
Мы используем pandas для анализа html
tab_dfs=pd.read_html(tab_html)
Из документов :
"read_html возвращает списокобъектов DataFrame, даже если в содержимом HTML содержится только одна таблица "
Таким образом, мы вносим индекс в этот список с единственной таблицей, которая у нас есть, с нулевым индексом
df=tab_dfs[0]