Es wird gesagt, dass es für Anfänger ist, aber ich bin auch ein Anfänger. Nachdem ich den einfachen Beispielcode für das Web-Scraping verstanden hatte, wollte ich ihm ein wenig Originalität verleihen, also habe ich es während der Untersuchung versucht. Wenn ich es gemäß dem Referenzcode des Web Scraping ausgeführt habe, konnte ich den Titel extrahieren und so weiter! Wenn es Level 1 ist, denke ich, dass es diesmal um Level 2 geht. Ich denke, es kann einige Missverständnisse geben. Wenn Sie also Vorschläge haben, kommentieren Sie diese bitte.
python 3.7.3 Ich habe es mit Visual Studio Code entwickelt.
Python hat eine HTTP-Bibliothek namens "urlib2", die jedoch nicht einfach zu verwenden ist. Daher verwende ich die Bibliotheken "Requests" und "BeautifulSoup" für das Web-Scraping. Holen Sie sich die Webseite mit Anfragen und extrahieren Sie den HTML-Code mit Beautiful Soup.
Nikkei Business Elektronische Version https://business.nikkei.com/ Ich werde versuchen, die Überschrift und URL des neuen Artikels von zu erhalten.
Greifen Sie mit Google Chrome zu und drücken Sie F12, um auf die Entwicklertools zuzugreifen (Überprüfungsmodus).
Ich möchte wissen, welcher Teil des HTML-Codes der neue Artikelteil ist. Drücken Sie daher Strg + Umschalt + C, um den Cursor auf die Überschrift zu bewegen.
Dann stellte ich fest, dass sich der serialisierte Name des Artikels in dem Teil befindet, in dem die Klasse eine Kategorie ist.Die Artikelüberschrift befindet sich im h3-Tag. Sie können auch sehen, dass sich die URL im a-Tag-Teil etwas oben befindet. Diese Beziehung ist in der folgenden Abbildung dargestellt. Später möchte ich es zusammen mit dem Programm erklären.
code.py
import requests
from bs4 import BeautifulSoup
import re
urlName = "https://business.nikkei.com"
url = requests.get(urlName)
soup = BeautifulSoup(url.content, "html.parser")
Stellen Sie eine http-Verbindung mit der Anforderungsbibliothek her und analysieren Sie HTML mit BeautifulSoup.
code.py
elems = soup.find_all("span")
Speichern Sie zunächst alle Span-Elemente in Elems.
code.py
for elem in elems:
try:
string = elem.get("class").pop(0)
if string in "category":
print(elem.string)
title = elem.find_next_sibling("h3")
print(title.text.replace('\n',''))
r = elem.find_previous('a')
print(urlName + r.get('href'), '\n')
except:
pass
Nehmen Sie als Nächstes den Klassennamen aus dem span-Element, um festzustellen, ob es sich um eine Kategorie handelt. Wenn die Klasse eine Kategorie ist, wird der Text des Seriennamens mit .string extrahiert.
Der nächste Schritt besteht dann darin, den Inhalt der Überschrift abzurufen. Die Überschrift befand sich im h3-Tag. Das h3-Tag befand sich in derselben Tiefe direkt darunter. Verwenden Sie also find_next_sibling (), um h3 in derselben Tiefe nach dem Element zu finden.
Der extrahierte Text kann auch ein Bild enthalten und Zeilenumbrüche enthalten oder nicht. Daher habe ich ihn gelöscht, wenn dies der Fall war.
Zum Schluss möchte ich die URL extrahieren. Es war früher dieselbe Tiefe, aber das a-Tag ist eine Tiefe höher. Daher habe ich find_previous () verwendet, um nach dem a-Tag zu suchen, und die get-Methode verwendet, um den angegebenen Attributwert des Elements zum Abrufen der href-Adresse abzurufen.
Nachfolgend einige Ausführungsergebnisse.
Yuka Ikematsus Direktflug von New York
Ein riesiges Krankenhausschiff der US Navy fährt nach New York. Immer noch nicht genug Betten
https://business.nikkei.com/atcl/gen/19/00119/033100011/
Yohei Ichishimas Silicon Valley Insai ...
Leben in einer "20% Nachfragewirtschaft" Post-Corona-Denken und Bewegen der US-Restaurantindustrie
https://business.nikkei.com/atcl/gen/19/00137/033100002/
Muneaki Hashimoto blickt der Medizin und der medizinischen Versorgung voraus
Yoshi Shiono und Präsident Teshirogi verzichten in Zusammenarbeit mit China Heian Insurance auf Verschwörung
https://business.nikkei.com/atcl/gen/19/00110/033100012/
Auf diese Weise konnte ich es bekommen.
Ich lerne noch und frage mich, ob es Missverständnisse oder bessere Wege gibt. Ich möchte es üben und gleichzeitig mein Verständnis nach und nach vertiefen.
Recommended Posts