[PYTHON] So suchen Sie HTML-Daten mit Beautiful Soup

1. 1. Überblick

Ich habe verschiedene Tag-Informationen zur Datenanalyse in HTML eingebettet und verschiedene Methoden ausprobiert, um festzustellen, ob "ob die eingebetteten Daten korrekt angezeigt werden" durch einen automatischen Test erkannt werden kann.

Unter anderem konnte ich die HTML-Zieldaten mit BeautifulSoup of Python durchsuchen, sodass ich die Methode zusammenfassen werde. ** * Dieser Fall ist nur eine Suchmethode und beschreibt keine Analyse. ** **.

2. Konzept der Suchmethode

Um die HTML-Zieldaten mit BeautifulSoup abzurufen, suchen Sie zuerst die in <> enthaltenen Daten als Ausgangspunkt. Anschließend werden die HTML-Daten durchsucht, indem die in dem Tag enthaltenen Informationen nacheinander beschrieben werden.

image.png

Wenn Sie Daten angeben, die der Ausgangspunkt mit einem eindeutigen Wert sein sollen, müssen Sie nur dieses Element angeben, was die Beschreibung des Suchprogramms vereinfacht.

Um die Beispielsätze ab Kapitel 3 zu bedienen, wird außerdem davon ausgegangen, dass das folgende Programm beschrieben wird.


import requests
import re
from bs4 import BeautifulSoup

res = requests.get('Beschreiben Sie hier die zu analysierende URL')
c=res.content
soup = BeautifulSoup(c,'html.parser')

#Ein Beispielsatz wird hier beschrieben

print(elems)

3. 3. Grundlegende Datenerfassungsmethode

Verwenden Sie find, wenn nur eine Daten erfasst werden soll, und find_all, wenn mehrere Daten vorhanden sind (es gibt eine andere Methode namens select, diesmal jedoch ausgeschlossen). Find_all wird in den folgenden Beispielsätzen verwendet.

・ Muster zur direkten Angabe von Tags

#Struktur des Tags, nach dem Sie suchen möchten
<script>~</script>
elems = soup.find_all("script")

Es wird verwendet, wenn nach dem Teil gesucht wird, das von einfachen Tags umgeben ist.

-Muster, um mehrere Tags anzugeben (unter Verwendung einer Liste)

#Struktur des Tags, nach dem Sie suchen möchten
<h1>~</h1>
<div>~</div>
elems = soup.find_all(["h1","div"])

Verwenden Sie diese Option, wenn Sie mehrere in Tags enthaltene Daten durchsuchen möchten.

・ Muster zur Angabe von Schlüsselwörtern (genaue Übereinstimmung)

#Struktur des Tags, nach dem Sie suchen möchten
<a class = "test">~</a>
elems = soup.find_all(class_="test")

Wenn es ein Element gibt, in dem in jedem Tag ein Wert mit "=" zugewiesen wird, verwenden Sie ihn. Wenn Sie eine Klasse angeben, muss sie außerdem "class_" sein. (Weil Klasse in Python als reserviertes Wort verwendet wird) Wenn Sie zwei Suchelemente haben, verwenden Sie [] wie unten gezeigt.

elems = soup.find_all(id=["test1", "test2"])

・ Muster zur Angabe von Schlüsselwörtern (teilweise Übereinstimmung)

#Struktur des Tags, nach dem Sie suchen möchten
<a href="http://○○/△△.html">~<a>
elems = soup.find_all(href=re.compile("http://"))

Es wird verwendet, wenn teilweise nach dem durch "=" zugewiesenen Wert gesucht wird.

-Muster zur Angabe von Schlüsselwörtern (genaue Übereinstimmung mit dem Attribut attrs)

#Struktur des Tags, nach dem Sie suchen möchten
<a href="http://○○/△△.html">~<a>
elems = soup.find_all(attrs={"href":"http://○○/△△.html"})

Verwenden Sie "attrs", wenn etwas nicht als Schlüsselwort verwendet werden kann, z. B. das HTML5-Daten-Tag.

#Beispiel)
× elems = soup.find_all("meta",name="test")
⇒TypeError: find_all() got multiple values for argument 'name'

○ elems = soup.find_all("meta",attrs={"name":"test"})

-Pattern, um das Vorhandensein oder Fehlen von Elementen zu überprüfen (True, wenn ein Wert vorhanden ist, False, wenn nicht)

