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:
Stuur verzoeken – Gebruik een Python HTTP-client om verzoeken naar de doelwebpagina te verzenden en de HTML op te halen.
HTML parseren – Gebruik een parser zoals BeautifulSoup om de HTML te analyseren en relevante gegevens te extraheren.
Gegevens bewaren – Schrijf de geëxtraheerde gegevens naar een bestandsformaat zoals JSON of sla deze op in een database.
Schone gegevens – Transformeer, normaliseer en reinig de geschraapte gegevens indien nodig voor analyse.
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!