Web -Scraping mit wunderschöner Suppe

Web -Scraping mit wunderschöner Suppe
Web -Scraping ist eine Technik, mit der bestimmte Inhalte aus Websites ausgewählt und extrahiert werden. Wenn wir beispielsweise die Preise überwachen und wie sie sich ändern möchten, können wir einen Webschaber verwenden, um nur die Informationen zu extrahieren, die wir von einer Website gewünscht haben. In diesem Tutorial lernen wir, wie man das Web mit BeautifulSoup kratzt.

Installieren Sie zunächst BeautifulSoup wie folgt:

PIP Installieren Sie BeautifulSoup4

BeautifulSoup wird auf eine HTML -Datei angewendet. Deshalb müssen wir zunächst den HTML -Inhalt einer Webseite erhalten. Dies erfolgt normalerweise mit dem Request -Modul. In diesem speziellen Beispiel erhalten wir den HTML -Inhalt einer Webseite und zeigen sie an. Dafür haben wir die URL zuerst festgelegt; In diesem Fall habe ich die Common Sense Media -Website ausgewählt (weil sie eine Liste von Filmen mit Bewertungen enthält, die wir möglicherweise für das Kratzen interessiert sein können). Anschließend verwenden wir die Get () -Methode, um das Antwortobjekt abzurufen und den HTML -Teil mit dem Inhalts- oder Textattribut zu extrahieren.

Anfragen importieren
url = "https: // www.Commonsensemedia.org/move-Reviews "
Body = Anfragen.Get (URL)
Body_Text = Body.Inhalt # oder Körper.Text
Druck (Körper.Inhalt) # oder drucken (Körper.Text)

Jetzt können wir mit BeautifulSoup beginnen. Wir erstellen ein schönes Objekt, das zwei Argumente einnimmt - die HTML -Datei und die Art des Parsers. Es sind vier Parser verfügbar - HTML.Parser, LXML, LXML-XML und HTML5LIB.

Aus BS4 Import BeautifulSoup
Suppe = BeautifulSoup (Body_Text, 'lxml')

Man muss auch den Parser installieren. In diesem Fall habe ich den LXML -Parser gewählt, und so werde ich ihn installieren.

PIP Installieren Sie LXML

Jetzt können wir fast alles tun, aber wir werden die verschiedenen Möglichkeiten untersuchen.

(i) Die Prettify () -Methode schreibt den Text in einem lesbaren und „hübschen“ Format um.

Suppe.prettify ()

(ii) Die Titelmethode holt den Titel ab.

Suppe.Titel

(iii) Die „P“ -Methode extrahiert alle P -Tags aus dem HTML -Code.

Suppe.P

(iv) Die „A“ -Methode extrahiert alle A -Tags aus dem HTML -Code.

Suppe.A

(v) Die Methode find_all () findet alle Webelemente, die ein bestimmtes Argument enthalten. In diesem Fall habe ich "A" bestanden, also findet_all ("a") alle "A" -Tags.

Suppe.find_all ('a')

(vi) Die Find -Methode findet alle verabschiedeten Argumente. In diesem Fall übergeben wir die Argument -ID = „Passwort.”So wird der HTML -Code für die ID durchsucht und wenn er übereinstimmt, rufen Sie die Klausel ab.

Suppe.find (id = "Passwort")

In der Regel möchten wir eine Webseite für Jobs, Filme, Kurse usw. kratzen., zusammen mit ihren jeweiligen Informationen (wie Preise und Bewertungen). In diesem Fall interessieren wir uns für eine Website, insbesondere an der Kratze ihrer Filmliste.

Anfragen importieren
url = "https: // www.Commonsensemedia.org/move-Reviews "
Body = Anfragen.Get (URL)
Body_Text = Body.Inhalt
Aus BS4 Import BeautifulSoup
Suppe = BeautifulSoup (Body_Text, 'lxml')

In diesem speziellen Fall befindet sich der HTML -Code jedes Filmnamens (was wir kratzen) in einem Container. Wir beginnen zunächst mit der Inspektion des betreffenden Elements. In meinem Fall habe ich mich entschieden, den Titel des ersten Films zu inspizieren („Till Death“).

