Für ein unterhaltsames Web-Scraping-Projekt m?chte ich NHL-Daten von ttps://www.nhl.com/stats/teams sammeln.
Es gibt eine anklickbare Excel-Export-Registerkarte, die ich mit selenium
和 bs4
finden kann.
Leider endet es hier:
Da es kein href
-Attribut gibt, kann ich anscheinend nicht auf die Daten zugreifen.
Ich habe bekommen, was ich will, indem ich einen Mausklick mit pynput
simuliert habe, aber ich m?chte wissen:
Was h?tte ich anders machen k?nnen? Wenn es sich unangenehm anfühlt.
-> Etiketten mit Exportsymbolen finden Sie hier:
a class="styles__ExportIcon-sc-16o6kz0-0 dIDMgQ"
-> Das ist mein Code
`import pynput from pynput.mouse import Button, Controller import time from bs4 import BeautifulSoup from selenium import webdriver driver = webdriver.Chrome(executable_path = 'somepath\chromedriver.exe') URL = 'https://www.nhl.com/stats/teams' driver.get(URL) html = driver.page_source # DOM with JavaScript execution complete soup = BeautifulSoup(html) body = soup.find('body') print(body.prettify()) mouse = Controller() time.sleep(5) # Sleep for 5 seconds until page is loaded mouse.position = (1204, 669) # thats where the icon is on my screen mouse.click(Button.left, 1) # executes download`
沒有href
屬性,通過JS觸發(fā)下載。使用 selenium
時(shí)找到您的元素并使用 .click()
下載文件:
driver.find_element(By.CSS_SELECTOR,'h2>a').click()
在這里使用 css 選擇器
來獲取直接子級
或者通過以的<a>
styles__E??xportIcon
開頭的類直接選擇它:
driver.find_element(By.CSS_SELECTOR,'a[class^="styles__ExportIcon"]').click()
您可能需要處理 onetrust 橫幅,因此請先單擊它,然后下載該表。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) url = 'https://www.nhl.com/stats/teams' driver.get(url) driver.find_element(By.CSS_SELECTOR,'#onetrust-reject-all-handler').click() driver.find_element(By.CSS_SELECTOR,'h2>a').click()