Meteen naar de inhoud

Webscraping met Python: de enige gids die u ooit nodig zult hebben

Hoi! Als je wilt leren hoe je Python kunt gebruiken voor webscraping, dan ben je hier aan het juiste adres. Deze uitgebreide gids leert u alles wat u nodig heeft om gegevens uit websites te extraheren.

Laten we beginnen!

Waarom Python gebruiken voor webscraping?

Python is een van de meest populaire talen die worden gebruikt voor webscrapen vanwege de vele voordelen:

Eenvoud – Volgens programmeurs heeft Python een gemakkelijk leesbare syntaxis en is hij intuïtiever dan talen als Java. Dit maakt het voor beginners gemakkelijk om webscraping-code te schrijven en te begrijpen.

Beschikbare bibliotheken – Python heeft een uitgebreide verzameling bibliotheken die speciaal zijn ontworpen voor webscrapen. Enkele populaire zijn BeautifulSoup, Scrapy, Selenium en nog veel meer. We zullen een aantal hiervan later in detail onderzoeken.

Speed – Voor de meeste webscraping-taken biedt Python uitstekende prestaties. Met bibliotheken zoals Asyncio kunt u gegevens asynchroon schrapen om de snelheid te verbeteren.

Veelzijdigheid – Python kan zowel eenvoudige statische websites als complexe dynamische pagina’s aan waarvoor JavaScript-rendering vereist is. U kunt scrapers lokaal uitvoeren of in de cloud implementeren.

Gegevensverwerking – Eenmaal geschraapt, moeten de gegevens worden opgeslagen en geanalyseerd. Python maakt het eenvoudig om gegevens te exporteren naar JSON, CSV, Excel, databases en meer.

Gemeenschap – Volgens Reddit heeft Python een van de grootste ontwikkelaarsgemeenschappen. Er is altijd hulp beschikbaar voor webscraping-uitdagingen!

Overzicht van het webscrapingproces

Wanneer u een webschraper bouwt, volgt u doorgaans deze belangrijke stappen:

  1. Stuur verzoeken – Gebruik een Python HTTP-client om verzoeken naar de doelwebpagina te verzenden en de HTML op te halen.

  2. HTML parseren – Gebruik een parser zoals BeautifulSoup om de HTML te analyseren en relevante gegevens te extraheren.

  3. Gegevens bewaren – Schrijf de geëxtraheerde gegevens naar een bestandsformaat zoals JSON of sla deze op in een database.

  4. Schone gegevens – Transformeer, normaliseer en reinig de geschraapte gegevens indien nodig voor analyse.

  5. Analyseren/visualiseren – Analyseer en visualiseer indien nodig de gegevens met behulp van bibliotheken zoals Pandas, Matplotlib enz.

Laten we nu eens kijken naar enkele Python-bibliotheken die u bij elke fase van dit proces kunnen helpen.

Verzoeken verzenden met HTTP-clients

Om een ​​webpagina te scrapen, moeten we eerst de HTML-inhoud downloaden met behulp van een HTTP-verzoek. Laten we enkele HTTP-clientbibliotheken verkennen.

Aanvragen

Requests is de meest populaire Python-bibliotheek die wordt gebruikt voor het verzenden van HTTP-verzoeken. Volgens GitHub heeft het meer dan 65,000 sterren en is het goed onderhouden.

Zo gebruikt u Requests om een ​​GET-verzoek te verzenden:

import requests

