Web scraping : attribut href manquant – Besoin de simuler les clics de souris pour le web scraping ?
P粉550823577
P粉550823577 2024-04-04 10:32:06
0
1
3586

Pour un projet de web scraping amusant, je souhaite collecter des données de la LNH à partir de ttps://www.nhl.com/stats/teams.

Il existe un onglet d'exportation Excel cliquable que je peux trouver en utilisant seleniumbs4.

Malheureusement, ça se termine là : Puisqu'il n'y a pas d'attribut href, je n'arrive pas à accéder aux données.

J'ai obtenu ce que je veux en simulant un clic de souris avec pynput mais je veux savoir :

Qu'aurais-je pu faire différemment ? Si cela semble gênant.

-> Les étiquettes avec les icônes d'exportation peuvent être trouvées ici :

a class="styles__ExportIcon-sc-16o6kz0-0 dIDMgQ"

-> Ceci est mon 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`

P粉550823577
P粉550823577

répondre à tous(1)
P粉807471604

Non href属性,通过JS触发下载。使用 selenium 时找到您的元素并使用 .click() Télécharger le fichier :

driver.find_element(By.CSS_SELECTOR,'h2>a').click()

Utilisez la classe commençant par css 选择器 来获取直接子级 的<a>

或者通过以styles__E​​xportIcon ici pour la sélectionner directement :

driver.find_element(By.CSS_SELECTOR,'a[class^="styles__ExportIcon"]').click()

Exemple

Vous devrez peut-être gérer la bannière onetrust, alors cliquez d'abord dessus puis téléchargez le formulaire.

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()
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal