Meteen naar de inhoud

Wat is gegevensextractie? Een uitgebreide gids voor Python Web Scraping

Gegevensextractie, ook wel webscraping genoemd, is het proces waarbij programmatisch gegevens van websites worden geëxtraheerd. Hierdoor kunt u grote hoeveelheden gegevens van internet verzamelen en deze opslaan in een gestructureerd formaat zoals CSV of JSON voor verdere analyse en gebruik in andere toepassingen.

In deze uitgebreide handleiding bespreken we alles wat u moet weten over gegevensextractie en webscrapen met Python, waaronder:

  • Wat is data-extractie en waarom is het nuttig?
  • Hoe werkt webscraping?
  • Webscraping-methoden en -hulpmiddelen voor Python
  • Stap voor stap een Python-webschraper bouwen
  • Tips om blokkerings- en afhandelingsfouten te voorkomen
  • Juridische en ethische overwegingen

Laten we bij het begin beginnen: wat is gegevensextractie en waarom zou je websites willen schrapen?

Wat is gegevensextractie?

Data-extractie, webscraping, web harvesting – deze termen verwijzen allemaal naar hetzelfde proces van het automatisch verzamelen van gegevens van websites.

Het internet bevat een enorme hoeveelheid gegevens: miljarden webpagina’s gevuld met gestructureerde en ongestructureerde inhoud. Het handmatig extraheren van gegevens van websites is vervelend en tijdrovend. Tools voor gegevensextractie automatiseren dit proces door programmatisch gegevens van webpagina's op te halen en deze om te zetten in een gestructureerd formaat zoals JSON of CSV voor verdere analyse en gebruik.

Hier zijn enkele voorbeelden van wat u kunt doen met webgeschrapte gegevens:

  • Verzamel productgegevens van e-commercewebsites voor prijsmonitoring of marktonderzoek.
  • Verzamel nieuwsartikelen van nieuwssites om AI-modellen te trainen.
  • Stel bedrijfscontactgegevens samen voor leadgeneratie.
  • Verzamel gegevens voor academisch onderzoek uit online bronnen.
  • Vul inhoud in voor zoekmachines of databases.
  • Houd de prijzen en voorraadniveaus van producten in de gaten voor arbitragemogelijkheden.

Met webscraping kunt u grote hoeveelheden gegevens extraheren die onmogelijk handmatig te verzamelen zijn. De toepassingen voor geschraapte gegevens zijn vrijwel eindeloos.

Hoe werkt webscraping?

Op een hoog niveau is hier het webscraping-proces:

  1. De scraper lokaliseert de URL's die u wilt bezoeken. Dit kan een vooraf gedefinieerde lijst met URL's zijn, of de scraper kan recursief links op pagina's volgen om een ​​hele website te doorkruisen.

  2. De scraper downloadt de HTML-inhoud van elke URL met behulp van een HTTP-verzoek.

  3. Parseersoftware haalt de benodigde gegevens uit de HTML. De scraper identificeert nuttige gegevens door te zoeken naar HTML-elementen zoals tabelrijen, titels, links of alinea's.

  4. De geëxtraheerde gegevens worden opgeslagen in een database of uitvoerbestand in een gestructureerd formaat zoals JSON of CSV.

Samenvattend automatiseren webscrapers het bezoeken van webpagina's, het ophalen van de HTML, het parseren van de HTML om nuttige gegevens te identificeren en het opslaan van gestructureerde gegevens om elders te gebruiken.

Laten we nu eens kijken naar enkele veelgebruikte methoden en bibliotheken die voor elke stap van het webscraping-proces in Python worden gebruikt.

Webscraping-methoden en -hulpmiddelen voor Python

Python is een populaire taal voor webscraping vanwege de grote verzameling scrapingbibliotheken en -tools. Hier zijn enkele van de belangrijkste methoden en Python-bibliotheken die worden gebruikt:

HTTP-verzoeken verzenden

Om HTML-pagina's te downloaden, gebruiken Python-scrapers HTTP-verzoekbibliotheken zoals:

  • Aanvragen – Een eenvoudig te gebruiken HTTP-bibliotheek zonder afhankelijkheden buiten de standaardbibliotheek van Python.

  • urllib – De ingebouwde HTTP-verzoekbibliotheek van Python.

  • httpx – Een volledig functionele HTTP-client met ondersteuning voor HTTP/2 en asynchrone verzoeken.

Gegevens parseren en extraheren

