[PYTHON] Collectionne les paroles d'Anison avec Scrapy

introduction

J'ai entendu une rumeur selon laquelle une bibliothèque Python appelée Scrapy est facile et facile à utiliser, alors j'ai immédiatement essayé de l'utiliser.

environnement

Pyenv + anaconda stable (Python3)

Données collectées

Laisser les paroles des chansons d'anime ici? Des chansons d'anime ajoutées entre le 31 juillet et le 30 novembre sur la page Dernières chansons supplémentaires ici J'ai décidé de collecter les paroles.

Procédure de création

Installation

Il peut être installé à partir de pip.``` $ pip install scrapy


## Création de projet
Vous pouvez décider du nom librement. Cette fois, le nom du tutoriel est adopté tel quel.```
$ scrapy startproject aipa_commander

Vérifiez le contenu

Je suis trop nouveau dans le scraping et je n'ai aucune idée de ce que signifie le contenu du fichier. Pour le moment, ne le touchez pas jusqu'à ce qu'il puisse être utilisé dans une certaine mesure.

Création de programme

Le seul annuaire géré par des débutants comme moi aipa_commander (premier nom du projet) / spiders / Créez un fichier de script python ici. À la suite du codage à travers divers essais et erreurs, le résultat final était comme ça.

get_kashi.py


# -*- coding: utf-8 -*-

import scrapy

class KashiSpider(scrapy.Spider):
    name = 'kashi'

    start_urls = ['http://www.jtw.zaq.ne.jp/animesong/tuika.html']

    custom_settings = {
        "DOWNLOAD_DELAY": 1,
    }

    def parse(self, response):
        for href in response.xpath('//td[2]/a/@href'):
            full_url = response.urljoin(href.extract())
            yield scrapy.Request(full_url, callback=self.parse_item)

    def parse_item(self, response):
        kashi = response.xpath('//pre/text()').extract()
        kashi = kashi[0].split('\n')
        file = open('./Paroles/{}.txt'.format(kashi[0]), 'w')
        for j in range(len(kashi)):
            file.write(kashi[j]+'\n')
        file.close()

Scrapy est incroyable car vous pouvez obtenir les paroles de 200 chansons à la fois en quelques lignes.

Je l'ai fait en référence au code dans Official Tutorial, donc je n'ai pas beaucoup d'explications sur le code ... ・ Cependant, ce avec quoi j'ai le plus lutté, c'est que je n'avais aucune connaissance du HTML et du CSS.

response.xpath('//td[2]/a/@href')Et réponse.xpath('//pre/text()').extract()


 Spécifier xpath tel que.

 Cependant, une telle fonction comme un sauveur était préparée pour moi.
```$scrapy shell "url"```
 Quand vous entrez
 Shell démarre

#### **`>>>sel.xpath('//td[2]/a/@href')`**

Et courir

[<Selector xpath='//td[2]/a/@href' data='ku/qualidea/brave.html'>,


 <Selector xpath='//td[2]/a/@href' data='ku/qualidea/axxxis.html'>,
 <Selector xpath='//td[2]/a/@href' data='ku/qualidea/gravity.html'>,
 <Selector xpath='//td[2]/a/@href' data='ku/qualidea/yakusoku.html'>,
 <Selector xpath='//td[2]/a/@href' data='ku/qualidea/clever.html'>,
 <Selector xpath='//td[2]/a/@href' data='to/drefes/pleasure.html'>,
・ ・ ・ Omis ci-dessous

Le résultat peut être facilement confirmé de cette manière. En utilisant Shell, vous pouvez facilement essayer d'obtenir les données souhaitées sans avoir à réécrire le script. C'est vraiment pratique, donc il a certainement été utilisé par les débutants en grattage.

J'écrirai sur la méthode de description lors de la spécification de xpath s'il y a une opportunité, J'ai utilisé cette fois xpath(//td[2]/a/@href) Obtient uniquement httpl: // www ~ dans `<a>` in all `` <td [2]> `.

xpath('//pre/text()').extract()


 Obtient uniquement la partie de texte dans tout `` <pre> ''.
 C'est un processus appelé.

# Résultat d'exécution

$ scrapy crawl kashi

 Et exécutez (la partie kashi est le mot-clé spécifié dans le nom)
 200 fichiers texte comme celui-ci ont été générés.
 ![スクリーンショット 2016-12-14 0.20.23.png](https://qiita-image-store.s3.amazonaws.com/0/125193/b660612a-0d67-1311-5238-ecb093b06b15.png)

 Le contenu du fichier texte
 Comme ça (parce que c'est long, ça en fait partie)
 ![スクリーンショット 2016-12-14 0.23.52.png](https://qiita-image-store.s3.amazonaws.com/0/125193/053df284-92ce-a9fa-9c99-e3c6d0020d97.png)

# en conclusion
 J'ai été impressionné car il était plus facile à collectionner que je ne l'avais imaginé.
 La prochaine fois, j'aimerais l'essayer avec des images.


Recommended Posts

Collectionne les paroles d'Anison avec Scrapy
Redémarrez avec Scrapy
[Analyse vocale] Collectez des données sur le chant des oiseaux avec xeno-canto
Collectez les informations de latitude / longitude du magasin avec scrapy + splash ②
Collectez les informations de latitude / longitude du magasin avec scrapy + splash ①
Grattage avec coquille tremblante
Problèmes lors de l'installation de Scrapy
Grattage festif avec Python, scrapy
Grattage Web facile avec Scrapy
Détection de visage d'anime avec OpenCV