, как указано, вам нужно что-то вроде селена, чтобы загрузить страницу как динамическую.Вам также нужно подождать, пока он загрузится, чтобы получить таблицу.
ПРИМЕЧАНИЕ. Я использовал time.sleep () для ожидания, но я прочитал, что это не лучшее решение.Предлагается использовать WebDriverWait
, но я все еще нахожусь в процессе понимания того, как это будет работать, поэтому обновлю его, как только я поиграю.Тем временем, это должно начать вас.
import bs4
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.misoenergy.org/markets-and-operations/market-reports/market-report-archives/#nt=%2FMarketReportType%3ABids%2FMarketReportName%3AArchived%20Cleared%20Bids%20%20(zip)&t=10&p=0&s=FileName&sd=desc')
time.sleep(5)
html = driver.page_source
soup = bs4.BeautifulSoup(html,'html.parser')
tables = soup.findAll('table', {'class':'table table-bordered docnav-metadata dataTable no-footer'})
Это сработало для меня с WebDriverWait
:
import bs4
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://www.misoenergy.org/markets-and-operations/market-reports/market-report-archives/#nt=%2FMarketReportType%3ABids%2FMarketReportName%3AArchived%20Cleared%20Bids%20%20(zip)&t=10&p=0&s=FileName&sd=desc')
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "table.table-bordered.docnav-metadata.dataTable.no-footer")))
html = driver.page_source
soup = bs4.BeautifulSoup(html,'html.parser')
tables = soup.findAll('table', {'class':'table table-bordered docnav-metadata dataTable no-footer'})