#Struktur des Tags, nach dem Sie suchen möchten
<a href="http://○○/△△.html">~<a>
elems = soup.find_all(href=True)

Alles kann in Tags wie href verwendet werden. Verwenden Sie es also, wenn Sie herausfinden möchten, was einen Wert hat. Wenn kein Wert vorhanden ist, geben Sie False wie folgt an

elems = soup.find_all(id=False)

-Muster zur Suche nach Text in Tags (genaue Übereinstimmung)

#Struktur des Tags, nach dem Sie suchen möchten
<a href="http://○○/△△.html">Benutzerhandbuch<a> #ここのBenutzerhandbuchのみ検索したい
elems = soup.find_all(text='Benutzerhandbuch')

Verwenden Sie diese Option, wenn Sie nur den in Tags enthaltenen Text extrahieren möchten.

-Muster für die Suche nach in Tags eingeschlossenem Text (teilweise Übereinstimmung)

#Struktur des Tags, nach dem Sie suchen möchten
<a href="http://○○/△△.html">Benutzerhandbuch<a> #ここのBenutzerhandbuchのみ検索したい
elems = soup.find_all(text=re.compile("Gehen"))

Verwenden Sie diese Option, wenn Sie nur den in Tags enthaltenen Text extrahieren möchten. Dies ist keine exakte Übereinstimmung, sondern eine teilweise Übereinstimmung.

-Pattern, das die Anzahl der zu sammelnden Tags angibt (nur find_all kann verwendet werden)

#Struktur des Tags, nach dem Sie suchen möchten
<p>test1</p> #Ich möchte nur hierher kommen
<p>test2</p>
elems = soup.find_all('p', limit=1)

Verwenden Sie diese Option, wenn Sie die angegebene Nummer von mehreren Tags erhalten möchten.

Vier. Erweiterte Version

Um die angegebenen Strukturdaten zu finden, ** verwenden Sie häufig eine Kombination der oben genannten Grundmuster **.

・ Geben Sie Tags und Schlüsselwörter an

#Struktur des Tags, nach dem Sie suchen möchten
<meta name="test">
elems = soup.find_all("meta",attrs={"name":"test"})

Es wird verwendet, wenn nach einem Tag gesucht wird, dessen Name = test im Tag meta lautet.

- Geben Sie Tags und Text an

#Struktur des Tags, nach dem Sie suchen möchten
<a href="http://○○/△△.html">Es ist ein Test<a>
elems = soup.find_all("a",text="Es ist ein Test")

Bei der Suche nach einem Tag mit dem Textsatz "Es ist ein Test" im a-Tag

- Geben Sie mehrere Elemente mit attrs an

#Struktur des Tags, nach dem Sie suchen möchten
<a href="http://○○/△△.html" title="test">Es ist ein Test</a>
elems = soup.find_all(attrs={"title":"test","href":"http://○○/△△.html"})

・ Geben Sie Tags vor und nach dem Startpunkt an

Wenn die angegebenen Strukturdaten nicht durchsucht werden können, weil mehrere ähnliche Tags vorhanden sind, ** bestimmen Sie die Startstrukturdaten und suchen Sie vor und nach diesen Daten. ** Verwenden Sie "next_element" und "previous_element", um vorher und nachher zu suchen. (Next_element wird verwendet, um nach dem späteren Element zu suchen, previous_element wird verwendet, um nach dem vorherigen Element zu suchen.)

#Struktur des Tags, nach dem Sie suchen möchten
<ui>
 <li>
  <a href="http://○○/△△.html">test</a>
 </li>
</ui>

#Ich möchte es hier bekommen
<ui>
 <li>
  <a href="http://□□/☆☆.html">test2</a> #Holen Sie sich Daten von hier
 </li>
</ui>
elems = soup.find_all("a",href="http://□□/☆☆.html")
elems2 = elems[0].previous_element.previous_element #.previous_Element zweimal verwenden,<ui><li>Bis zu

-Erstelle und spezifiziere eine Funktion

Sie können auch Funktionen zum Abrufen von Daten aus komplexen Tag-Strukturen erstellen.

#Struktur des Tags, nach dem Sie suchen möchten
<a class="test">~</a> #Ich möchte nur hierher kommen
<a id="test">~</a>
def has_class_but_no_id(tag):
    return tag.has_attr('class') and not tag.has_attr('id')

