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. ** **.
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.
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)
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.
#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.
#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.
#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"])
#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.
#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"})
#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)
#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.
#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.
#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.
Um die angegebenen Strukturdaten zu finden, ** verwenden Sie häufig eine Kombination der oben genannten Grundmuster **.
#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.
#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
#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"})
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
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