Meteen naar de inhoud

De complete gids voor het beheersen van webscraping met Python's prachtige soep en verzoeken

Mijn vriend, wil je de wereld van gegevens op internet ontsluiten? Wilt u gegevens uit websites extraheren en analyseren voor uw onderzoek, bedrijf of zijprojecten?

Zo ja, laat mij je dan kennis laten maken met de magische wereld van web schrapen – automatisch informatie uit websites halen.

Webscrapen klinkt misschien ingewikkeld, maar dat hoeft niet met de juiste tools te gebeuren. In deze uitgebreide gids geef ik je alle kennis om een ​​professionele webschraper te worden met behulp van twee van Python's krachtigste webschraapbibliotheken: Mooie soep en Aanvragen.

Dit is wat ik zal behandelen:

  • Waarom webscrapen zo nuttig is
  • Hoe webscrapen eigenlijk werkt
  • Aanvragen installeren en verzenden met Python Requests
  • HTML-pagina's parseren met Beautiful Soup
  • Stap voor stap een complete schraper bouwen
  • Tips, trucs en best practices
  • Ethische overwegingen voor verantwoord webscrapen

Laten we gaan schrapen!

Waarom webscrapen zo nuttig is

Think Analistenbureau Gartnerzal ruim 75% van alle organisaties in 2024 een of andere data-integratieoplossing zoals webscraping implementeren. Waarom is webscraping zo populair geworden?

Hier zijn enkele van de belangrijkste gebruiksscenario's:

  • Prijsbewaking – Volg prijzen voor producten, voorraden, enz. op e-commercesites. Handig voor financiële analyse.

  • Lead generation – Bouw databases met zakelijke contactgegevens uit telefoongidsen en lijstenites. Ideaal voor verkoop- en marketingteams.

  • Onderzoek – Verzamel gegevens van informatieve sites en pagina's. Helpt onderzoekers, journalisten en analisten bij het automatiseren van gegevensverzameling.

  • Monitoren – Controleer websites en pagina’s op veranderingen in de loop van de tijd. Handig voor SEO en beveiligingsmonitoring.

  • machine learning – Verzamel en extraheer grote trainingsdatasets voor machine learning-modellen.

Met webscraping kunt u eindeloze hoeveelheden openbaar beschikbare gegevens van internet verzamelen, die vervolgens kunnen worden gestructureerd, geanalyseerd en in modellen of applicaties kunnen worden ingevoerd. Het stelt je in staat coole dingen te bouwen!

Think Statistiekwordt meer dan 50% van alle verzamelde gegevens gebruikt voor business intelligence, 15% voor het genereren van leads en 10% voor onderzoek naar prijsmonitoring. De toepassingen zijn eindeloos.

Nu je weet waarom webscrapen zo nuttig is in alle sectoren, laten we eens kijken hoe het onder de motorkap daadwerkelijk werkt.

Hier leest u hoe webscrapen eigenlijk werkt

Op een hoog niveau zijn hier de gebruikelijke stappen voor een webscraping-project:

  1. Identificeer je doelwit – Welke website(s) wilt u schrappen en welke gegevens moeten worden geëxtraheerd?

  2. Analyseer de structuur – Inspecteer de pagina's om te bepalen hoe u de vereiste gegevens moet extraheren.

  3. Schrijf de schraper – Script om pagina's op te vragen en de HTML te parseren om gegevens te extraheren.

  4. Sla de gegevens op – Bewaar geschrapte gegevens in een database of bestand voor later gebruik.

  5. Itereren en verfijnen – Verbeter de scraper om meer pagina's, fouten en randgevallen te verwerken.

Webschrapers automatiseren het gegevensextractieproces. Maar hoe werken ze onder de motorkap? Dit is wat er gebeurt:

  1. De schraper stuurt HTTP-verzoeken naar de doelwebsite om webpagina's te downloaden.

  2. De website reageert met HTML pagina's met de gegevens.

  3. de schraper parseert de HTML met behulp van een parser zoals Beautiful Soup.

  4. It haalt de benodigde gegevens eruit met behulp van CSS-selectors, reguliere expressies, enz.

  5. Tenslotte zijn er de gegevens gestructureerd en opgeslagen in een database, JSON, CSV, enz.

Laten we nu eens kijken naar twee van de populairste en krachtigste bibliotheken van Python die het eenvoudig maken om robuuste webschrapers te implementeren: Requests en Beautiful Soup.

Voldoe aan Python-verzoeken - De eenvoudigste manier om HTTP-verzoeken te doen

Aanvragen is een elegante Python-bibliotheek die alle complexiteit wegneemt bij het maken van HTTP-verzoeken voor interactie met webservers.

