Meteen naar de inhoud

Webscraping met Selenium en Python: de ultieme gids voor 2024

Webscrapen is het proces waarbij automatisch gegevens van websites worden geëxtraheerd met behulp van softwaretools en scripts. Selenium is een van de meest populaire tools die worden gebruikt voor webscrapen vanwege de sterke webautomatiseringsmogelijkheden. In deze uitgebreide gids zullen we webscrapen met Selenium verkennen met behulp van Python.

Overzicht van webscraping

Voordat we in Selenium duiken, moeten we eerst begrijpen wat webscrapen is en waarom het wordt gebruikt.

Webscraping verwijst naar technieken voor het automatisch verzamelen van gegevens van websites via scripts en bots in plaats van handmatig kopiëren en plakken. De geschraapte gegevens worden vervolgens gestructureerd en opgeslagen in een database of spreadsheet voor verdere analyse.

De meest voorkomende gebruiksscenario's van webscraping zijn:

  • Prijsbewaking – Volg prijzen voor producten op e-commercesites. Help veranderingen en prijsfouten op te sporen.

  • Marktonderzoek – Verzamel gegevens over concurrenten, producten, recensies enz. van internet.

  • Nieuwsmonitoring – Schraap artikelen en nieuws van mediasites. Handig voor journalisten en PR-professionals.

  • Onderzoek – Sociale wetenschappers gebruiken webscraping om gegevens van sociale media te verzamelen voor onderzoeksstudies.

  • Database bouwen – Creëer gestructureerde datasets van bedrijfscontacten, productspecificaties enz. door websites te schrapen.

Webscraping kan enorme hoeveelheden tijd en moeite besparen in vergelijking met handmatige gegevensverzameling. Zorg er echter voor dat u ethisch aan het schrappen bent en de robots.txt-regels van een website volgt.

Waarom Selenium gebruiken voor webscrapen?

Er zijn veel tools beschikbaar voor webscrapen, zoals BeautifulSoup, Scrapy, Puppeteer enz. Selenium onderscheidt zich echter wanneer u:

  • Verzamel gegevens van complexe, dynamische websites die inhoud laden met behulp van JavaScript.

  • Communiceer met websites door op knoppen te klikken, formulieren in te vullen enz. voordat u gaat scrappen.

  • Schrap gegevens die verborgen zijn achter inlogformulieren of betalingspoortjes.

  • Schaal scraping op om grote websites met duizenden pagina's te kunnen verwerken.

Selenium automatiseert een echte webbrowser zoals Chrome of Firefox in plaats van alleen HTML op te halen en te parseren zoals de meeste andere webschrapers. Dit maakt het mogelijk om dynamische gegevens te schrapen.

Bovendien heeft Selenium een ​​grote community achter zich en ondersteunt het meerdere talen, waaronder Python, Java, C# en JavaScript.

Selenium Web Scraping-architectuur

Voordat we ingaan op de code, laten we eerst begrijpen hoe Selenium webscraping doet:

Selenium-architectuur voor webscraping

  • Selenium communiceert met de browser via een WebDriver-API.

  • De WebDriver start en bestuurt een browser zoals Chrome.

  • Het voert scrapcode en scripts uit die zijn geschreven in Python, Java enz.

  • Webpagina's worden weergegeven en verwerkt door de browser.

  • Geschrapte gegevens worden verzameld en gestructureerd volgens de logica van het script.

  • U kunt de scraper op uw eigen machines inzetten of een cloudplatform gebruiken.

Dankzij deze architectuur kan Selenium zelfs complexe JavaScript-zware sites schrapen die tools als Requests niet aankunnen.

Selenium instellen met Python

Voordat we kunnen beginnen met webscrapen, moeten we Selenium in een Python-omgeving instellen.

Python installeren

Zorg ervoor dat Python 3.6 of hoger op uw systeem is geïnstalleerd. Je kunt de nieuwste Python-versie downloaden van python.org.

Installeer Selenium

Nadat Python is geïnstalleerd, voert u de volgende opdracht uit om Selenium te installeren:

pip install selenium

Hiermee wordt het Python Selenium-pakket van PyPI geïnstalleerd.

Installeer WebDrivers

Met de Selenium WebDriver kunt u browsers voor scrapen besturen. U moet de WebDriver installeren voor de browser die u wilt gebruiken:

