J'ai fait quelques explorations et grattages de base avec Scrapy.
Projet Scrapy pour obtenir le titre et le score total de l'animation d'hiver 2016 à partir du site de synthèse d'informations d'animation suivant https://www.anikore.jp/chronicle/2016/winter/
https://doc.scrapy.org/en/1.2/intro/tutorial.html Comme vous pouvez le voir dans ce tutoriel original
% scrapy startproject project_name
Le projet sera créé en exécutant la commande à n'importe quel endroit.
Cette fois, j'ai changé project_name
en ```anime``.
Ensuite, créez un fichier Python qui sera un Spider (scraper) dans le répertoire spiders '' du projet. Cette fois, je l'ai nommé `ʻanime_spider.py
.
Le produit fini ressemble à ceci:
anime_spider.py
import scrapy
class AnimeSpider(scrapy.Spider):
name = "anime"
start_urls = [
'https://www.anikore.jp/chronicle/2016/winter/'
]
def parse(self, response):
for anime in response.css('div.animeSearchResultBody'):
yield {
'title': anime.css('span.animeTitle a::text').extract_first(),
'score': anime.css('span.totalRank::text').extract_first()
}
next_page = response.css('a.next::attr(href)').extract_first()
if next_page is not None:
next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, callback=self.parse)
name = "anime"
C'est le nom de Spider. Lorsque vous effectuez un grattage, utilisez le nom déclaré ici comme suit.
% scrapy crawl anime
start_urls = [
'https://www.anikore.jp/chronicle/2016/winter/'
]
Il s'agit de l'URL qui sera le point de départ de l'exploration. Cette fois, je veux obtenir une liste des animations d'hiver 2016, donc je la déclare en tête de l'animation d'hiver 2016.
Le grattage et l'exploration sont effectués dans une fonction appelée parse (). Ci-dessous, la partie grattage.
for anime in response.css('div.animeSearchResultBody'):
yield {
'title': anime.css('span.animeTitle a::text').extract_first(),
'score': anime.css('span.totalRank::text').extract_first()
}
Dans Scrapy, vous pouvez accéder aux données avec css et xpath, mais cette fois je l'ai écrit avec css.
Sur ce site, chaque description de l'animation était séparée par la balise div
de la classe ```animeSearchResultBody``, donc les informations de toutes les animations affichées sur la page sont acquises comme suit. Je vais.
response.css('div.animeSearchResultBody')
Je ne veux que le titre et l'évaluation globale des informations d'animation extraites, je vais donc les extraire comme suit.
yield {
'title': anime.css('span.animeTitle a::text').extract_first(),
'score': anime.css('span.totalRank::text').extract_first()
}
ʻExtract_first ()
ʻextrait le premier élément.
anime.css('span.animeTitle a::text')[0].extract()
Vous pouvez également y accéder par indice en tant que, mais je l'utilise car il empêche les erreurs d'index et renvoie None.
L'exploration est effectuée aux endroits suivants.
next_page = response.css('a.next::attr(href)').extract_first()
if next_page is not None:
next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, callback=self.parse)
L'URL de la page suivante est créée en spécifiant la chaîne de caractères href du bouton Suivant. En appelant la fonction parse () de manière récursive, toutes les pages seront explorées jusqu'à ce qu'il n'y ait plus de pages.
Enfin, exécutons le programme. J'ai introduit la commande d'exécution dans "Nom de l'araignée", mais j'ajouterai une option et la sortirai sous forme de fichier au format json. Tapez la commande suivante sous le répertoire du projet.
% scrapy crawl anime -o anime.json
J'ai obtenu le titre et la note globale de l'anime d'hiver 2016.
Nous avons livré une vidéo qui explique brièvement Scrapy. Ici, nous grattons en utilisant XPath.
"Scrapy: Collectez automatiquement des informations sur les pages WEB !! Exploration et scraping framework" https://www.youtube.com/watch?v=Zfcukqxvia0&t=3s
https://doc.scrapy.org/en/1.2/intro/tutorial.html https://ja.wikipedia.org/wiki/ウェブスクレイピング
Recommended Posts