elems = soup.find_all(has_class_but_no_id)

Recommended Posts

So suchen Sie HTML-Daten mit Beautiful Soup
So erhalten Sie Artikeldaten mithilfe der Qiita-API
[Python] So kratzen Sie eine lokale HTML-Datei und geben sie mit Beautiful Soup als CSV aus
Verwendung der Suche sortiert
Umgang mit Datenrahmen
Ich habe versucht, Videos mit der Youtube Data API (Anfänger) zu suchen.
Hinzufügen neuer Daten (gerade Linien und Diagramme) mit matplotlib
So installieren Sie Python mit Anaconda
Ein Memorandum bei der Verwendung von schöner Suppe
[Python] Wie man MP3-Daten fFT
Lesen von e-Stat-Subregionsdaten
Wiederverwendung von Flaschen Wie schreibe ich HTML?
Umgang mit unausgeglichenen Daten
Aufblasen von Daten (Datenerweiterung) mit PyTorch
Wie benutzt man Bing Search API?
Sammeln von Daten zum maschinellen Lernen
So aktualisieren Sie eine in Tableau gepackte Arbeitsmappen-Datenquelle mit Python
Teilen und Verarbeiten eines Datenrahmens mithilfe der Groupby-Funktion
So sammeln Sie Twitter-Daten ohne Programmierung
Schöne Suppe
[Memo] Verwendung von BeautifulSoup4 (1) HTML anzeigen
Wie man optuna einstellt (wie man einen Suchraum schreibt)
So zeichnen Sie ein Diagramm mit Matplotlib
So richten Sie SVM mit Optuna ein
So stellen Sie xg boost mit Optuna ein
So suchen Sie in Google Colaboratory nach Google Drive
Zeichnen von Daten einer Galaxie mit sichtbarem Licht mithilfe der OpenNGC-Datenbank in Python
Verwendung von "deque" für Python-Daten
So laden Sie YouTube-Videos mit pytube3 herunter
Umgang mit Zeitreihendaten (Implementierung)
So suchen Sie mit Pythons Astroquery und erhalten passende Bilder mit Skyview
Wie man Problemdaten mit Paiza liest
Entfernen Sie unerwünschte HTML-Tags mit Beautiful Soup
Ich habe versucht, das Update von "Hameln" mit "Beautiful Soup" und "IFTTT" zu benachrichtigen.
[Python] So speichern Sie Bilder mit Beautiful Soup sofort im Web
So zeigen Sie eine Karte mit der Google Map API (Android) an
Erstellen von CSV-Beispieldaten mit Hypothese
Versuchen Sie, mit django-import-export csv-Daten zu django hinzuzufügen
So codieren Sie eine Drohne mithilfe der Bilderkennung
So richten Sie eine zufällige Gesamtstruktur mit Optuna ein
[Django] So erhalten Sie Daten durch Angabe von SQL.
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Verwendung von Datenanalysetools für Anfänger
[Einführung in Python] Umgang mit Daten im JSON-Format
So fügen Sie einen Suchpfad für Python-Module hinzu
So erstellen Sie Daten für CNN (Chainer)
So richten Sie eine zufällige Gesamtstruktur mit Optuna ein
Lesen von Zeitreihendaten in PyTorch
Konvertieren Sie Daten im JSON-Format in txt (mit yolo)
Datenbereinigung Umgang mit fehlenden und Ausreißern
Hochladen auf ein freigegebenes Laufwerk mit pydrive
So deinstallieren Sie ein mit setup.py installiertes Modul
Schöne Suppe verschüttet
[Für Anfänger] Anzeigen von Karten und Suchfeldern mithilfe der GoogleMap Javascript-API
Speichern Sie den Text aller Evernote-Notizen mit Beautiful Soup und SQL Alchemy in SQLite
[Rails] So erhalten Sie Standortinformationen mithilfe der Geolocation-API
100 Sprachverarbeitung Knock-92 (mit Gensim): Anwendung auf Analogiedaten
Verwendung von xgboost: Mehrklassenklassifizierung mit Irisdaten
So wenden Sie mit matplotlib Marker nur auf bestimmte Daten an
Lesen dynamisch generierter Tabellendefinitionen mit SQL Alchemy