Nadat u HTML-pagina's heeft gedownload, moet u de HTML parseren om de benodigde gegevens te extraheren. Veel voorkomende benaderingen zijn onder meer:

  • Normale uitdrukkingen – Regex-patronen kunnen worden gebruikt om overeenkomende tekst te extraheren. Handig voor eenvoudige extracties.

  • Mooie soep – Een populaire Python-bibliotheek voor het parseren van HTML en XML. Maakt het gemakkelijk om gegevens te extraheren met behulp van CSS-selectors of voorwaarden.

  • lxml – Een XML-parseerbibliotheek met hoge prestaties. Kan gebroken HTML parseren. Integreert met BeautifulSoup.

  • PyQuery – Deze bibliotheek is gemodelleerd naar jQuery en ontleedt HTML en maakt selectie en manipulatie van DOM-elementen mogelijk.

Browser-automatisering

Sommige sites gebruiken JavaScript om inhoud dynamisch te laden. Om deze pagina's te schrapen, kunnen Python-scrapers een browser automatiseren met behulp van:

  • Selenium – Start en bestuurt een echte browser zoals Chrome. Kan complexe sites aan met JS.

  • Toneelschrijver – Een nieuwer alternatief voor Selenium voor browserautomatisering.

complete webscraping-frameworks

Er zijn ook complete frameworks die een complete scrapoplossing bieden:

  • Scrapy – Een populair scrapingframework met ingebouwde asynchrone gelijktijdigheid, spider-klassen en integratie met andere Python-bibliotheken.

  • Pyspider – Een open source scraping-systeem met web-UI en integratie met browsers.

Deze bibliotheken kunnen indien nodig met elkaar worden gecombineerd om een ​​op maat gemaakte webschraper in Python te bouwen. Vervolgens doorlopen we een voorbeeld met behulp van enkele van deze hulpmiddelen.

Stap voor stap een Python Web Scraper bouwen

Laten we eens kijken hoe we een eenvoudige webschraper in Python kunnen bouwen om gegevens van een site te extraheren.

We halen boekgegevens uit de open lucht boeken.toscrape.com site met behulp van Requests en BeautifulSoup. De stappen die we behandelen zijn:

1. Identificeer de gegevens die moeten worden geschraapt

Eerst inspecteren we de site in een browser en identificeren we de gegevens die we willen extraheren. We besluiten om voor elk boek de productcategorie, boektitel, prijs en afbeelding te schrappen.

2. Onderzoek de paginastructuur

Vervolgens kijken we naar de onderliggende HTML-structuur van de pagina's met behulp van de browserinspectietool. We zien de boektitel, prijs en afbeelding live binnenin <li> tags met de klasse "product_pod". De categorie bevindt zich in het pagina-URL-pad.

3. Installeer Python-bibliotheken

Nu kunnen we de Python-bibliotheken installeren die we nodig hebben - Verzoeken om de pagina's te downloaden, Beautiful Soup om gegevens uit de HTML te parseren en te extraheren:

pip install requests bs4

4. Bibliotheken importeren

In ons Python-script importeren we Requests en BeautifulSoup:

import requests
from bs4 import BeautifulSoup

5. Definieer URL's om te schrapen

We beginnen met het schrapen van de eerste pagina van de categorie "Mysterie":

url = ‘http://books.toscrape.com/catalogue/category/books/mystery_3/index.html‘

6. Download de pagina-HTML

Met behulp van verzoeken kunnen we de HTML-pagina downloaden:

response = requests.get(url)
html = response.text

7. Parseer met BeautifulSoup

We maken een BeautifulSoup-object van de HTML:

soup = BeautifulSoup(html, ‘html.parser‘)

8. Extraheer de productgegevens

Binnenkant for loops gebruiken we BeautifulSoup om de productgegevens uit de HTML-pagina te extraheren en af ​​te drukken:

# Extract product category from the URL
category = url.split(‘/‘)[-2]

# Extract all products in the page
products = soup.find_all(‘li‘, {‘class‘: ‘product_pod‘}) 

for product in products:

  # Extract title
  title = product.find(‘a‘).text

  # Extract price 
  price = product.find(‘p‘, {‘class‘: ‘price_color‘}).text

  # Extract image url
  img_url = product.find(‘img‘)[‘src‘]

  print(category, title, price, img_url)

9. Herhaal voor elke pagina

Om gegevens van alle pagina's te extraheren, doorlopen we de pagina-URL's, verhogen we het paginanummer en herhalen we het scrapingproces voor elke pagina.

En dat is het! Met slechts een paar regels Python-code met behulp van Requests en BeautifulSoup kunnen we productgegevens van een website schrapen en extraheren.

Dit voorbeeld behandelt de kernconcepten zoals het doen van verzoeken, het parseren van HTML en het gebruiken van selectors om gegevens te extraheren. Met deze bouwstenen kunt u vele soorten sites en gegevens verzamelen.

