Я только предполагаю, что это то, что вы после. Это выглядит правильно?
import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
driver.get('https://www.premierleague.com/match/46608')
elem = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="mainContent"]/div/section/div[2]/div[2]/div[1]/div/div/ul/li[3]')))
elem.click()
time.sleep(5)
dfs = pd.read_html(driver.page_source)
for df in dfs:
if len(df) > 10:
print (df)
driver.close()
Вывод:
Crystal Palace Unnamed: 1 Everton
0 35.4 Possession % 64.6
1 2.0 Shots on target 3.0
2 6.0 Shots 10.0
3 467.0 Touches 722.0
4 268.0 Passes 500.0
5 21.0 Tackles 14.0
6 21.0 Clearances 18.0
7 6.0 Corners 2.0
8 4.0 Offsides 0.0
9 2.0 Yellow cards 1.0
10 0.0 Red cards 1.0
11 16.0 Fouls conceded 14.0
Объяснение .page_source
и dfs
частей:
Так что с Selenium, вы абсолютно можете разобрать страницу и извлечь нужные данные, используя исключительно селен. Я лично больше знаком с BeautifulSoup. driver.page_source
просто извлекает источник html со страницы, которая открывается в вашем браузере Selenium. и что вы могли бы сделать, это передать это в beausitfulsoup с помощью soup = BeautifulSoup(driver.page_source, 'html.parser')
Однако, если я использую теги <table>
, я не буду беспокоиться о BeautifulSoup (хотя нет ничего плохого в том, чтобы использовать его для анализа таблиц) , Но Pandas
имеет функцию .read_html()
(которая на самом деле использует BeautifulSoup под капотом) для анализа <table>
тегов. Поэтому вместо того, чтобы кормить html в bs4, я вставил его в pandas с dfs = pd.read_html(driver.page_source)
, это будет возвращать список фреймов данных / таблиц для каждого тега <table>
, который он анализирует в html , Поэтому после использования .read_html()
достаточно просто извлечь правильную таблицу из списка возвращенных таблиц.
Затем вы можете манипулировать кадром данных по мере необходимости.