Chrome: Download de ChromeDriver die overeenkomt met uw Chrome-versie.

Firefox: Pak de GekkoDriver gebaseerd op uw Firefox-versie.

rand: Installeer de MicrosoftWebDriver.

Zorg ervoor dat het uitvoerbare bestand van WebDriver zich in uw systeemPATH bevindt, zodat Selenium het kan detecteren.

Dat is het! We zijn nu klaar om te beginnen met webscrapen met Selenium Python.

De browser starten

De eerste stap is het starten van de browser via Selenium.

Importeer Selenium en maak een WebDriver instance door het pad door te geven aan het uitvoerbare bestand van het browserstuurprogramma:

from selenium import webdriver

driver = webdriver.Chrome(‘/path/to/chromedriver‘) 

U kunt ook een headless browserinstantie initialiseren die geen zichtbaar venster opent:

from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)

Gebruik vervolgens de get() methode om de browserinstantie naar een URL te laten navigeren:

driver.get(‘https://www.example.com‘)

De browser opent nu de pagina, geeft JavaScript weer, laadt dynamische inhoud enz. Nu kunnen we beginnen met schrapen!

Pagina-elementen zoeken

Om gegevens uit pagina's te extraheren, moeten we eerst de relevante HTML-elementen vinden. Selenium zorgt voor de find_element() methode hiervoor:

search_box = driver.find_element(By.NAME, ‘q‘)

Hiermee wordt het element met het kenmerk name="q" gelokaliseerd. Enkele andere veel voorkomende lokalisatiestrategieën zijn:

  • By.ID – Zoeken op element-ID
  • By.XPATH – Zoeken met behulp van XPath-query
  • By.CSS_SELECTOR – Zoeken met behulp van CSS-selector
  • By.CLASS_NAME – Zoeken op CSS-klassenaam
  • By.TAG_NAME – Zoeken op HTML-tagnaam

U kunt ook meerdere elementen lokaliseren met behulp van find_elements() die een lijst retourneert.

Tekst extraheren

Nadat u een element hebt gevonden, kunt u de tekst ervan extraheren met behulp van de text attribuut:

heading = driver.find_element(By.TAG_NAME, ‘h1‘)
print(heading.text)

Hiermee wordt de <h1> koptekst op de pagina.

Op dezelfde manier kunt u de waarde van invoervelden verkrijgen:

username = driver.find_element(By.ID, ‘username‘)
print(username.get_attribute(‘value‘))

Om op links en knoppen op een pagina te klikken, gebruikt u de click() methode op het element:

link = driver.find_element(By.LINK_TEXT, ‘Next Page‘)
link.click() 

Dit maakt interactie mogelijk met gepagineerde inhoud, pop-ups, modals enz.

Formulieren invullen

U kunt tekst invoeren in tekstvakken en andere invoerelementen met behulp van send_keys():

search_box.send_keys(‘Web Scraping‘)

Hierdoor kunt u inloggen op sites, formulieren indienen enz. voordat u gaat scrappen.

JavaScript uitvoeren

Selenium maakt het ook mogelijk om JavaScript rechtstreeks op pagina's uit te voeren met behulp van execute_script():

driver.execute_script(‘alert("Hello World");‘)

U kunt dit gebruiken om gegevens die door JavaScript in de DOM zijn geïnjecteerd, te schrapen.

Wachten tot elementen zijn geladen

Moderne sites gebruiken zware AJAX en JavaScript om inhoud dynamisch te laden. Soms moet u mogelijk wachten tot bepaalde elementen of gegevens zijn geladen voordat u kunt schrapen.

Selenium heeft WebDriverWait en expected_conditions om dit af te handelen:

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, ‘someid‘)))

Het script wacht nu maximaal 10 seconden totdat het element klikbaar wordt.

Er zijn veel verwachte voorwaarden beschikbaar, zoals zichtbaarheid van elementen, AJAX-ladingen enz. die u kunt gebruiken om dynamische pagina-inhoud te verwerken.

Bladeren door pagina's

Voor lange webpagina's moet u mogelijk naar beneden scrollen om extra inhoud via JavaScript te laden. Selenium kan dit ook doen:

# Scroll down the page
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# Scroll back to top
driver.execute_script("window.scrollTo(0, 0);")   

Hiermee kunt u lange webpagina's schrapen. Dezelfde scrollaanpak werkt voor het schrapen van berichten op Facebook, Twitter en andere sociale-mediasites.

