Bonsoir, j'écris en regardant Batcheller Japan d'Amazon Prime, mais je veux aussi être volé.
Soudainement, dans mon travail d'analyse de données, j'avais besoin de collecter des données de l'extérieur, alors je les ai grattées. J'ai eu un petit problème avec le site Web avec Lazy Load, donc je vais résumer cette partie comme un mémorandum pour le moment. C'était assez difficile à découvrir.
L'environnement est le suivant.
macOS 10.2.3
python 3.6.0
phantomjs 2.1.1
selenium 3.0.2
Je suis accro à l'anime ces derniers temps, alors j'ai décidé de me procurer le genre d'anime sur d Anime Store pour m'entraîner.
lazy_load_scrape.py
import lxml.html as lh
import requests as rq
import cssselect
from selenium import webdriver
import time
#Il est temps d'attendre que la charge paresseuse se charge
pause = 5
#Obtenez root
t_url = 'https://anime.dmkt-sp.jp/animestore/gen_sel_pc'
t_html = rq.get(turl).text
root = lh.fromstring(t_html)
#Obtenez du texte et des liens de genre
ls = []
for i in root.cssselect('.btnList > a'):
ls.append({'genre': i.text_content(), 'https://anime.dmkt-sp.jp/animestore' + i.attrib['href']})
#LS actuel
# [{'genre': '\nSF/Fantaisie(733)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=11'}, {'genre': '\n robot/Mecha(214)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=12'}, {'genre': '\n action/bataille(606)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=13'}, {'genre': '\n comédie/gag(466)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=14'}, {'genre': '\n amour/Comédie romantique(370)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=15'}, {'genre': '\n tous les jours/Réconfortant(112)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=23'}, {'genre': '\n sports/Concurrence(122)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=16'}, {'genre': '\n horreur/Le suspense/Raisonnement(160)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=17'}, {'genre': '\n histoire/Senki(75)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=18'}, {'genre': '\n guerre/militaire(55)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=19'}, {'genre': '\n drame/Jeunesse(556)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=20'}, {'genre': '\n court(218)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=22'}, {'genre': '\n étape/vivre/etc.(87)\n\n', 'child_url': 'https://anime.dmkt-sp.jp/animestore/gen_pc?genreCd=24'}]
#Pour instruction pour accéder aux éléments enfants individuels un par un
for l in ls:
genre = l['genre']
c_url = l['child_url']
#Spécifiez phantomJS pour le pilote sélénium et indiquez l'URL
driver = webdriver.PhantomJS()
driver.get(curl)
#Obtenir la racine de la ressource enfant
croot1 = lh.fromstring(driver.page_source)
#Obtenir des éléments à l'aide de cssselect
t_element = croot1.cssselect('.webkit2LineClamp')
#Faites défiler vers le bas pour charger la partie chargée paresseusement
lastHeight = driver.execute_script("return document.body.scrollHeight") #La partie qui détermine si elle est défilée
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") #Défiler vers le bas
time.sleep(pause) #Attendez qu'il se charge
#La partie qui détermine si elle est défilée
newHeight = driver.execute_script("return document.body.scrollHeight")
if newHeight == lastHeight:
break
lastHeight = newHeight
#Obtenez root lorsque tout est chargé
croot = lh.fromstring(driver.page_source)
#Obtenir en spécifiant un élément à l'aide de cssselect
ts = croot.cssselect('.webkit2LineClamp')
#Stockez le titre de l'œuvre que vous vouliez dans la liste
c_elements = [t.text_content() for t in ts]
#Liste des genres et des œuvres qui leur sont associés
{genre: c_elements}
Pour le moment, cela vous donnera une liste de genres et d'œuvres.
Je pense que la principale chose à laquelle je suis accro est la partie asynchrone. Si vous prenez la hauteur avant et après le chargement de cette façon, vous pouvez faire défiler vers le bas. Cela semble convenir pour le moment.
J'ai confirmé que je pouvais l'obtenir avec cela, mais les données que j'ai obtenues peuvent être mélangées à d'autres que je veux.
Il n'y a pas beaucoup de sites qui s'efforcent de diviser les genres d'anime, n'est-ce pas? Cela pourrait être bon pour les débutants d'anime si cela est organisé.
Pendant que j'écrivais ceci, ma jolie fille préférée avec une clavicule a disparu à Batchelor Japon. Je suis sur le point de pleurer sous le choc.