Ich lese ab und zu WEB-Manga, aber es gibt so viele, dass ich nicht weiß, welche ich lesen soll. Ich dachte darüber nach, ob Kommentare als Index für die Auswahl des zu lesenden Mangas verwendet werden könnten. Beliebte Mangas haben viele Kommentare, und selbst wenn es nur wenige Kommentare gibt, gibt es viele interessante Mangas. Ich denke also darüber nach, die Kommentare auf verschiedene Arten zu analysieren, aber als ersten Schritt, als ich die Kommentare zu einer Wortwolke machte, konnte ich die Kommentare visuell erfassen und intuitiv verstehen, ob es sich um einen faszinierenden Manga handelte. Ich konnte es sehen.
Durch die Auswahl von Manga aus einer neuen Perspektive basierend auf der Wortwolke hoffe ich, der Eingang zu dem Manga zu werden, den der Autor hart geschrieben hat, und zur Wiederbelebung der Manga-Welt beizutragen. Ist es etwas übertrieben?
python 3.7.6 selenium 3.141.0 ChromeDriver 80.0.3987.16 wordcloud 1.6.0 BeautifulSoup 4.8.2 mecab-python-windows 0.996.3
Wir haben unten eine Website erstellt, auf der Sie die Ergebnisse sehen können. Klicken Sie auf die Wortwolke, um zu diesem Manga zu gelangen.
Das Folgende ist das Ausgabeergebnis. Fragen Sie sich, was für ein Manga das ist? Mit Kommentaren wie "schön" und "wie" denke ich, ich möchte ein wenig lesen.
Wir werden kratzen, also überprüfen Sie die Bedingungen.
Auszug aus niconico Nutzungsbedingungen
** 5 Verbote **
Die folgenden Handlungen sind in Bezug auf die Verwendung von "niconico" durch Benutzer verboten.
Achten Sie daher darauf, dass Sie nicht übermäßig belastet werden. Es wird ausgeführt, während es nicht ununterbrochen läuft, den Schlaf einschließt usw.
Führen Sie den Prozess gemäß dem folgenden Ablauf aus.
Sie müssen sich anmelden, um die lächelnden Standbilder zu sehen. Hier werden wir Selen verwenden, um uns im Hintergrund bei Nico Nico anzumelden.
Es wird davon ausgegangen, dass Selen und Chrome Driver installiert sind. ChromeDriver
Importieren Sie die erforderlichen Bibliotheken unten.
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import urllib.parse
Stellen Sie die Optionen ein und erstellen Sie den Treiber. Die Option "--headless" wird angegeben, um im Hintergrund zu arbeiten. Außerdem wird das Zeitlimit mit "set_page_load_timeout" auf 30 Sekunden eingestellt.
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1024,768')
driver = webdriver.Chrome(options=options)
driver.set_page_load_timeout(30)
Greifen Sie zunächst auf "https: //account.nicovideo.jp/login? Site = seiga & next_url =% 2F" zu. Als nächstes erhalte ich die E-Mail-Adresse und das Passwort nach ID und stelle sie ein. Klicken Sie abschließend auf die Schaltfläche Anmelden. Bitte ändern Sie "[E-Mail-Adresse]" und "[Passwort]" in Ihre eigene.
driver.get('https://account.nicovideo.jp/login?site=seiga&next_url=%2F')
e = driver.find_element(By.ID, "input__mailtel")
e.send_keys('[Mail Adresse]')
e = driver.find_element(By.ID, "input__password")
e.send_keys('[Passwort]')
e = driver.find_element(By.ID, 'login__submit')
e.click()
Sie können sich auch mit dem Anforderungsbeitrag anmelden. In diesem Fall müssen Sie jedoch die "auth_id" vom Anmeldebildschirm abrufen und ebenfalls veröffentlichen. Eine Verarbeitung um dieses herum ist mit Selen nicht erforderlich. Wenn der Bildschirm nach dem Anzeigen des Bildschirms mit JavaScript usw. aktualisiert wird, treten bei Anfragen große Probleme auf. Bei Selen ist es jedoch praktisch, ohne Bedenken darüber arbeiten zu können.
Wir erhalten eine Liste der Standbilder in den folgenden Staaten. Rufen Sie die Manga-URL der Manga-Liste auf jeder Seite in einer Liste ab, während Sie die Seiten wechseln. In Anbetracht der Belastung erhalten wir hier 1 bis 3 Seiten.
url_root = 'https://seiga.nicovideo.jp'
desc_urls = []
for n in range(1, 4):
target_url = urllib.parse.urljoin(url_root, 'manga/list?page=%d&sort=manga_updated' % n)
try:
driver.get(target_url)
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, 'html.parser')
# change to loop
for desc in soup.select('.mg_description'):
title = desc.select('.title')
desc_urls.append(urllib.parse.urljoin(url_root, title[0].find('a').get('href')))
except Exception as e:
print(e)
continue
Speichern Sie die URL zum Manga in der Liste "desc_urls".
Stellen Sie die URL zu jeder Seite in target_url
ein. Da die Seitensteuerung durch Festlegen einer Nummer in page =
von QueryString durchgeführt wird, legen Sie die Nummer der Seite fest, die Sie dort abrufen möchten.
Holen Sie sich die Seite mit driver.get
. Nachdem Sie es erhalten haben, rufen Sie den HTML-Code des Inhalts mit "driver.page_source.encode (" utf-8 ") ab und setzen Sie ihn zur einfachen Handhabung auf" BeautifulSoup ".
Sie können damit umgehen, ohne es auf "BeautifulSoup" zu setzen, aber ich bin eher an dieses gewöhnt, also habe ich mich für dieses entschieden. WebDriver kann auch XPath verwenden, daher denke ich, dass es in Ordnung ist.
Da das select
von BeautifulSoup
ein CSS-Selektor ist, erhalten wir das .mg_description
und erhalten den .title
darin und das href
des a
Tags dort gesetzt.
Sie haben jetzt eine Liste von Manga-Titeln und URLs auf der Seite.
Holen Sie sich die Seite mit der in "desc_urls" gespeicherten URL. Die Erfassung erfolgt mit "driver.get (desc_url)". Sobald Sie es erhalten haben, rufen Sie den HTML-Code auf die gleiche Weise ab und setzen Sie ihn auf "BeautifulSoup".
for desc_url in desc_urls:
try:
driver.get(desc_url)
html = driver.page_source.encode('utf-8')
soupdesc = BeautifulSoup(html, 'html.parser')
Holen Sie sich das Element mit der ID ng_main_column
im div-Tag.
Holen Sie sich darin das Element der `.main_title'-Klasse und den Titel und den Autor.
Versuchen Sie zu drucken und prüfen Sie, ob Sie es richtig bekommen können.
maindesc = soupdesc.find('div', id = 'mg_main_column')
titlediv = maindesc.select('.main_title')[0]
title = titlediv.find('h1').text.strip()
author = titlediv.find('span').text.strip()
print(title)
print(author)
Die Struktur von HTML ist wie folgt.
Da sich jede Episode in dem Element befindet, dessen Klasse ".episode_item" ist, rufen Sie die Liste mit dem CSS-Selektor "select" ab. Da mehrere Elemente abgerufen werden, rufen Sie die URL zum Untertitel und die Details der einzelnen Elemente ab.
for eps in soupdesc.select('.episode_item'):
eps_ttl_div = eps.select('.title')
eps_title = eps_ttl_div[0].find('a')
eps_url = urllib.parse.urljoin(url_root, eps_title.get('href'))
eps_t = eps_title.text
print(eps_t)
try:
driver.get(eps_url)
html = driver.page_source.encode('utf-8')
soupeps = BeautifulSoup(html, 'html.parser')
Der Titel stammt aus der .title
-Klasse und die URL aus dem a tag href
.
Ich erhalte den Detailbildschirm mit "driver.get (eps_url)".
Sobald Sie es erhalten haben, stellen Sie es auf "Schöne Suppe".
Die Klasse erhält die Elemente für .comment_list
und alle darin enthaltenen .comment
s.
Ich bekomme die Zeichenfolge mit "c.text" und setze sie in das Array "comment_text".
Die Einstellung für das Array verwendet die Listeneinschlussnotation. Die Einschlussnotation von Python scheint vollständig zu sein.
crlist = soupeps.select('.comment_list')
comments = crlist[0].select('.comment')
comments_text = [c.text for c in comments]
Die HTML-Struktur des Kommentarteils ist wie folgt. Es scheint, dass Sie auch mit comment_viewer
finden können. Lassen Sie uns diesen Bereich auf nette Weise spezifizieren.
Die erfasste Kommentarzeichenfolge wird von MeCab morphologisch analysiert. Fügen wir den Importbetrag hinzu.
import MeCab
Führen Sie eine morphologische Analyse mit "parse" von MeCab durch.
m = MeCab.Tagger('')
parsed = m.parse('。'.join(comments_text))
Das Ergebnis der morphologischen Analyse ist wie folgt.
'Wie erwartet\t Substantiv,Adjektiv Verbstamm,*,*,*,*,Wie erwartet,Sasuga,Sasuga\bis n\t Assistent,Adjunct,*,*,*,*,Zu,D.,D.\n nicht\t Adjektiv,Unabhängigkeit,*,*,Apokalypse,Kontinuierliche Verbindung,Abwesend,Naka,Naka\n\t Hilfsverb,*,*,*,Besondere,Grundform,Ta,Ta,Ta\nwww\t Substantiv,Allgemeines,*,*,*,*,*\n。\t Symbol,Phrase,*,*,*,*,。,。,。\n es\t Substantiv,Gleichbedeutend,Allgemeines,*,*,*,Es,Sohle, einzig, alleinig,Sohle, einzig, alleinig\n ist\t Assistent,Hilfe,*,*,*,*,Ist,C.,Beeindruckend\n Schreibgeräte\t Substantiv,Allgemeines,*,*,*,*,Schreibutensilien,Hicking,Hicking\bei n\t Assistent,Fallassistent,Allgemeines,*,*,*,damit,De,De\n ist\t Assistent,Hilfe,*,*,*,*,Ist,C.,Beeindruckend\n Ja\t verb,Unabhängigkeit,*,*,Fünf Schritte, La Linie,Kontinuierlicher Typ,Gibt es,Ali,Ali\n\t Hilfsverb,*,*,*,Spezial / Masse,Unvollkommene Form,Masu,Mase,Mase\n\t Hilfsverb,*,*,*,Unveränderlicher Typ,Grundform,Hmm,Nieder,Nieder\n…\t Symbol,Allgemeines,*,*,*,*,…,…,…\n。\t Symbol,Phrase,*,*,*,*,。,。,。\n Kisigai\t Substantiv,Allgemeines,*,*,*,*,*\n。\t Symbol,...
Da \ n
Zeile für Zeile ist, nehmen Sie Zeile für Zeile mit Splitlines
heraus und erhalten Sie die Grundform der Morphologie vom 7. auf der rechten Seite, getrennt durch \ t
.
Dabei schließen wir Hilfswörter und -verben, Synonyme und einige Zeichenfolgen wie "suru" und "teru" aus.
Wenn Sie es nicht ausschließen, wird es beim Erstellen einer Wortwolke in großen Buchstaben angezeigt.
words = ' '.join([x.split('\t')[1].split(',')[6] for x in parsed.splitlines()[:-1] if x.split('\t')[1].split(',')[0] not in ['Partikel', 'Hilfsverb'] and x.split('\t')[1].split(',')[1] not in ['Gleichbedeutend'] and x.split('\t')[1].split(',')[6] not in ['Machen', 'Teru', 'Werden', 'Herr.', 'damit', 'Dies', 'Gibt es']])
Erstellen Sie eine Wortwolke mit "to_file" in WordCloud.
comic_titles``` comic_subtitles``` comic_images
comic_urls
ist eine in einem Array deklarierte Variable, die später beim Erstellen von HTML verwendet wird. Jedes enthält einen Titel, einen Untertitel, einen Bildnamen und eine URL.
Beim Erstellen von WordCloud werden Schriftart, Hintergrundfarbe und Größe angegeben. Die verwendete Schriftart ist "Ranobe POP", die auf YouTube häufig verwendet wird. Bitte geben Sie diesen Bereich nach Ihren Wünschen an.
Ich gebe in eine Datei mit wordcloud.to_file
aus.
if len(words) > 0:
try:
comic_titles.append(title)
comic_subtitles.append(eps_t)
comic_images.append('%d.png' % (comic_index))
comic_urls.append(eps_url)
wordcloud = WordCloud(font_path=r"C:\\WINDOWS\\Fonts\\Ranobe POP.otf", background_color="white", width=800,height=800).generate(words)
wordcloud.to_file("[Pfad, den Sie speichern möchten]/wordcloud/%d.png " % (comic_index))
comic_index += 1
except Exception as e:
print(e)
Das Ausgabeergebnis ist das zuerst gezeigte. Erstellen Sie damit HTML und veröffentlichen Sie es auf der Site.
https://comic.g-at.net/
Wenn Sie auf die obige URL zugreifen, wird die folgende Liste von Wortwolken angezeigt. Klicken Sie auf die Wortwolke, um den Manga zu öffnen.
Viele der Kommentare wie Jump + und Manga One sind ziemlich hart, aber Nico Nico hat viele sanfte Kommentare. Immerhin sind Sie es gewohnt zu kommentieren.
Es wäre großartig, wenn wir nicht nur eine Wortwolke erstellen, sondern auch verschiedene Dinge analysieren und die Tür zu Meisterwerken öffnen könnten, die bisher schwer zu treffen waren.