Heim BlogWeb-Scraping So scrapen Sie Webdaten mithilfe von Requests und BeautifulSoup

So scrapen Sie Webdaten mithilfe von Requests und BeautifulSoup

von Kadek

TL;DR: Verwenden von Requests und BeautifulSoup für Web Scraping

Installieren Sie zunächst beide Abhängigkeiten von Ihrem Terminal mit dem folgenden Befehl:

pip install requests beautifulsoup4

Sobald die Installation abgeschlossen ist, importieren Sie requests Und BeautifulSoup zu Ihrer Datei:

import requests
from bs4 import BeautifulSoup
 

Sende ein get() Anfrage mit Requests, um den HTML-Inhalt Ihrer Zielseite herunterzuladen und in einer Variable zu speichern – für dieses Beispiel senden wir eine get() Anfrage an BooksToScrape und Speicherung des HTML in einem response Variable:


response = requests.get(“https://books.toscrape.com/catalogue/page-1.html”)

Um bestimmte Datenpunkte aus dem HTML zu extrahieren, müssen wir die Antwort mit BS4 analysieren:

soup = BeautifulSoup(response.content, "lxml")

Schließlich können wir Elemente mithilfe von CSS-Selektoren oder HTML-Tags wie folgt auswählen:


title = soup.find(“h1”)
print(title)

Das Internet bietet eine unglaubliche Datenmenge und ist eine wertvolle Ressource für jedes Forschungsgebiet oder persönliches Interesse. Allerdings sind nicht alle diese Informationen auf herkömmliche Weise leicht zugänglich.

Einige Websites stellen keine API zum Abrufen ihrer Inhalte bereit; andere verwenden möglicherweise komplexe Technologien, die das Extrahieren von Daten mit herkömmlichen Methoden erschweren.

Um Ihnen den Einstieg zu erleichtern, zeigen wir Ihnen in diesem Tutorial, wie Sie mit den Python-Paketen „Requests“ und „BeautifulSoup“ Daten von beliebigen Websites extrahieren. Dabei werden die Grundlagen des Web Scraping behandelt, darunter das Senden von HTTP-Anfragen, das Parsen von HTML und das Extrahieren spezifischer Informationen.

Um die Dinge praktischer zu gestalten, lernen wir, wie man einen Scraper erstellt, um eine Liste mit technischen Artikeln von Techcrunch zu sammeln. Am Ende haben Sie gelernt, wie Sie:

  • Webseiten herunterladen
  • HTML-Inhalt analysieren
  • Extrahieren Sie Daten mit den Methoden und CSS-Selektoren von BeautifulSoup

Voraussetzungen

Um diesem Tutorial zu folgen, müssen Sie installieren Python 3.7 oder höher auf Ihrem Computer. Sie können es von der offiziellen Website herunterladen, wenn Sie es nicht installiert haben.

Sie benötigen außerdem die folgenden Voraussetzungen:

Installieren einer virtuellen Umgebung

Es wird empfohlen, vor der Installation der erforderlichen Bibliotheken eine virtuelle Umgebung zu erstellen, um die Abhängigkeiten des Projekts zu isolieren.

Erstellen einer virtuellen Umgebung unter Windows

Öffnen Sie eine Eingabeaufforderung mit Administratorrechten und führen Sie den folgenden Befehl aus, um eine neue virtuelle Umgebung mit dem Namen zu erstellen venv:

Aktivieren Sie die virtuelle Umgebung mit dem folgenden Befehl:

Erstellen einer virtuellen Umgebung unter macOS/Linux

Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus, um eine neue virtuelle Umgebung mit dem Namen zu erstellen venv:

	sudo python3 -m venv venv

Aktivieren Sie die virtuelle Umgebung:

Installieren von Requests, BeautifulSoup und Lxml

Nachdem Sie eine virtuelle Umgebung erstellt und aktiviert haben, können Sie die erforderlichen Bibliotheken installieren, indem Sie den folgenden Befehl auf Ihrem Terminal ausführen:

	pip install requests beautifulsoup4 lxml

  • Requests ist eine HTTP-Bibliothek für Python, die das Senden von HTTP-Anfragen und die Verarbeitung von Antworten vereinfacht.
  • BeautifulSoup ist eine Bibliothek zum Parsen von HTML- und XML-Dokumenten.
  • Lxml ist ein leistungsstarker und schneller XML- und HTML-Parser, der in C geschrieben ist. Lxml wird von BeautifulSoup verwendet, um XPath-Unterstützung bereitzustellen.

Laden Sie die Webseite mit Anfragen herunter

Der erste Schritt beim Scraping von Webdaten ist das Herunterladen der Webseite, die Sie scrapen möchten. Sie können dies mithilfe des get() Methode der Requests-Bibliothek.

	import requests

	url = 'https://techcrunch.com/category/startups/'
	response = requests.get(url)
	print(response.text)

Oben verwenden wir Requests, um die HTML-Antwort von TechCrunch zu erhalten. get() Methode gibt einen response Objekt, das das HTML der Webseite enthält. Wir verwenden BeautifulSoup, um die benötigten Daten aus dieser HTML-Antwort zu extrahieren.

Analysieren Sie die HTML-Antwort mit BeautifulSoup

Nachdem Sie die Webseite heruntergeladen haben, müssen Sie das HTML analysieren. Sie können dies mit der Bibliothek BeautifulSoup tun:

	from bs4 import BeautifulSoup

	soup = BeautifulSoup(response.text, 'lxml)

Der BeautifulSoup-Konstruktor verwendet zwei Argumente:

  • Das zu analysierende HTML
  • Der zu verwendende Parser

In diesem Fall verwenden wir die lxml Parser, dann übergeben wir die HTML-Antwort an BeautifulSoup und erstellen eine Instanz namens soup.

Navigieren Sie mit BeautifulSoup durch die Antwort

Wenn eine HTML-Seite innerhalb einer BeautifulSoup-Instanz initialisiert wird, wandelt BS4 das HTML-Dokument in einen komplexen Baum aus Python-Objekten um und bietet dann mehrere Möglichkeiten, wie wir diesen DOM-Baum abfragen können:

  • Python-Objektattribute: Jedes BeautifulSoup-Objekt verfügt über eine Reihe von Attributen, die zum Zugriff auf seine untergeordneten, übergeordneten und gleichgeordneten Objekte verwendet werden können. Beispielsweise das Kinder Attribut gibt eine Liste der untergeordneten Objekte des Objekts zurück, und das Elternteil Attribut gibt das übergeordnete Objekt des Objekts zurück.
  • BeautifulSoup-Methoden ( z.B .find() Und .find_all() ): Diese können verwendet werden, um den DOM-Baum nach Elementen zu durchsuchen, die einem bestimmten Kriterium entsprechen. .find() Methode gibt das erste passende Element zurück, während die .find_all() Methode gibt eine Liste aller übereinstimmenden Elemente zurück.
  • CSS-Selektoren (z.B .select() Und .select_one()): Mit CSS-Selektoren können Sie Elemente basierend auf ihrer Klasse, ID und anderen Attributen auswählen.

Aber nach welchen Tags sollten Sie suchen?

Sie können dies herausfinden, indem Sie die Prüfoption in Ihrem Browser verwenden. Gehen Sie auf die Techcrunch-Website, suchen Sie das Element, das Sie scrapen möchten, klicken Sie mit der rechten Maustaste und wählen Sie „Prüfen„.

Das Element „inspect“ findenDas Element „inspect“ finden

Dadurch wird das HTML-Dokument bei dem von Ihnen ausgewählten Element geöffnet.

Öffnen des HTML-Elements auf der SeiteÖffnen des HTML-Elements auf der Seite

Jetzt müssen Sie eine Kombination aus HTML-Element-Tags und -Klassen finden, die die benötigten Elemente eindeutig identifizieren.

Wenn Sie beispielsweise die Titel der Artikel auf der TechCrunch-Homepage scrapen möchten, würden Sie das HTML untersuchen und feststellen, dass die Titel alle enthalten sind in h2 Tags mit der Klasse post-block__title.

Auswählen des H2-Tags mit der SelektorklasseAuswählen des H2-Tags mit der Selektorklasse

Sie können zum Auswählen der Titel also den folgenden CSS-Selektor verwenden:

	soup.select('h2.post-block__title')

Dies gibt eine Liste aller h2 Tags mit der Klasse post-block__title auf der Seite mit den Artikeltiteln.

Holen Sie sich ein Element per HTML-Tag

Syntax: element_name

Du kannst den … benutzen find() Und find_all() Methoden zum Suchen von Elementen anhand ihres HTML-Tags.

Der folgende Code findet beispielsweise alle header Tags auf der Seite:

	header_tags = soup.find_all('header')
	for header_tag in header_tags:
		print(header_tag.get_text(strip=True))

Die Ausgabe in der Konsole sollte ungefähr so ​​aussehen:

alle Header in der Konsolenausgabe alle Header in der Konsolenausgabe

Holen Sie sich ein Element nach CSS-Klasse

Syntax: .class_name

Klassenselektoren ordnen Elemente basierend auf dem Inhalt ihrer class Attribut.

	title = soup.select('.post-block__title__link')(0).text
	print(title)

Der Punkt (.) vor dem Klassennamen zeigt BS4 an, dass es sich um eine CSS-Klasse handelt.

Abrufen eines Elements nach ID

Syntax: #id_value

ID-Selektoren gleichen ein Element auf der Grundlage des Wertes des Elements ab. id Attribut. Damit das Element ausgewählt werden kann, muss sein id Attribut muss genau mit dem im Selektor angegebenen Wert übereinstimmen.

	element_by_id = soup.select('#element_id')  # returns the element at "element_id"
	print(element_by_id)

Das Hash-Symbol vor dem Namen der ID sagt BS4, dass wir nach einem id.

Abrufen eines Elements durch Attributselektoren

Syntax: (attribute=attribute_value) oder (attribute)

Attributselektoren gleichen Elemente basierend auf dem Vorhandensein oder Wert eines bestimmten Attributs ab. Der einzige Unterschied besteht darin, dass dieser Selektor eckige Klammern () anstelle eines Punkts (.) verwendet. class oder ein Raute-Symbol (#) als id.

	# Get the URL of the article
	url = soup.select('.post-block__title__link')(0)('href')
	print(url)

Ausgabe:

Abrufen eines Elements mit XPath

XPath verwendet eine pfadähnliche Syntax, um Elemente in einem XML- oder HTML-Dokument zu lokalisieren. Es funktioniert ganz ähnlich wie ein herkömmliches Dateisystem.

So finden Sie den XPath für ein bestimmtes Element auf einer Seite:

  • Klicken Sie mit der rechten Maustaste auf das Element auf der Seite und klicken Sie auf „Prüfen„, um die Registerkarte „Entwicklertools“ zu öffnen.
HTML-Elementor prüfen HTML-Elementor prüfen
  • Wählen Sie das Element auf der Registerkarte „Elemente“ aus.
Titelelement aus HTML auswählenTitelelement aus HTML auswählen
  • Klicke auf „Kopieren“ -> „XPath kopieren„.
Element im HTML-Selektor kopierenElement im HTML-Selektor kopieren

Notiz: Wenn XPath nicht das gewünschte Ergebnis liefert, kopieren Sie den vollständigen XPath statt nur den Pfad. Die restlichen Schritte sind dann gleich.

Wir können nun den folgenden Code ausführen, um den ersten Artikel auf der Seite zu extrahieren, indem wir XPath:

	from bs4 import BeautifulSoup
	import requests
	from lxml import etree
	
	url = 'https://techcrunch.com/category/startups/'
	headers = {
		"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
		"Accept-Language": "en-US, en;q=0.5",
	}
	
	response = requests.get(url, headers=headers)
	if response.status_code == 200:
		soup = BeautifulSoup(response.content, "lxml")
		dom = etree.HTML(str(soup))
		print(dom.xpath('//*(@id="tc-main-content")/div/div(2)/div/article(1)/header/h2/a')(0).text)

Hier ist die Ausgabe:

	New geospatial data startup streamlines satellite imagery visualization

Anfragen und BeautifulSoup Scraping-Beispiel

Lassen Sie uns all dies kombinieren, um TechCrunch nach einer Liste von Startup-Artikeln zu durchsuchen:

	import requests
	from bs4 import BeautifulSoup
	
	url = 'https://techcrunch.com/category/startups/'
	
	
	
	article_list = ()
	
	response = requests.get(url)
	if response.status_code == 200:
		soup = BeautifulSoup(response.content, "lxml")
	
		articles = soup.find_all('header')
	
		for article in articles:
			title = article.get_text(strip=True)
			url = article.find('a')('href')
			print(title)
			print(url)

Dieser Code druckt die Titel und URL jedes Startup-Artikels.

Speichern der Daten in einer CSV-Datei

Sobald Sie die gewünschten Daten aus der Webseite extrahiert haben, können Sie diese zur weiteren Analyse in einer CSV-Datei speichern. Verwenden Sie dazu den csv Modul, fügen Sie Ihrem Scraper diesen Code hinzu:

	import requests
	from bs4 import BeautifulSoup
	import csv
	
	url = 'https://techcrunch.com/category/startups/'
	
	
	
	article_list = ()
	
	response = requests.get(url)
	if response.status_code == 200:
		soup = BeautifulSoup(response.content, "lxml")
	
		articles = soup.find_all('header')
	
		for article in articles:
			title = article.get_text(strip=True)
			url = article.find('a')('href')
			article_list.append((title, url))
	
	with open('startup_articles.csv', 'w', newline='') as f:
		csvwriter = csv.writer(f)
		csvwriter.writerow(('Title', 'URL'))
		for article in article_list:
			csvwriter.writerow(article)
	

Dadurch wird eine CSV-Datei mit dem Namen erstellt startup_articles.csv und schreiben Sie die Titel und URLs der Artikel in die Datei. Sie können die CSV-Datei dann in einem Tabellenkalkulationsprogramm wie Microsoft Excel oder Google Tabellen zur weiteren Analyse.

Lerne weiter

Herzlichen Glückwunsch, Sie haben gerade Ihre erste Website mit Requests und BeautifulSoup erstellt!

Möchten Sie mehr über Web Scraping erfahren? Besuchen Sie unseren Scraping Hub. Dort finden Sie alles, was Sie brauchen, um ein Experte zu werden.

Wenn Sie bereit sind, echte Projekte in Angriff zu nehmen, folgen Sie unseren Tutorials für Fortgeschrittene:

Erkunden Sie weiter und viel Spaß beim Scrapen!

Related Posts

Hinterlasse einen Kommentar