Inloggen en betaalmuren afhandelen

Sommige sites vereisen dat u eerst inlogt voordat u kunt scrapen of hebben mogelijk betaalmuren die de toegang beperken.

U kunt Selenium gebruiken om inloggegevens in te voeren, betaalmuren te omzeilen en toegang te krijgen tot beperkte informatie voor scraping:

username = driver.find_element(By.ID, ‘username‘)
password = driver.find_element(By.ID, ‘password‘)

username.send_keys(‘myusername1234‘) 
password.send_keys(‘mypassword5678‘)

login_button = driver.find_element(By.XPATH, ‘//button[text()="Log in"]‘)
login_button.click()

Hierdoor kunt u inloggen op sites zoals Amazon, eBay enz. om beveiligde inhoud te schrapen.

Selenium Web Scraping-voorbeeld

Laten we alles samenbrengen in een Selenium-webschraperscript:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# Click cookie consent banner
cookie_btn = driver.find_element(By.ID, ‘cookiebanner-accept‘) 
cookie_btn.click()

# Wait for results to load
results = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "results"))
)

# Extract data from results 
headings = results.find_elements(By.TAG_NAME, ‘h3‘)
for heading in headings:
   print(heading.text)

driver.quit()

Dit script:

  • Start Chrome en gaat naar example.com
  • Klikt op de cookietoestemmingsbanner om scraping in te schakelen
  • Wacht tot de resultaten zijn geladen
  • Extraheert kopteksten en drukt deze af

Je kunt dit verbeteren met scrollen, inlogmogelijkheden etc. om krachtige scrapers te bouwen!

Tips voor effectief webscrapen met selenium

Hier zijn enkele tips om uw webscraping-productiviteit te verbeteren met Selenium:

  • Gebruik een headless browser voor sneller schrapen zonder dat de gebruikersinterface hoeft te worden weergegeven en weergegeven

  • Beperk onnodige acties zoals het openen van nieuwe tabbladen, hover-interacties enz. om sneller te schrapen

  • Wacht op het laden van de pagina en AJAX verzoeken die moeten worden voltooid voordat gegevens worden geëxtraheerd

  • Stapsgewijs scrollen bij het schrapen van lange pagina's om te voorkomen dat alles in één keer wordt geladen

  • Gebruik CSS-kiezers voor leesbaarheid en prestaties bij het lokaliseren van elementen

  • Probeer het opnieuw bij fouten in plaats van volledig te stoppen om de schrapers robuuster te maken

  • Gaspedaal verzoeken om te voorkomen dat servers overbelast raken en geblokkeerd raken

  • Ren in de cloud met behulp van services zoals Selenium Grid voor betrouwbaarheid en schaalbaarheid

Selenium-alternatieven voor webscrapen

Hier zijn enkele andere populaire tools voor webscraping waar u naar kunt kijken:

  • Mooie soep – Toonaangevende Python-bibliotheek voor het scrapen van HTML en XML

  • Scrapy – Snel webcrawlframework voor grote scrapingprojecten

  • poppenspeler – Headless Chrome-scraping-bibliotheek voor JavaScript-ontwikkelaars

  • Toneelschrijver – Schrapen met Chromium-, Firefox- en WebKit-browsers

  • Apify – Schaalbaar webscrapingplatform met ingebouwde proxy's en headless Chrome

Elk instrument heeft zijn eigen sterke en zwakke punten. Evalueer ze aan de hand van uw specifieke gebruiksscenario bij het selecteren van een webscraping-oplossing.

Conclusie

Selenium is een veelzijdige tool voor het bouwen van robuuste webschrapers in Python en andere talen. Het opent mogelijkheden zoals het scrapen van JavaScript-sites, het verwerken van dynamische inhoud, toegang krijgen tot beperkte gegevens enz. die anders moeilijk zijn.

Zorg ervoor dat u ethische schrappingspraktijken volgt en de beperkingen van websites respecteert bij het gebruik van Selenium. Overbelast servers niet met agressief schrapen.

Met de kracht van Selenium, Python en sound scraping-strategieën kunt u enorme hoeveelheden nuttige gegevens uit het internet halen voor toepassingen op het gebied van business intelligence, onderzoek en datawetenschap.

Doe mee aan het gesprek

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *