Letztes Mal konnte vorgelesen werden, während langsam im Wörterbuch (SofTalk) registriert wurde. Dieses Mal werde ich den vorherigen Code verbessern, während ich die offizielle Dokumentation und verwandte Artikel zum Lernen lese.
aozora_urlsplit.py
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
def aozoraurl(base_url):
page = requests.get(base_url)
soup = BeautifulSoup(page.text, 'lxml')
xhtml_relative_url = soup.select('table.download a[href*=".html"]')[0].get('href')
zipdl_relative_url = soup.select('table.download a[href*=".zip"]')[0].get('href')
xhtml_url = urljoin(base_url, xhtml_relative_url)
zipdl_url = urljoin(base_url, zipdl_relative_url)
return xhtml_url, zipdl_url
if __name__ == '__main__':
print(aozoraurl("https://www.aozora.gr.jp/cards/000879/card85.html"))
Beautiful Soup 4
** Beautiful Soup ist eine Python-Bibliothek, die Daten aus HTML- und XML-Dateien abruft. ** ** ** Aus Beautiful Soup 4.2.0 Doc. Japanische Übersetzung
Analysieren Sie die Struktur, indem Sie ein HTML-Dokument an den Konstruktor "BeautifulSoup" übergeben
from bs4 import BeautifulSoup
soup = BeautifulSoup(page.content, 'lxml')
'lxml'
gibt einen Parser an (Syntaxanalysator)
Sie können den HTML-Parser aus dem Python-Standard (einschließlich Batterien) "html", "Parser", "fast" lxml "und" html5lib "auswählen.
Die offizielle Dokumentation scheint "lxml" zu empfehlen
If you can, I recommend you install and use lxml for speed. Aus Beautiful Soup 4.9.0-Dokumentation
Requests
** Requests ist eine Apache2-lizenzierte HTTP-Bibliothek, die in Python geschrieben wurde und benutzerfreundlich gestaltet ist. ** ** ** Von Anfragen: HTTP für Menschen
Wenn Sie die URL an "request.get ()" übergeben, wird ein "Response" -Objekt zurückgegeben Sie können ".text" und ".content" verwenden, um den Inhalt von "Response" abzurufen
Aus dem offiziellen Dokument
import requests
r = request.get(URL)
r.content #Holen Sie sich binäre Daten
r.text #Textdaten abrufen
Ich kenne den Unterschied zwischen Binär und Text nicht, aber laut [^ stack] ist es hier ".text" für HTML und XML und ".content" für Bilder und PDF.
Es gibt verschiedene Möglichkeiten, um Elemente abzurufen, aber ich denke, der CSS-Selektor ist der vielseitigste.
If you want to search for tags that match two or more CSS classes, you should use a CSS selector:
Aus dem offiziellen Dokument
css_soup.select("p.strikeout.body")
# [<p class="body strikeout"></p>]
Extrahieren Sie jede URL von der Seite der Aozora Bunko Book Card Beachten Sie, dass der Rückgabewert von "oup.select "eine Liste ist
xhtml_url = soup.select('table.download a[href*=".html"]')[0].get('href')
zip_url = soup.select('table.download a[href*=".zip"]')[0].get('href')
urljoin
Links von den Seiten der Aozora Bunko-Buchkarte zu jeder Seite werden als relative Links aufgeführt. Verwenden Sie "urljoin", um mit der ursprünglichen URL zu synthetisieren und zu einem absoluten Link zurückzukehren
urllib.parse.urljoin(base, url, allow_fragments=True) ** Kombinieren Sie die "Basis-URL" (Basis) mit einer anderen URL (URL), um eine vollständige URL ("absolute URL") zu bilden. ** ** ** Von urllib.parse --- URL in Komponente analysieren
Aus dem offiziellen Dokument
>>> from urllib.parse import urljoin
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
'http://www.cwi.nl/%7Eguido/FAQ.html'
return a, b
Wenn Sie mehrere Rückgabewerte zurückgeben möchten (diesmal zwei URLs), scheint es am einfachsten zu sein, so zu schreiben
In Python können Sie alle Zeichenfolgen und Zahlen zurückgeben, indem Sie sie einfach durch Kommas getrennt zurückgeben. Aus So geben Sie mehrere Rückgabewerte mit einer Python-Funktion zurück | note.nkmk.me
In diesem Fall ist der Rückgabewert ein Taple.
aozora_rubylist.py
from bs4 import BeautifulSoup
import requests
import jaconv
def aozoraruby(xhtml_url):
page = requests.get(xhtml_url)
soup = BeautifulSoup(page.content, 'lxml')
_ruby = soup.select("ruby")
_rubylist = [i.get_text().replace(")", "").split("(") for i in _ruby]
for index, item in enumerate(_rubylist):
_rubylist[index][1] = jaconv.kata2hira(item[1])
return _rubylist
if __name__ == '__main__':
print(aozoraruby("https://www.aozora.gr.jp/cards/000119/files/624_14544.html"))
Extrahieren Sie die Zeichen unter dem Ruby-Tag aus dem XozML-Körper von Aozora Bunko Ich denke, ".select (" ruby ")" ist am einfachsten
Überprüfen Sie vorerst den erfassten Inhalt
Sie können den Zeichenfolgenteil mit .get_text ()
extrahieren, er kann jedoch nicht auf die Liste angewendet werden. Drehen Sie ihn daher mit der for-Anweisung.
_ruby = soup.select("ruby")
for i in _ruby:
print(i.get_text())
#Schwer
#Toter Körper
#Mariya
# ︙
Es wird in Form von "Kanji (Rubin)" ausgegeben
Listen Sie den erworbenen Rubin auf. Es ist schwierig, in einer Liste von einfachen "[" Kanji "," Kanji ", ...]" zu verwenden, also "[[" Kanji "," Yomigana "], [" Kanji "," Yomigana " ], ...] `Erstellen Sie ein zweidimensionales Array
Beim Erstellen einer Liste mit einer for-Anweisung haben Sie vor der for-Anweisung eine leere Liste erstellt und Elemente hinzugefügt. Es scheint jedoch, dass es in einem Satz unter Verwendung der Methode ** Listeneinschlussnotation ** [^ naihou1] [^ naihou2] erstellt werden kann.
x = [i.get_text().replace(")", "").split("(") for i in _ruby]
# [['Schwer', 'Regenschirm'], ['Toter Körper', 'Herausfordernd'], ['Mariya', 'Maria'],...]
Um sich im Wörterbuch in SofTalk zu registrieren, wird das Lesepseudonym in Hiragana umgewandelt. Laut diesem Qiita-Artikel scheint jaconv für diese Verwendung geeignet zu sein.
jaconv (japanischer Konverter) führt eine Hochgeschwindigkeitskonvertierung von Zeichentypen aus Hiragana, Katakana, voller Breite und halber Breite durch. Da es nur in Python implementiert ist, kann es auch in einer Umgebung verwendet werden, in der der C-Compiler nicht verwendet werden kann. Von jaconv / README_JP.rst bei master · ikegami-yukino / jaconv · GitHub
for index, item in enumerate(_rubylist):
_rubylist[index][1] = jaconv.kata2hira(item[1])
# [['Schwer', 'Regenschirm'], ['Toter Körper', 'Herausfordernd'], ['Mariya', 'Mariya'],...]
[^ naihou1]: Schreiben Sie die Listenerstellung präzise mit der Einschlussnotation --Qiita https://qiita.com/tag1216/items/040e482f9844805bce7f
[^ naihou2]: Verwendung der Listeneinschlussnotation | note.nkmk.me https://note.nkmk.me/python-list-comprehension/
Recommended Posts