Guten Abend, ich schreibe, während ich mir Amazon Prime's Batcheller Japan anschaue, aber ich möchte auch ausgeraubt werden.
Plötzlich musste ich bei meiner Datenanalyse Daten von außen sammeln, also kratzte ich sie. Ich hatte ein kleines Problem mit der Website mit Lazy Load, daher werde ich diesen Teil vorerst als Memorandum zusammenfassen. Es war ziemlich schwer herauszufinden.
Die Umgebung ist wie folgt.
macOS 10.2.3
python 3.6.0
phantomjs 2.1.1
selenium 3.0.2
Ich bin in letzter Zeit süchtig nach Anime und habe mich daher entschlossen, das Anime-Genre aus dem d Anime Store zum Üben zu holen.
lazy_load_scrape.py
import lxml.html as lh
import requests as rq
import cssselect
from selenium import webdriver
import time
#Zeit zu warten, bis die träge Ladung geladen ist
pause = 5
#Holen Sie sich root
t_url = 'https://anime.dmkt-sp.jp/animestore/gen_sel_pc'
t_html = rq.get(turl).text
root = lh.fromstring(t_html)
#Holen Sie sich Genre-Text und Links
ls = []
for i in root.cssselect('.btnList > a'):
ls.append({'genre': i.text_content(), 'https://anime.dmkt-sp.jp/animestore' + i.attrib['href']})
#Aktuelle ls
# [{'genre': '\nSF/Fantasie(733)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=11'}, {'genre': '\n Roboter/Mecha(214)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=12'}, {'genre': '\n Aktion/Schlacht(606)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=13'}, {'genre': '\n Komödie/Gag(466)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=14'}, {'genre': '\n Liebe/Liebeskomödie(370)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=15'}, {'genre': '\n jeden Tag/Herzerwärmend(112)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=23'}, {'genre': '\n Sport/Wettbewerb(122)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=16'}, {'genre': '\n Horror/Spannung/Argumentation(160)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=17'}, {'genre': '\n Geschichte/Senki(75)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=18'}, {'genre': '\n Krieg/Militär-(55)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=19'}, {'genre': '\n Drama/Jugend(556)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=20'}, {'genre': '\n kurz(218)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=22'}, {'genre': '\n Bühne/Leben/etc.(87)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=24'}]
#Für die Anweisung, nacheinander auf einzelne untergeordnete Elemente zuzugreifen
for l in ls:
genre = l['genre']
c_url = l['child_url']
#Geben Sie phantomJS für den Selentreiber an und geben Sie die URL ein
driver = webdriver.PhantomJS()
driver.get(curl)
#Holen Sie sich root für untergeordnete Ressource
croot1 = lh.fromstring(driver.page_source)
#Holen Sie sich Elemente mit cssselect
t_element = croot1.cssselect('.webkit2LineClamp')
#Scrollen Sie nach unten, um das träge geladene Teil zu laden
lastHeight = driver.execute_script("return document.body.scrollHeight") #Der Teil, der bestimmt, ob gescrollt wird
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") #Runterscrollen
time.sleep(pause) #Warten Sie, bis es geladen ist
#Der Teil, der bestimmt, ob gescrollt wird
newHeight = driver.execute_script("return document.body.scrollHeight")
if newHeight == lastHeight:
break
lastHeight = newHeight
#Holen Sie sich root, wenn alles geladen ist
croot = lh.fromstring(driver.page_source)
#Geben Sie ein Element mit cssselect an
ts = croot.cssselect('.webkit2LineClamp')
#Speichern Sie den Titel der gewünschten Arbeit in der Liste
c_elements = [t.text_content() for t in ts]
#Liste der damit verbundenen Genres und Werke
{genre: c_elements}
Auf diese Weise erhalten Sie vorerst eine Liste der Genres und Werke.
Ich denke, die Hauptsache, von der ich abhängig bin, ist der asynchrone Teil. Wenn Sie die Höhe vor und nach dem Laden so einstellen, können Sie nach unten scrollen. Dies scheint vorerst in Ordnung zu sein.
Ich habe bestätigt, dass ich es damit bekommen kann, aber die Daten, die ich bekommen habe, können gemischt sein, außer was ich will.
Es gibt nicht viele Websites, die sich bemühen, die Genres von Anime zu unterteilen, nicht wahr? Wenn dies organisiert ist, kann es für Anime-Anfänger gut sein.
Während ich dies schrieb, verschwand mein hübsches Lieblingsmädchen mit einem Schlüsselbein bei Batchelor Japan. Ich werde vor Schock weinen.
Recommended Posts