Ich wollte kratzen, aber ich habe es nicht angefasst, aber ich bin endlich aufgestanden und habe es angefasst und zusammengefasst, was ich damals untersucht habe. Ich hoffe, es ist hilfreich für diejenigen, die mit dem Web-Scraping beginnen möchten.
$ python --version
Python 3.7.4
$ conda --version
conda 4.7.12
$ pip -V
pip 19.2.3 from ■■■■■■■■■■■■■■■■■■■ (python 3.7)
Dieses Mal werden wir Anakonda zum Schaben verwenden. Wenn Sie es brauchen, installieren Sie es bitte. anaconda Windows-Version Anaconda Mac-Version
Wenn Sie anaconda nicht installieren möchten, installieren Sie bitte die folgende Bibliothek von pip. (Es ist standardmäßig in Anaconda installiert.)
$ pip install requests
$ pip install beautifulsoup4
$ pip install lxml
Requests
Eine HTML-Kommunikationsbibliothek, mit der Sie auf einfache Weise HTML / XML-Informationen und Bilder von Websites abrufen können. Die HTTP-Kommunikationsbibliothek mit dem Namen urllib ist in der Standard-Python-Bibliothek installiert, die API kann jedoch nicht ordnungsgemäß verwendet werden ** (Offizielle Ansicht anfordern) **. ** ** **
Beautiful Soup 4
Eine HTML-Parser-Bibliothek, die bestimmten Text aus dem erfassten HTML / XML extrahiert.
lxml
HTML-Parser. Python hat html.parser als Standardbibliothek, aber lxml scheint einfacher zu verwenden zu sein.
Dieses Mal werde ich als Beispiel vorstellen, wie man den Titel der Hauptnachrichten von Yahoo News erhält. Der Beispielcode wird am Ende des Artikels zusammengestellt.
Erstellen Sie eine 1-py-Datei und importieren Sie Anforderungen und BeautifulSoup4 mit der folgenden Beschreibung.
import requests
from bs4 import BeautifulSoup
2 Legen Sie die URL fest und rufen Sie den HTML-Code mit Anfragen ab.
url = 'https://news.yahoo.co.jp/'
rq = requests.get(url)
3 Erstellen Sie ein Objekt für die HTML-Analyse.
bs = BeautifulSoup(rq.text, 'lxml')
4 Verwenden Sie die Entwicklertools von Chrome, um das gewünschte Teil zu finden.
Der Teil, der den Titeln der wichtigsten Nachrichten gemeinsam ist, ist von Li-Tags umgeben, und der Klassenname lautet "topicListItem".
Schneiden Sie den erforderlichen Teil aus HTML aus, basierend auf den Bedingungen in 5 4.
newsList = bs.find_all("li", class_="topicsListItem")
In diesem Zustand wird jedes Li-Tag erfasst.
6 Ich möchte nur den Textteil aus der Schnittliste, also bekomme ich_text () und gebe ihn dann aus.
for news in newsList:
print(news.get_text())
Ergebnis
Leistungsbetrug Eine Reihe von Selbstkonsultationen
GoTo Inns, in denen Reservierungen für Einwohner Tokios nacheinander vorgenommen werden
US-Präsident Jemen zum Tode verurteilt
Gewalttätige Berichterstattung Tokio Zeitung entschuldigt sich
Wiederherstellung nach einem Ausfall des Docomo-Systems
Letzter Yuru Chara GP Tohoku Erster V.
Kurzstrecken GI Gran Alegria V.
Mikako Tabe Ich erwarte niemanden
Du hast es richtig verstanden!
import requests
from bs4 import BeautifulSoup
url = 'https://news.yahoo.co.jp/'
rq = requests.get(url)
bs = BeautifulSoup(rq.text, 'lxml')
newsList = bs.find_all("li", class_="topicsListItem")
for news in newsList:
print(news.get_text())