Использование идентификатора таблицы с помощью beautifulsoup для извлечения данных в python

#python #web-scraping #beautifulsoup

#python #веб-очистка #beautifulsoup

Вопрос:

Я попытался использовать следующий код, но он не находит таблицу, несмотря на то, что это работало на других веб-страницах.

 from bs4 import BeautifulSoup
from selenium import webdriver

chromedriver = (r'C:Userscchromedriver.exe')

driver = webdriver.Chrome(chromedriver)
driver.get("https://isodzz.nafta.sk/yCapacity/#/?nav=ss.od.nom.camp;lng=EN")

html = driver.page_source
soup = BeautifulSoup(html, "lxml")

table = soup.find_all('table', {'id':'nominations_point_data_c'})
print(table)
 

Ответ №1:

Сделайте это так. Сначала вам нужно дождаться появления таблицы. Этот сайт ужасно медленно загружается. Поскольку в HTML есть table элемент, который мы можем использовать pandas для аккуратной печати.

 from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import pandas as pd

driver = webdriver.Chrome(executable_path='C:/bin/chromedriver.exe')
driver.get("https://isodzz.nafta.sk/yCapacity/#/?nav=ss.od.nom.camp;lng=EN")
element = WebDriverWait(driver, 25).until(EC.visibility_of_element_located((By.CLASS_NAME, "MobileOverflow"))) #Element is present now
page = driver.page_source #Get the HTML of the page
df = pd.read_html(page) #Make pandas read the HTML
table = df[0]   #Get the first table on the page
print(table)
 

Вывод:

  Date: Confirmed Nomination                 
         Date:      Injection [MWh] Withdrawal [MWh]
0   01.11.2020           13 410.490       11 626.856
1   02.11.2020           11 874.096       12 227.510
2   03.11.2020                0.000            0.000
3   04.11.2020                0.000            0.000
4   05.11.2020                0.000            0.000
5   06.11.2020                0.000            0.000
6   07.11.2020                0.000            0.000
7   08.11.2020                0.000            0.000
8   09.11.2020                0.000            0.000
9   10.11.2020                0.000            0.000
10  11.11.2020           34 201.032       37 624.672
11  12.11.2020           54 427.560       27 940.872
12  13.11.2020           49 069.584       21 538.372
13  14.11.2020           54 361.138       15 312.000
14  15.11.2020           57 592.332       15 804.000
15  16.11.2020           57 515.424       20 280.000
16  17.11.2020           53 315.328       29 432.000
17  18.11.2020           48 960.672       26 192.000
18  19.11.2020           46 716.561       33 873.233
19  20.11.2020           43 852.200       43 806.382
20  21.11.2020           29 639.328       33 888.000
21  22.11.2020                0.000            0.000
 

Комментарии:

1. Большое спасибо. Думаю, мне нужно будет немного почитать, чтобы понять, как это работает.