Het abstraheert alle details van het gebruik:

  • URL's
  • HTTP-methoden (GET, POST, PUT, DELETE, enz.)
  • Coderingsparameters
  • Het afhandelen van de inhoud van de reacties
  • Cookies
  • authenticatie
  • En nog veel meer!

Het gebruik van verzoeken is ongelooflijk eenvoudig. Om een ​​webpagina te pakken, gewoon import requests en:

response = requests.get(‘http://example.com‘)
print(response.text) # Print response content

Het kan net zo gemakkelijk POST-verzoeken verzenden:

data = {‘key‘: ‘value‘}
response = requests.post(‘http://example.com‘, data=data)

Enkele belangrijke kenmerken die Verzoeken van onschatbare waarde maken:

  • Ondersteunt alle HTTP-methoden: GET, POST, PUT, DELETE, HEAD, etc.

  • Automatische codering van parameters en URL's

  • Ingebouwde pooling van verbindingen en TCP Keep-Alive

  • Ondersteunt HTTP, SOCKS, SSL-proxy's

  • Automatische parsering van antwoordheaders

  • Time-outinstellingen en automatische nieuwe pogingen

  • Streaming van grote bestandsdownloads

  • Geweldig ecosysteem van extensies van derden

Of je nu een expert of een beginner bent, Requests neemt de pijn weg van het gebruik van HTTP in Python. Laten we nu eens kijken naar het verwerken en parseren van de HTML-pagina's die we terugkrijgen.

Parseer HTML-pagina's als een professional met Python Beautiful Soup

Oké, met Requests kun je eenvoudig webpagina's programmatisch downloaden. Maar hoe halen we de specifieke gegevens die we nodig hebben uit de HTML-inhoud?

Dit is waar het prachtig ontworpen is Mooie soep bibliotheek komt binnen.

Beautiful Soup is gespecialiseerd in het parseren van rommelige, complexe HTML/XML-documenten en biedt eenvoudige manieren om door de geparseerde inhoud te navigeren en deze te doorzoeken.

Het verwerkt automatisch slecht opgemaakte code, converteert deze naar een parseerbare structuur en maakt het mogelijk deze te doorzoeken met behulp van methoden als:

  • find() – Zoek een enkel element via CSS-selector of attribuut
  • find_all() – Vind alle bijpassende elementen.
  • select() – CSS-selectorondersteuning om elementen te vinden
  • get_text() – Extraheer tekst binnen het element

Beschouw deze rommelige HTML:

<html>
   <body>

     <div>
       <p>Hello World</p>
     </div>
   </body>
</html>

We kunnen de <p> tekst ondanks de verkeerd opgemaakte HTML:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, ‘html.parser‘) 
text = soup.find(‘div‘).p.get_text() # Returns "Hello World" 

Beautiful Soup verwerkt al het parseren automatisch en biedt een gebruiksvriendelijke interface.

Nog enkele coole functies:

  • Integreert met parsers zoals html.parser, lxml, html5lib

  • Navigeer door de ontleedboom met behulp van .next_sibling, .parent, Etc.

  • Zoek met behulp van CSS-selectors zoals select()

  • Maak HTML mooier en bekijk de ontleedboom

  • Converteer documenten naar Unicode en omgekeerd

  • Uitgebreide documentatie en communityondersteuning

Tussen verzoeken om de HTML-pagina van de pagina en Beautiful Soup om deze te parseren, beschikt u over de perfecte combinatie om gegevens uit elke website te extraheren. Laten we nu eens kijken hoe alles samenkomt door een schraper te bouwen.

Webscrapen in actie: een schraper voor e-commerceproducten bouwen

Nu we de basis begrijpen, gaan we onze webscraping-vaardigheden op de proef stellen door een script te ontwikkelen om productvermeldingen van een e-commercewebsite te schrapen.

Dit zijn de stappen die we zullen volgen:

  1. Identificeer de doelsite en gegevens die u wilt schrapen
  2. Analyseer de HTML-structuur van de site
  3. Gebruik Verzoeken om pagina's te downloaden
  4. Pagina's parseren met BeautifulSoup
  5. Extraheer productgegevens naar een CSV-bestand
  6. Behandel paginering

Laten we beginnen!

Een website en gegevens kiezen om te schrapen

Voor dit voorbeeld schrappen we de catalogus uit boeken.toscrape.com, een demo-boekwinkelsite.

Ons doel is het extraheren van:

  • Product titel
  • Prijs
  • Rating
  • URL van de afbeelding

En sla deze gegevens op in een CSV-bestand, zodat u ze later kunt analyseren. Laten we de paginastructuur inspecteren.

Analyse van de paginastructuur met Chrome DevTools

Door de paginabron of Chrome DevTools te bekijken, kunnen we zien dat de gewenste productgegevens zich in HTML-elementen bevinden, zoals:

<img class="thumbnail" src="../media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg">



<p class="price_color">£51.77</p> 

<p class="instock availability">
    <i class="icon-ok"></i>In stock
</p>

<p>
    <i class="icon-star"></i>
    <i class="icon-star"></i>
    <i class="icon-star"></i>
    <i class="icon-star"></i>
    <i class="icon-star"></i>
</p>

We kunnen de element-ID's, klassen en CSS-kiezers gebruiken om de gegevens te targeten.

Pagina's ophalen met Python-verzoeken

Laten we de pagina's ophalen met behulp van Requests. Goed:

  1. Definieer de start-URL
  2. Haal het op met een GET te vragen
  3. Sla de antwoordinhoud op
import requests

url = ‘https://books.toscrape.com/catalogue/page-1.html‘ 

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

Makkelijk genoeg! Verzoeken verwerken automatisch de codering van de URL en parameters voor ons.

De pagina-HTML parseren met Beautiful Soup

Nu kunnen we de HTML-pagina van de pagina parseren met behulp van Beautiful Soup:

from bs4 import BeautifulSoup

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

Hiermee wordt de HTML-inhoud geparseerd met behulp van de ingebouwde html.parser. We zijn klaar om gegevens te extraheren!

Productgegevens extraheren met CSS-kiezers

Op basis van een eerdere analyse van de HTML-structuur kunnen we CSS-selectors gebruiken om elementen te targeten en tekst te extraheren:

# Extract product info
title = soup.select_one(‘h1‘).text
price = soup.select_one(‘.price_color‘).text 
rating = soup.select_one(‘.star-rating‘)[‘class‘]
image = soup.select_one(‘.thumbnail‘)[‘src‘]

print(title, price, rating, image)

Beautiful Soup maakt het extraheren van geneste gegevens eenvoudig select(), select_one()en andere methoden!

Geschrapte gegevens opslaan in een CSV

Laten we het allemaal samenvoegen en de producten op de pagina doornemen. Wij zullen:

  • Extraheer de gegevens van elk product in een woordenboek
  • Schrijf elk product op een rij products.csv
import requests 
from bs4 import BeautifulSoup
import csv

url = ‘http://books.toscrape.com/catalogue/page-1.html‘

products = [] # List to store products

# Download page
response = requests.get(url)
soup = BeautifulSoup(response.text, ‘html.parser‘)

# Extract all products on page
product_list = soup.find_all(‘article‘, {‘class‘: ‘product_pod‘})

for product in product_list:
   title = product.find(‘h3‘).find(‘a‘)[‘title‘]
   price = product.select_one(‘.price_color‘).text
   rating = product.select_one(‘.star-rating‘)[‘class‘]
   image = product.select_one(‘img‘)[‘src‘]

   product = {
      ‘title‘: title,  
      ‘price‘: price,
      ‘rating‘: rating,
      ‘image‘: image
   }

   products.append(product)

# Write CSV file 
with open(‘products.csv‘, ‘w‘) as outfile:
   writer = csv.writer(outfile)
   writer.writerow([‘title‘, ‘price‘, ‘rating‘, ‘image‘]) # Header row

   for product in products:
       writer.writerow(list(product.values()))

Ons script extraheert de productgegevens in een woordenboek en schrijft elk product naar een nieuwe rij products.csv - missie volbracht!

Maar we hebben tot nu toe slechts één pagina geschraapt. Laten we vervolgens de paginering afhandelen...

Paginering afhandelen

Om meerdere pagina's te schrapen, moeten we:

  1. Controleer of er een volgende pagina is
  2. Als dit het geval is, volgt u de link op de volgende pagina
  3. Ga door met schrapen tot de laatste pagina

Veel sites gebruiken ?page={number} of rel="next" koppelingen om de paginering af te handelen.

We kunnen onze schraper verbeteren om gemakkelijk gepagineerde catalogi te verwerken:

url = ‘https://books.toscrape.com/catalogue/page-1.html‘

while True:

   # Scrape current page
   # ...

   # Check for next page
   next_page = soup.find(‘a‘, {‘rel‘: ‘next‘})
   if next_page:
       url = next_page[‘href‘]
       continue
   else:
       break

print(‘Scraping complete!‘)  

Dit loopt door alle pagina's door de rel=‘next‘ links totdat er niets meer over is!

En daarmee hebben we een complete scraper gebouwd om gepagineerde gegevens te extraheren en deze naar een CSV te exporteren voor verdere analyse!

Niet zo slecht voor een beginner, toch? Laten we samenvatten wat we tot nu toe hebben geleerd:

  • Aanvragen maakt het verzenden van HTTP-verzoeken eenvoudig
  • Mooie soep parseert HTML en maakt het doorzoeken van de DOM mogelijk
  • We kunnen gegevens identificeren met behulp van Chrome DevTools
  • Gegevens extraheren met CSS-selectors en elementattributen
  • Bewaar geschrapte gegevens in CSV/JSON formaten

Deze kernconcepten vormen de basis voor het bouwen van robuuste crawlers. Laten we nu eens kijken naar enkele professionele tips en best practices.

Tips en trucs om uw webscrapingvaardigheden te verbeteren

Hier zijn enkele handige tips die ik in de loop der jaren heb geleerd voor webscraping op een hoger niveau:

Gebruik een planner zoals Celery

Het is een goede gewoonte om scrapers volgens een schema (bijvoorbeeld dagelijks) te gebruiken in plaats van voortdurend te schrapen. Celery maakt het automatiseren van schrapers op vaste intervallen of willekeurige schema's mogelijk.

Implementeer beperking en nieuwe pogingen

Vertraag de schrapersnelheid met behulp van time.sleep() om overweldigende sites te vermijden. Probeer ook mislukte aanvragen opnieuw met behulp van exponentiële uitstel.

Gebruik een proxyservice zoals BrightData

Roterende proxy's helpen verzoeken over IP's te verdelen en te voorkomen dat ze worden geblokkeerd. Diensten zoals BrightData bieden betaalbare residentiële proxy's die het meest geschikt zijn voor webscrapen.

Willekeurige gebruikersagenten

Gebruik bij elk verzoek een willekeurige user-agent om verschillende apparaten te simuleren die de site bereiken. Dit helpt botdetectie te voorkomen.

Cache gedownloade pagina's

Bewaar reeds geschraapte pagina's in een lokale cache om herhaalde downloads te voorkomen. Redis werkt prima als Python-verzoekcache.

Kies Robuuste Parser zoals lxml

Terwijl html.parser werkt, een industriële parser zoals lxml biedt betere snelheid en nauwkeurigheid bij het parseren van complexe sites.

Valideer en normaliseer geëxtraheerde gegevens

Controleer nogmaals of de geschraapte gegevens overeenkomen met de verwachte formaten en voer eventuele opschoningen uit vóór de analyse.

Gebruik containers voor draagbaarheid

Docker-containers verpakken afhankelijkheden en maken het distribueren van scrapers over omgevingen mogelijk.

Wees creatief en wees niet bang om te experimenteren! Laten we het nu over ethiek hebben.

Best practices voor schrapen – Ethisch en verantwoord schrapen

Webscrapen kan ethische problemen oproepen als het niet op de juiste manier wordt gedaan. Hier volgen enkele praktische tips bij het schrapen:

  • Volg de robots.txt-regels – Vermijd het schrapen van sites die dit verbieden.

  • Controleer de gebruiksvoorwaarden – Vraag eerst toestemming voordat u bepaalde sites schrapt.

  • Minimaliseer de frequentie – Gebruik throttling, planning en caching om verzoeken te beperken.

  • Identificeer jezelf – Configureer een aangepaste user-agentreeks.

  • Vermijd privégegevens – Verzamel alleen openbare informatie.

  • Verantwoord schrapen – Houd rekening met de serverbelasting.

Het is ook hoffelijk om website-eigenaren vooraf op de hoogte te stellen voordat ze grootschalige scrapers op hun site lanceren.

Volg deze richtlijnen om ervoor te zorgen dat uw schrapers een positieve impact hebben!

Ga heen en schrap, mijn vriend!

Klaar is kees! We hebben een hoop terrein bestreken op:

  • Waarom webscrapen een nuttige vaardigheid is
  • Hoe het werkt onder de motorkap
  • Krachtige tools zoals Requests en Beautiful Soup
  • Het bouwen van echte schrapers
  • Geavanceerde trucs en best practices
  • Ethische schrappingsoverwegingen

Hier zijn enkele volgende stappen om uw vaardigheden te verbeteren:

  • Een taal leren – Python is geweldig, maar Ruby en Node.js werken ook goed

  • Probeer raamwerken – Scrapy, Poppenspeler of Toneelschrijver zorgen voor hogere abstracties

  • Gebruik een ETL-tool – ParseHub, import.io en anderen hebben GUI's om snel scrapers te bouwen

  • Praktijk! - Ervaring is de beste leermeester. Bouw projecten om toe te passen wat je hebt geleerd.

De wereld van webdata ligt binnen handbereik. Ga nu op onderzoek uit, verzamel interessante sites, analyseer coole datasets en automatiseer alle dingen!

Veel plezier met schrapen, mijn vriend! Laat het me weten als je nog vragen hebt.

Doe mee aan het gesprek

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