Wenn Sie das Element inspizieren, werden Sie feststellen, dass das, nach dem wir suchen - der Filmtitel „Till Death“ - in einem „DIV“ -Tag mit der Klasse „Inhaltskontroll -Wrapper“ enthalten ist."Dieses erste" Div "-Tag wird im gesamten HTML-Code immer wieder auftreten, da jeder Filmtitel in einem solchen" Div "-Tag enthalten ist. Und so sagen wir, dass wir für jedes DIV in Divs das Sub- "DIV" -Tag mit einer anderen Klasse von "Ansichtsfeld-Feldern-Feld-Referenz-Referenz-Review-Review-Referen-F-Prod-Ergebnis-Title auswählen möchten" auswählen möchten."Danach sehen wir ein" starkes "Tag mit der Klasse" Field-Content ".Also machen wir das Gleiche wieder. Und schließlich ist unser Titel selbst mit einem "A" -Tag verschachtelt, also wählen wir das "A" -Tag aus.

Divs = Suppe.find_all ("div", class _ = "content-content-wrapper"))

Bitte beachten Sie hier, dass nach der Wortklasse ein Unterstrich vorhanden ist. Dieser Unterstrich unterscheidet die HTML -Codeklasse von den Python -Klassen. Also haben wir den Code geschrieben, der das „DIV“ -Tag mit der Klasse „Inhaltskontent-Drapper extrahiert“ extrahiert wird.”

Dann schreiben Sie:

# Divs = Suppe.find_all ("div", 'class': 'content-content-wrapper')
für div in divs:
divs2 = div.find_all ("div", class _ = "Ansichtsfeld-Field-Feld-Referenz-Review-ENT-Prod-Ergebnis-Title"))
für div in divs2:
STRINGS = Div.find_all ("Strong", Klasse _ = "Field-Content"))
für starke Starke:
aa = stark.find_all ("a")
für a in aa:
drucken (a.Text)

Die für Schleifen gibt es, um jeden Film auszuwählen. Wenn wir schließlich den Text auswählen wollen, sagen wir a.Text. Letzteres druckt jeden Filmtitel aus und wir können auf diese Weise alles kratzen, was wir wollen.

Nehmen wir nun an, dass wir diese Daten in einer CSV -Datei speichern wollten. Das ist auch möglich. Um an CSV zu schreiben, müssen Sie zuerst das CSV -Modul importieren. Öffnen wir zunächst die Datei, in der wir die gespeicherten Informationen wünschen. Hier übergeben wir drei Argumente - den Namen der Datei, der Modus und ob wir eine neue Linie wollen oder nicht. Hier fügen wir eine neue Zeile hinzu, die nichts entspricht, um zu verhindern, dass die CSV. Zweitens geben wir die Datei an die methodische writer () weiter. Drittens schreiben wir eine neue Zeile. In diesem Fall nenne ich meine neue Zeile "Filme", ​​weil es der Header ist, was zu folgen ist.

CSV importieren
file = open ("Film.CSV "," W ", newline =")
Datei_Write = CSV.Schriftsteller (Datei)
Datei_Write.writerow (['movies'])

Viertens werden wir sie aus leeren Räumen ausziehen und dann mit der Methode writerow () die CSV -Datei schreiben, anstatt nur die „A“ -Variable auszudrucken.

für div in divs:
divs2 = div.find_all ("div", class _ = "Ansichtsfeld-Field-Feld-Referenz-Review-ENT-Prod-Ergebnis-Title"))
für div in divs2:
STRINGS = Div.find_all ("Strong", Klasse _ = "Field-Content"))
für starke Starke:
aa = stark.find_all ("a")
für a in aa:
Datei_Write.writerow ([a.Text.Streifen()])

Der gesamte Code würde ungefähr so ​​aussehen:

Anfragen importieren
url = "https: // www.Commonsensemedia.org/move-Reviews "
Body = Anfragen.Get (URL)
Body_Text = Body.Inhalt
Aus BS4 Import BeautifulSoup
Suppe = BeautifulSoup (Body_Text, 'lxml')
Divs = Suppe.find_all ("div", class _ = "content-content-wrapper"))
CSV importieren
file = open ("Film.CSV "," W ", newline =")
Datei_Write = CSV.Schriftsteller (Datei)
Datei_Write.writerow (['movies'])
für div in divs:
divs2 = div.find_all ("div", class _ = "Ansichtsfeld-Field-Feld-Referenz-Review-ENT-Prod-Ergebnis-Title"))
für div in divs2:
STRINGS = Div.find_all ("Strong", Klasse _ = "Field-Content"))
für starke Starke:
aa = stark.find_all ("a")
für a in aa:
Datei_Write.writerow ([a.Text.Streifen()])

Dies ist nur ein einfaches Beispiel. In Wirklichkeit ist das Web -Scraping so leistungsfähig, dass Sie nahezu jede Webseite kratzen und überwachen können.

Glückliche Codierung!