Ontwikkel een Python-script voor web scraping en gegevensverwerking
description
Met deze prompt kun je efficiënt webdata verzamelen en verwerken met Python, leer je het gebruik van krachtige scraping libraries en krijg je inzicht in het structureren van ongestructureerde data. Dit bespaart tijd en verhoogt de nauwkeurigheid van data verzameling voor je projecten.
prompt
Help me een Python-script te schrijven dat web scraping uitvoert op de website: <voer de URL van de website in> om specifieke gegevens te extraheren zoals <besch ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Python-script dat web scraping uitvoert op de website https://www.example.com/products. In dit voorbeeld gebruik ik de libraries `requests` en `BeautifulSoup` om de gegevens te verzamelen, te verwerken en te structureren.
Voorbeeldscript:
```python
import requests
from bs4 import BeautifulSoup
# URL van de pagina die we willen scrapen
url = 'https://www.example.com/products'
# Stuur een GET-verzoek naar de webpagina
response = requests.get(url)
# Controleer of het verzoek geslaagd is
if response.status_code == 200:
# Parse de HTML-inhoud met BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
# Zoek alle product-elementen (pas de selector aan op basis van de daadwerkelijke HTML-structuur)
producten = soup.find_all('div', class_='product') # voorbeeld: elk product in een div met class 'product'
# Lijst om de verzamelde data op te slaan
gegevens = []
for product in producten:
# Extractie van de productnaam
naam_tag = product.find('h2', class_='productnaam') # voorbeeld: h2 met class 'productnaam'
naam = naam_tag.text.strip() if naam_tag else 'N/A'
# Extractie van de prijs
prijs_tag = product.find('span', class_='prijs') # voorbeeld: span met class 'prijs'
prijs = prijs_tag.text.strip() if prijs_tag else 'N/A'
# Extractie van de voorraadstatus
voorraad_tag = product.find('p', class_='voorraad') # voorbeeld: p met class 'voorraad'
voorraad = voorraad_tag.text.strip() if voorraad_tag else 'N/A'
# Voeg de gegevens toe aan de lijst
gegevens.append({
'naam': naam,
'prijs': prijs,
'voorraad': voorraad
})
# Print of verwerk de gestructureerde data
for item in gegevens:
print(item)
else:
print(f'Fout bij het ophalen van de pagina: Status code {response.status_code}')
```
### Uitleg over gebruikte libraries:
- **requests**: Hiermee kun je eenvoudig HTTP-verzoeken doen om webpagina's op te halen.
- **BeautifulSoup**: Hiermee parse je de HTML-inhoud en kun je gemakkelijk elementen zoeken, extraheren en structureren.
### Tips:
- Pas de selectors (`find`, `find_all`) aan op basis van de daadwerkelijke HTML-structuur van de website.
- Voor complexere websites of dynamische inhoud kan Scrapy of Selenium nodig zijn.
Let op: Zorg dat je de gebruiksvoorwaarden van de website respecteert en controleer of web scraping toegestaan is.
provider: deepseek
model: deepseek-chat
Ik help je graag een Python-script te schrijven voor web scraping. Hier is een complete uitleg en voorbeeldcode:
## Vereiste libraries installeren
```bash
pip install requests beautifulsoup4 pandas
```
## Basis script met BeautifulSoup
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
def scrape_example_products():
# URL van de website
url = "https://www.example.com/products"
# HTTP-request versturen
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status() # Controleer op HTTP-fouten
# BeautifulSoup object aanmaken
soup = BeautifulSoup(response.content, 'html.parser')
# Lijst voor productgegevens
producten = []
# Zoek productelementen (pas selectors aan op basis van de werkelijke website)
# Dit zijn voorbeelden - je moet de juiste CSS-selectors vinden
product_elementen = soup.find_all('div', class_='product-item')
for product in product_elementen:
try:
# Productnaam extraheren
naam = product.find('h2', class_='product-name').text.strip()
# Prijs extraheren
prijs = product.find('span', class_='price').text.strip()
# Voorraadstatus
voorraad = product.find('span', class_='stock-status').text.strip()
# Toevoegen aan lijst
producten.append({
'naam': naam,
'prijs': prijs,
'voorraad': voorraad
})
except AttributeError as e:
print(f"Fout bij verwerken product: {e}")
continue
# Data structureren in DataFrame
df = pd.DataFrame(producten)
# Opslaan naar CSV
df.to_csv('producten.csv', index=False, encoding='utf-8')
print(f"Successvol {len(producten)} producten geschraapt!")
return df
except requests.RequestException as e:
print(f"Fout bij HTTP-request: {e}")
return None
# Script uitvoeren
if __name__ == "__main__":
scrape_example_products()
```
## Alternatief met Scrapy (geavanceerder)
**Stap 1: Scrapy project aanmaken**
```bash
pip install scrapy
scrapy startproject product_scraper
cd product_scraper
```
**Stap 2: Spider maken (spiders/product_spider.py)**
```python
import scrapy
import json
class ProductSpider(scrapy.Spider):
name = 'example_products'
start_urls = ['https://www.example.com/products']
custom_settings = {
'FEEDS': {
'producten.json': {'format': 'json', 'encoding': 'utf8'}
}
}
def parse(self, response):
# Producten vinden en parsen
products = response.css('div.product-item')
for product in products:
yield {
'naam': product.css('h2.product-name::text').get().strip(),
'prijs': product.css('span.price::text').get().strip(),
'voorraad': product.css('span.stock-status::text').get().strip()
}
# Volgende pagina (indien paginatie)
next_page = response.css('a.next-page::attr(href)').get()
if next_page:
yield response.follow(next_page, self.parse)
```
## Belangrijke overwegingen:
1. **Selectors aanpassen**: Je moet de CSS-selectors analyseren met browser developer tools
2. **Robots.txt respecteren**: Controleer `/robots.txt` van de website
3. **Rate limiting**: Voeg vertragingen toe om servers niet te overbelasten
4. **Headers**: Gebruik realistische User-Agent headers
5. **Foutafhandeling**: Voeg try-except blokken toe voor robuustheid
## Tips voor selector-analyse:
- Gebruik browser developer tools (F12)
- Rechtsklik → Inspect element op de gewenste data
- Kopieer de CSS-selector of XPath
**Let op**: Vervang de voorbeeld-selectors (`'div.product-item'`, etc.) met de werkelijke selectors van de specifieke website die je wilt scrapen. Elke website heeft een unieke HTML-structuur.