Scrapy로 애니메이션 노래 가사 모으기.

6947 단어 ScrapyPython

개시하다


Scrapy라는 파이톤의 프로그램 라이브러리가 간단하고 쓰기 쉽다는 소문을 듣고 바로 사용해 보았다.

컨디션


안정적인 pyenv+anaconda(Python3)

수집된 데이터


애니메이션 노래 가사면 여기다 맡길까요?
이곳최신 추가곡 페이지에는 7월 31일부터 11월 30일까지 애니메이션 노래의 가사가 추가됐다.

프로그램 만들기


설치하다.


pip를 통해 설치할 수 있습니다.
$ pip install scrapy

프로젝트 작성


이름은 마음대로 정할 수 있다.이번에는 직접 교과서의 이름을 채택했다.
$ scrapy startproject aipa_commander

내용을 확인하다


초보자를 너무 새로 써서 안에 있는 서류가 무슨 뜻인지 전혀 모르겠다.
어쨌든 어느 정도 사용하기 전에 건드리지 마세요.

프로그램 작성


나 같은 초보자가 유일하게 조작하는 디렉터리
aipa_commander (최초 이름 항목 이름)/spiders/
여기서python의 스크립트 파일을 만듭니다.
반복적인 시도와 코딩을 거쳐 결국 이런 느낌으로 변했다.
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('./歌詞/{}.txt'.format(kashi[0]), 'w')
        for j in range(len(kashi)):
            file.write(kashi[j]+'\n')
        file.close()
단 몇 줄에 200곡의 가사를 한꺼번에 얻을 수 있다니 스캐피는 대단하다.
공식 강좌에 기재된 코드는 이미 매우 많이 참고했기 때문에 코드에 대한 설명은 매우 드물다
다만, 자신이 HTML과 CSS에 대한 지식이 없으면 가장 고전하는 것은response.xpath('//td[2]/a/@href') 또는 response.xpath('//pre/text()').extract()xpath의 지정입니다.
하지만 그런 나는 구세주 같은 기능을 갖췄다.$scrapy shell "URL"입력하면
셸 시작>>>sel.xpath('//td[2]/a/@href')이렇게 하면...[<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'>,
・・・以下省略
이렇게 하면 결과를 간단하게 확인할 수 있다.
셸을 사용하면 원하는 데이터를 하나하나 다시 쓸 필요 없이 간단하게 테스트를 진행할 수 있다.
이것은 정말 편리하기 때문에 학교의 초보자들은 반드시 잘 이용해야 한다.
만약 기회가 있다면, 나는 xpath를 지정할 때의 기술 방법을 쓸 것이다
이번에 사용했어요.xpath(//td[2]/a/@href)전체<td[2]><a>httpl://www표를 받다.xpath('//pre/text()').extract()모든 <pre>의 텍스트 부분만 가져옵니다.
이런 처리.

실행 결과

$ scrapy crawl kashi
(kashi 부분은name에서 지정한 키워드) 및
이런 느낌의 텍스트 파일 200개를 만들었다.

텍스트 파일의 내용은 다음과 같습니다.
이런 느낌(너무 길다)

끝말


생각보다 쉽게 모아서 감동적이었어요.
다음에도 그림을 시험해 보고 싶어요.

좋은 웹페이지 즐겨찾기