Laten we nu enkele tips bespreken voor het maken van robuuste schrapers van productiekwaliteit.

Tips voor robuust webscrapen

Hier zijn enkele best practices die u moet volgen bij het bouwen van schrapers:

Fouten en nieuwe pogingen afhandelen

Websites kunnen fouten vertonen, van time-outs tot 500-fouten. Implementeer logica voor foutafhandeling, zoals het opnieuw proberen van mislukte aanvragen. De requests.Session object maakt het eenvoudiger om nieuwe aanvragen te beheren.

Gebruik proxy's en rotatie

Websites kunnen scrapers blokkeren op basis van IP-adressen. Door proxy's te gebruiken en deze te roteren, kunnen verzoeken over meerdere IP's worden verdeeld om te voorkomen dat ze worden geblokkeerd. Python-bibliotheken zoals requests maken het eenvoudig om verzoeken via een proxy te verzenden.

Voeg throttling, pauzes en randomisatie toe

Scrape met redelijke snelheden om overbelasting van servers te voorkomen. Voeg willekeurige tijdspauzes toe tussen verzoeken en maak de volgorde willekeurig om er menselijker uit te zien.

User-agents en headers

Stel de user-agent header zo in dat deze een echte webbrowser nabootst, zodat deze niet als een geautomatiseerde bot verschijnt.

Cache en stapsgewijs opslaan

Sla geschraapte gegevens stapsgewijs op, zodat de voortgang niet verloren gaat in geval van fouten. Caching versnelt het scrapen door te voorkomen dat pagina-inhoud opnieuw wordt gedownload als deze niet is gewijzigd.

Asynchrone scraping

Schraap meerdere pagina's tegelijkertijd om de snelheid te verhogen door gebruik te maken van asynchrone bibliotheken zoals httpx en asyncio.

Robuuste foutafhandeling, gelijktijdigheid, proxy's en caching zorgen ervoor dat uw scraper snel en betrouwbaar gegevens verzamelt zonder te worden geblokkeerd.

Hoewel de meeste openbare gegevens op internet kunnen worden verwijderd, zijn er enkele juridische gebieden waarmee u rekening moet houden:

Algemene voorwaarden – Vermijd het schrapen van sites die dit uitdrukkelijk verbieden in hun servicevoorwaarden.

Wetgeving inzake gegevensbescherming – Verzamel geen persoonlijke gegevens zonder toestemming, zoals vereist door regelgeving zoals de AVG.

Auteursrechten – Kopieer of publiceer geen grote delen van auteursrechtelijk beschermde inhoud rechtstreeks. Kleine monsters voor analyse zijn meestal toegestaan ​​onder redelijk gebruik.

Tarieflimieten – Respecteer tarieflimieten en beperkingen die websites op hun servers hebben ingesteld.

Het is ook een goede ethische praktijk om transparant te zijn in uw schrappingsactiviteiten, in plaats van uw bedoelingen te verbergen. Waar mogelijk verdient het gebruik van officiële API's de voorkeur boven scrapen.

Het is doorgaans toegestaan ​​om bescheiden hoeveelheden gegevens van openbare websites te verzamelen voor niet-commerciële doeleinden, maar respecteer altijd het uitdrukkelijke beleid van de site.

Samenvatting van beste praktijken voor schrapen

  • Gebruik robuuste bibliotheken zoals Requests, BeautifulSoup en Selenium voor het scrapen van dynamische sites
  • Implementeer foutafhandeling en nieuwe pogingen om te voorkomen dat scrapers kapot gaan
  • Roteer proxy's en user-agents om verzoeken te distribueren en blokkades te voorkomen
  • Voeg beperkingen, vertragingen, caching en async toe om efficiënt op schaal te schrapen
  • Vermijd schendingen van de servicevoorwaarden, inbreuken op het auteursrecht en overschrijding
  • Gebruik indien mogelijk officiële API's in plaats van scrapen

Webscraping is een krachtig hulpmiddel om de enorme hoeveelheid gegevens op internet te benutten. Door best practices en API's te volgen, indien beschikbaar, kunt u op een veilige en effectieve manier nuttige gegevens verzamelen.

Python, met zijn ruime keuze aan volwassen scrapingbibliotheken, is een ideale taal voor het bouwen van robuuste data-extractiepijplijnen.

Ik hoop dat deze handleiding een uitgebreid overzicht geeft van webscrapen met Python. De mogelijkheden voor het scrapen van projecten zijn eindeloos: ga eropuit en haal nuttige kennis uit het internet!

Doe mee aan het gesprek

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