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.
Pyenv + anaconda stable (Python3)
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.
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
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.
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