Sie sind nun bereit, PycURL und BeautifulSoup zu verwenden. Um diese Pakete nutzen zu können, müssen wir sie zunächst in unsere Datei `scraper.py` importieren. Fügen Sie einfach diesen Codeausschnitt am Anfang der Datei ein:
import pycurl
import certify
from io import BytesIO
from bs4 import BeautifulSoup
# All our logic will go underneath this line
Nachdem Sie die Pakete importiert haben, kümmern wir uns nun um die Logik unseres Web-Scrapers. Aus dem bisher Besprochenen wissen wir, dass wir zwei Aspekte abdecken müssen: die Datenextraktion und die Datenverarbeitung. Der erste Teil wird von PycURL abgedeckt, der zweite von BeautifulSoup. Für eine bessere Struktur schlage ich vor, dass wir jeden Teil separat behandeln.
3.1. Daten mit cURL und Python scrapen
Wenn ich von Scraping spreche, beziehe ich mich auf den Extraktionsteil des Web-Scrapers. Mit diesem Hintergrund und dem Wissen, wie man curl in Python über die PycURL-Schnittstelle nutzt, schreiben wir nun den Code:
# Setting global variables
TARGET_URL = 'https://httpbin.org/forms/post'
# Using cURL and Python to gather data from a server via PycURL
buffer = BytesIO()
curl = pycurl.Curl()
curl.setopt(curl.URL, TARGET_URL)
curl.setopt(curl.WRITEDATA, buffer)
curl.setopt(curl.CAINFO, certifi.where())
curl.perform()
curl.close()
# Using BytesIO to retrieve the scraped data
body = buffer.getvalue()
# Saving the output and printing it in terminal
data = body.decode('iso-8859-1')
print(data)
Im obigen Code beginnen wir mit der Deklaration der globalen Variablen `TARGET_URL`, die die URL der Website enthält, von der wir Daten extrahieren möchten. Als Nächstes erstellen wir mit `BufferIO` einen Puffer, initialisieren PycURL und legen zwei Optionen fest: eine für die Datenübertragung und eine für den Dateinamen, der die Zertifikate enthält. Zu guter Letzt führen wir die cURL-Aktion aus und schließen anschließend die Sitzung.
Das war’s schon – Sie haben erfolgreich mit Python eine cURL-Anfrage gestellt und die HTML-Datei in Ihrer Konsole ausgegeben. Jetzt müssen wir uns nur noch um den zweiten Abschnitt kümmern, nämlich die Datenverarbeitung.
3.2. HTML-Parsing mit Python und BeautifulSoup
Die Rohdaten zu haben, ist beim Web-Scraping überflüssig, es sei denn, wir führen irgendeine Aktion damit durch. Denn der grundlegendste Zweck eines jeden Web-Scrapers ist es, Daten aus HTML zu extrahieren. Nehmen wir für unser Beispiel an, dass wir den gesamten Text innerhalb der `<p>`-Elemente aus der Variablen `data` (die derzeit den gesamten gescrapten HTML-Code enthält) extrahieren wollen. So machen wir das mit BeautifulSoup:
# Parsing data using BeautifoulSoup
soup = BeautifulSoup(data, 'html.parser')
# Finding elements using BeautifoulSoup
paragraphs = soup.find_all("p")
for p in paragraphs:
print(p.text)
Wie Sie sehen, sind mit BeautifulSoup nur 4 Zeilen Code nötig, um das gewünschte Ergebnis zu extrahieren. Wenn Sie das vollständige Skript ausführen, sollte nun der Text in jedem Absatz ausgegeben werden, der in der HTML-Datei enthalten ist, die wir von unserer Zielwebsite gesammelt haben.
Angenommen, Sie haben die Anweisungen befolgt und Ihre `scraper.py` enthält den gesamten Code, den wir in diesem Abschnitt geschrieben haben, kehren wir nun zum Terminal zurück und führen das Skript aus:
~/desktop/py_scraper » python3 scraper.py
Customer name:
Telephone:
E-mail address:
Small
Medium
Large
Bacon
Extra Cheese
Onion
Mushroom
Preferred delivery time:
Delivery instructions:
Submit order