Anleitung zur interaktiven Shell von Scrapling¶
Eine Web-Scraping-REPL für Entwickler und Data Scientists
Die interaktive Shell von Scrapling ist eine Umgebung auf Basis von IPython, die für Web Scraping entwickelt wurde. Sie bietet direkten Zugriff auf alle Scrapling-Funktionen, praktische Kurzbefehle, automatische Seitenverwaltung und Werkzeuge wie die Umwandlung von curl-Befehlen.
Voraussetzungen
- Lesen Sie die Grundlagen der Fetcher, um das Response-Objekt zu verstehen und einen Fetcher auszuwählen.
- Lesen Sie die Seite zur Elementauswahl, um Elemente in einem Selector/Response zu finden und zu extrahieren.
- Lesen Sie die Seite über die Hauptklassen, um zu erfahren, welche Eigenschaften und Methoden Response von Selector erbt.
- Lesen Sie mindestens eine Seite im Fetcher-Abschnitt zu den Anfragen, die Sie hier verwenden werden: HTTP-Anfragen oder Seiten mit einem Browser abrufen.
Warum die interaktive Shell verwenden?¶
In der interaktiven Shell können Sie sofort ausprobieren und prüfen. Sie müssen nicht für jeden Versuch ein Skript ändern und neu ausführen. Das ist hilfreich für:
- Schnelle Prototypen: Testen Sie Ihre Scraping-Ansätze direkt.
- Daten untersuchen: Durchsuchen Sie Websites interaktiv und extrahieren Sie Daten.
- Scrapling lernen: Probieren Sie Funktionen in Echtzeit aus.
- Scraper debuggen: Gehen Sie Anfragen schrittweise durch und prüfen Sie die Ergebnisse.
- Befehle umwandeln: Wandeln Sie einen curl-Befehl aus den Browser-DevTools mit einer Zeile in eine Fetcher-Anfrage um.
Erste Schritte¶
Shell starten¶
# Start the interactive shell
scrapling shell
# Execute code and exit (useful for scripting)
scrapling shell -c "get('https://quotes.toscrape.com'); print(len(page.css('.quote')))"
# Set logging level
scrapling shell --loglevel info
Nach dem Start sehen Sie das Scrapling-Banner und können sofort mit dem Scraping beginnen, wie im Video oben:
# No imports needed - everything is ready!
get('https://news.ycombinator.com')
# Explore the page structure
page.css('a')[:5] # Look at first 5 links
# Refine your selectors
stories = page.css('.titleline>a')
len(stories) # 30
# Extract specific data
for story in stories[:3]:
title = story.text
url = story['href']
print(f"{title}: {url}")
# Try different approaches
titles = page.css('.titleline>a::text') # Direct text extraction
urls = page.css('.titleline>a::attr(href)') # Direct attribute extraction
Eingebaute Kurzbefehle¶
Die Shell bietet Kurzbefehle, mit denen Sie wiederholten Code vermeiden:
get(url, **kwargs)- HTTP-GET-Anfrage (stattFetcher.get).post(url, **kwargs)- HTTP-POST-Anfrage (stattFetcher.post).put(url, **kwargs)- HTTP-PUT-Anfrage (stattFetcher.put).delete(url, **kwargs)- HTTP-DELETE-Anfrage (stattFetcher.delete).fetch(url, **kwargs)- Abruf mit dem Stealthy-Browser (stattStealthyFetcher.fetch).
Die häufigsten Klassen sind ohne Import verfügbar, darunter Fetcher, AsyncFetcher, StealthyFetcher und Selector.
Automatische Seitenverwaltung¶
Die Shell behält Ihre Anfragen und Seiten im Blick:
-
Zugriff auf die aktuelle Seite
pageundresponsewerden automatisch mit der zuletzt abgerufenen Seite aktualisiert: -
Seitenverlauf
pagesenthält die letzten fünf Seiten in einemSelectors-Objekt:get('https://site1.com') get('https://site2.com') get('https://site3.com') # Access last 5 pages len(pages) # `Selectors` object with `page` history -> 3 pages[0].url # First page in history -> 'https://site1.com' pages[-1].url # Most recent page -> 'https://site3.com' # Work with historical pages for i, old_page in enumerate(pages): print(f"Page {i}: {old_page.url} - {old_page.status}")
Weitere nützliche Befehle¶
Seite anzeigen¶
Öffnen Sie abgerufene Seiten in Ihrem Browser:
curl-Befehle einbinden¶
Die Shell bietet die Funktionen uncurl und curl2fetcher. Damit wandeln Sie curl-Befehle aus den Browser-DevTools in Fetcher-Anfragen um.
Kopieren Sie zunächst eine Anfrage als curl-Befehl:

-
curl-Befehl in ein Anfrageobjekt umwandeln
curl_cmd = '''curl 'https://scrapling.requestcatcher.com/post' \ -X POST \ -H 'Content-Type: application/json' \ -d '{"name": "test", "value": 123}' ''' request = uncurl(curl_cmd) request.method # -> 'post' request.url # -> 'https://scrapling.requestcatcher.com/post' request.headers # -> {'Content-Type': 'application/json'} -
curl-Befehl direkt ausführen
IPython-Funktionen¶
Die Shell erbt alle Funktionen von IPython:
# Magic commands
%time page = get('https://example.com') # Time execution
%history # Show command history
%save filename.py 1-10 # Save commands 1-10 to file
# Tab completion works everywhere
page.c<TAB> # Shows: css, cookies, headers, etc.
Fetcher.<TAB> # Shows all Fetcher methods
# Object inspection
get? # Show get documentation
Beispiele¶
Hier sind einige mit KI erstellte Beispiele:
Daten von Online-Shops sammeln¶
# Start with product listing page
catalog = get('https://shop.example.com/products')
# Find product links
product_links = catalog.css('.product-link::attr(href)').getall()
print(f"Found {len(product_links)} products")
# Sample a few products first
for link in product_links[:3]:
product = get(catalog.urljoin(link))
name = product.css('.product-name::text').get('')
price = product.css('.price::text').get('')
print(f"{name}: {price}")
# Scale up with sessions for efficiency
from scrapling.fetchers import FetcherSession
with FetcherSession() as session:
products = []
for link in product_links:
product = session.get(catalog.urljoin(link))
products.append({
'name': product.css('.product-name::text').get(''),
'price': product.css('.price::text').get(''),
'url': link
})
APIs einbinden und testen¶
>>> # Test API endpoints interactively
>>> response = get('https://jsonplaceholder.typicode.com/posts/1')
>>> response.json()
{'userId': 1, 'id': 1, 'title': 'sunt aut...', 'body': 'quia et...'}
>>> # Test POST requests
>>> new_post = post('https://jsonplaceholder.typicode.com/posts',
... json={'title': 'Test Post', 'body': 'Test content', 'userId': 1})
>>> new_post.json()['id']
101
>>> # Test with different data
>>> updated = put('https://jsonplaceholder.typicode.com/posts/1',
... json={'title': 'Updated Title'})
Hilfe erhalten¶
Wenn Sie neben der Hilfe im Terminal weitere Unterstützung brauchen, finden Sie sie hier:
Das war’s! Viel Erfolg beim Scraping. Mit der Shell wird Web Scraping so einfach wie ein Gespräch.