response = requests.get(‘https://www.example.com‘)
print(response.status_code)
print(response.text)

Enkele belangrijke kenmerken van verzoeken:

  • Ondersteunt methoden zoals GET, POST, PUT, DELETE
  • Automatische codering/decodering van aanvraag-/antwoordgegevens
  • Ingebouwde verbindingspooling en sessieondersteuning
  • Afhandeling van cookies, time-outs, nieuwe pogingen, omleidingen
  • Werkt naadloos met HTTP-authenticatie en proxy's

Over het algemeen maakt Requests het heel gemakkelijk om verzoeken te verzenden en aan de slag te gaan met webscraping!

HTTPX

HTTPX is een HTTP-client van de volgende generatie voor Python. Het maakt gebruik van HTTP/1.1 en HTTP/2 en biedt zowel asynchrone als synchronisatie-API's.

Zo kunt u HTTPX gebruiken om een ​​GET-verzoek te verzenden:

import httpx

with httpx.Client() as client:
  response = client.get(‘https://www.example.com‘)
  print(response.text) 

Waarom HTTPX overwegen?

  • Ondersteunt moderne HTTP-standaarden zoals HTTP/2
  • Biedt synchronisatie- en asynchrone verzoekinterfaces
  • Eenvoudige time-out, opnieuw proberen en keepalive-configuratie
  • Maakt het streamen van antwoordinhoud mogelijk
  • Volledig getypt en goed gedocumenteerd

HTTPX is dus geweldig als je meer controle en moderne functies nodig hebt vergeleken met Requests.

HTML parseren en gegevens extraheren

Nadat u de HTML heeft gedownload, moet u deze parseren en de gewenste gegevens extraheren. Laten we eens kijken naar enkele nuttige Python-bibliotheken voor parseren.

Mooie soep

Beautiful Soup is de toonaangevende Python-bibliotheek die wordt gebruikt voor het parseren van HTML- en XML-documenten. Hiermee kunt u eenvoudig de boomstructuren van pagina's analyseren.

Zo kunt u BeautifulSoup gebruiken om de paginatitel te extraheren:

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, ‘html.parser‘)
page_title = soup.select_one(‘title‘).text

Enkele geweldige kenmerken van BeautifulSoup:

  • Ondersteunt het parseren van kapotte HTML
  • Hiermee kunt u bomen zoeken, navigeren en wijzigen
  • CSS-selector en Project Query-ondersteuning voor parseren
  • Ingebouwde methoden voor algemene taken
  • Kan coderingsconversies verwerken
  • Kan goed worden geïntegreerd met populaire scraplibs zoals Scrapy

Over het algemeen maakt BeautifulSoup het parseren van HTML een fluitje van een cent!

lxml

Volgens webontwikkelaars is lxml een extreem snelle en efficiënte parseringsbibliotheek voor HTML en XML in Python.

Zo kunt u lxml gebruiken om links van een pagina te extraheren:

from lxml import html

root = html.fromstring(response.text)
links = root.cssselect(‘a‘)

Belangrijkste voordelen van het gebruik van lxml:

  • Zeer snel dankzij C-bibliotheken waarop het voortbouwt
  • Ondersteunt XPath, CSS-selectors en XSLT
  • Ideaal voor het werken met grote XML/HTML-documenten
  • Creëert lichtgewicht bomen om documenten te ontleden
  • Kan goed worden geïntegreerd met Scrapy, BeautifulSoup etc.

Overweeg dus lxml wanneer snelheid en prestaties van cruciaal belang zijn.

pyquery

Voor een lichtgewicht HTML-parser, bekijk pyquery. Het maakt een jQuery-achtige syntaxis mogelijk om elementen op te vragen.

Zo kunt u links extraheren met pyquery:

from pyquery import PyQuery as pq

doc = pq(response.text)
links = doc(‘a‘) 

Enkele handige functies van pyquery:

  • jQuery-achtige syntaxis voor elementselectie
  • Ondersteunt CSS-selectors voor parseren
  • Methoden voor DOM-traversal en manipulatie
  • Kleine en eenvoudige API

pyquery is geweldig voor de dagelijkse basisparseer- en extractietaken.

Lezen en schrijven van geschraapte gegevens

Nadat u gegevens heeft verzameld, moet u deze ergens opslaan. Laten we een aantal nuttige Python-bibliotheken bekijken voor het lezen en schrijven van gegevens.

JSON

JSON is een veelgebruikt formaat dat wordt gebruikt door web-API's. In Python kunnen we de json-module gebruiken om JSON-antwoorden te parseren en gegevens te coderen als JSON-tekenreeksen.

Bijvoorbeeld:

import json

data = {‘name‘: ‘John‘, ‘age‘: 28}
json_data = json.dumps(data)
# ‘{"name": "John", "age": 28}‘

json_data = ‘{"name": "Mary", "age": 32}‘ 
parsed_data = json.loads(json_data)
# {‘name‘: ‘Mary‘, ‘age‘: 32}

Zoals je kunt zien, is het heel eenvoudig!

CSV

Voor gegevens in tabelvorm is CSV (door komma's gescheiden waarden) een snel en handig formaat. We kunnen de csv-module van Python gebruiken om CSV-bestanden te lezen en te schrijven.

Hier is een voorbeeld:

import csv

with open(‘data.csv‘, ‘w‘) as file:
  writer = csv.writer(file)
  writer.writerow([‘Name‘, ‘Age‘])  
  writer.writerow([‘John‘, 28]) 
  writer.writerow([‘Mary‘, 32])

with open(‘data.csv‘, ‘r‘) as file:
  reader = csv.reader(file)
  for row in reader:
    print(row) 

CSV's zijn dus geweldig voor basisschraaptaken met gegevenstabellen.

Pandas

Pandas is een zeer populaire Python-gegevensanalysebibliotheek. Het kan ook gegevens lezen en schrijven in formaten zoals JSON, CSV, Excel en meer.

Bijvoorbeeld:

import pandas as pd

df = pd.read_json(‘data.json‘)
df.to_csv(‘data.csv‘) 
df.to_excel(‘data.xlsx‘)

Met Pandas kunt u uw verzamelde gegevens eenvoudig opschonen, analyseren en uitvoeren voor verder gebruik.

SQLite

Voor serverloze gegevensopslag is SQLite een geweldige relationele databaseoptie. We kunnen de sqlite3-module gebruiken om toegang te krijgen tot SQLite-databases vanuit Python.

Hier is een voorbeeld van het maken van een databasetabel en het invoegen van enkele geschraapte gegevens:

import sqlite3 

conn = sqlite3.connect(‘database.db‘)

c = conn.cursor()
c.execute(‘‘‘
  CREATE TABLE data (name text, age integer)  
‘‘‘)

c.execute("INSERT INTO data VALUES (‘John‘, 28)")

conn.commit()
conn.close()

SQLite werkt prima voor kleine tot middelgrote webscraping-projecten.

JavaScript-zware sites schrapen

Moderne websites zijn sterk afhankelijk van JavaScript om inhoud dynamisch weer te geven. Om deze sites te schrapen hebben we browsers zoals Selenium en Playwright nodig.

Selenium

Selenium bestuurt browsers zoals Chrome en Firefox rechtstreeks met behulp van de WebDriver API. Hierdoor kan het JavaScript-code uitvoeren en volledige pagina's weergeven.

U kunt als volgt de paginatitel extraheren met Selenium:

from selenium import webdriver

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

title = driver.find_element_by_css_selector(‘h1‘).text  
driver.quit()

Enkele opvallende kenmerken van Selenium:

  • Ondersteunt browsers zoals Chrome, Firefox, Safari
  • Kan formulierinzendingen en klikken automatiseren
  • Voert JavaScript uit in de browser
  • Werkt zonder hoofd zonder dat een GUI nodig is

Over het algemeen is Selenium ideaal om inhoud te schrapen die door JavaScript is geladen.

Toneelschrijver

Playwright is een nieuwe browserautomatiseringsbibliotheek van Microsoft. Het emuleert gebruikersacties en verzamelt gegevens van dynamische webpagina's.

Zo kunt u de paginatitel extraheren met Playwright:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
  browser = p.chromium.launch()
  page = browser.new_page()
  page.goto(‘https://www.example.com‘)

  print(page.title())
  browser.close()

Waarom toneelschrijver?

  • Headless browserautomatisering
  • Emulatie van mobiele apparaten
  • Automatische wachtfunctie
  • Onderschepping van netwerkverkeer
  • Snelle prestaties
  • Actieve ontwikkelingsgemeenschap

Playwright is dus een zeer capabel Selenium-alternatief voor dynamisch schrapen.

Volledige sites doorzoeken met Scrapy

Hoewel de tools die we hebben bekeken geweldig zijn voor eenmalige scrapers, is Scrapy een speciaal webcrawlframework voor grote projecten.

Met Scrapy kunt u spiders schrijven die recursief door domeinen kruipen en paginering, duplicaten, enz. Automatisch beheren.

Hier is een eenvoudige Scrapy-spin:

import scrapy

class ExampleSpider(scrapy.Spider):

  name = ‘example‘

  def start_requests(self):
    url = ‘https://www.example.com‘
    yield scrapy.Request(url, callback=self.parse)

  def parse(self, response):
    for h2 in response.css(‘h2‘):
      yield {‘title‘: h2.css(‘::text‘).get()}

    for link in response.css(‘a::attr(href)‘):
      yield response.follow(link, callback=self.parse)

Opvallende kenmerken van Scrapy:

  • Definieer crawlregels om pagina's recursief te parseren
  • Extraheer gegevens met behulp van CSS/XPath en aangepaste middleware
  • Volg sitemaps en pagineringspatronen automatisch
  • Schraap gelijktijdig op schaal
  • Exporteer geschrapte gegevens naar elk gewenst formaat

Scrapy is dus perfect voor grote gestructureerde webscraping-projecten.

Python Scrapers implementeren en plannen

In plaats van scrapers alleen lokaal uit te voeren, kunnen we ze in de cloud implementeren en planning toevoegen voor betrouwbaarheid.

Apify

Met Apify kunt u Python-scrapers inzetten als Docker-containers, genaamd Actors. U kunt deze Actors uitvoeren en beheren in de Apify-cloud.

Hier is een voorbeeld waarbij de Apify API wordt gebruikt:

from apify_client import ApifyClient

client = ApifyClient(‘MY_API_TOKEN‘)

run = client.actor(‘john/web-scraper‘).call()

print(client.dataset(‘default‘).items) 

Enkele handige Apify-functies:

  • Implementeer scrapers als Docker-containers
  • Plan terugkerende schraaptaken
  • Schaal met behulp van proxy's en headless browsers
  • Beheer datasets en crawlgeschiedenis
  • Monitor het gebruik van bronnen en fouten
  • Visueel dashboard om schrapers te besturen

Apify is dus ideaal om Python-scrapers soepel in de cloud te laten draaien.

Schraperige wolk

Scrapy Cloud maakt het eenvoudig om Scrapy-spiders in de cloud te gebruiken zonder servers en containers te configureren.

U zet spiders in, waarna Scrapy Cloud de schaal, opslag, planning enz. verzorgt.

from scrapy import signals  
from scrapy.exporters import CsvItemExporter

class CSVPipeline(object):

  def spider_opened(self, spider):
    self.file = open(‘data.csv‘, ‘wb‘)
    self.exporter = CsvItemExporter(self.file)
    self.exporter.start_exporting()

  def spider_closed(self, spider):  
    self.exporter.finish_exporting()
    self.file.close()  

  def process_item(self, item, spider):
    self.exporter.export_item(item)
    return item

Waarom ScrapyCloud?

  • Voer Scrapy-spiders snel uit zonder servers
  • Automatisch schalen van spider-runs om verkeerspieken op te vangen
  • Plan spiders en integreer opslag
  • Realtime logbewaking en waarschuwingen
  • Eenvoudig visueel dashboard om alle spiders te besturen

Dus als je van Scrapy houdt, maakt Scrapy Cloud de implementatie eenvoudig.

Tips voor effectief webscrapen

Hier zijn enkele belangrijke tips om ervoor te zorgen dat uw schrapers goed werken:

  • Inspecteer pagina's altijd met Developer Tools voordat u scrapers schrijft. Hiermee kunt u identiteits-ID's, klassen, enz. gegevens extraheren.

  • Gebruik de incognito- of privébrowsermodus bij het testen van scrapers om cacheproblemen te voorkomen.

  • Controleer robots.txt van sites om secties te identificeren die u niet legaal kunt schrapen.

  • Schrijf in eerste instantie scrapers om kleine stukjes gegevens te extraheren. Breid vervolgens uit naar schrapen op volledige pagina.

  • Gebruik proxy's, willekeurige vertragingen en headers om mensen na te bootsen en blokkades te vermijden.

  • Beperk de aanvraagsnelheid om te voorkomen dat servers overbelast raken en op de zwarte lijst komen te staan.

  • Voor e-commercesites moet u cookies/sessies aanhouden om winkelwagengegevens bij alle aanvragen bij te houden.

  • Volg ethische praktijken zoals het niet overbelasten van sites, het extraheren van alleen openbare gegevens en het lokaal cachen van inhoud indien mogelijk.

Conclusie

Zoals je hebt gezien, is Python ongelooflijk veelzijdig voor webscrapen – van eenvoudige persoonlijke projecten tot complexe commerciële systemen.

De sleutel is het kiezen van de juiste bibliotheken en tools voor uw behoeften. Door bibliotheken zoals Requests, BeautifulSoup, Selenium en Scrapy te beheersen, kunt u op betrouwbare wijze gegevens uit vrijwel elke website extraheren.

Voor meer informatie bladert u door de documentatie voor elke bibliotheek en bouwt u enkele oefenprojecten. Neem gerust contact op als u nog vragen heeft!

Veel Python-webscraping!

Doe mee aan het gesprek

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