secbeg’s log

作業メモです

scrapyでクローラーを動かしてみる

0.はじめに

scrapyでクローラーを動かしてみました。まずはブログページの情報を抜き出すような処理をさせてみました。

1.環境

2.インストール

# python -V
  • python-develのインストール
    Python のライブラリとヘッダーファイル)
# yum install python-devel
  • pipのインストール
# wget https://bootstrap.pypa.io/get-pip.py
# python get-pip.py
# pip -V
pip install scrapy

3.動作確認

  • シェルで
# scrapy shell http://secbeg.hatenablog.com/entry/2017/11/25/212249
>>> test = response.xpath('//title[1]')
>>> test
[<Selector xpath='//title[1]' data=u'<title>logstash-elasticsearh-kibana\u3067\u53d7\u4fe1\u30e1\u30fc'>]

文字コードの関係で日本語が文字化けしているが、とりあえずタイトルは取得はできているようです。

  • spyderの作成して
# scrapy startproject hatena
# cd hatena/hatena/spiders
# vi hatena.py

コードは下記のような感じ。とりあえず、ブログ二つのデータを取得するものを作成。参考にしたドキュメントは 「4.参考」に記載しています。

import scrapy


class QuotesSpider(scrapy.Spider):
    name = "hatena"

#クロールするURLを指定
    def start_requests(self):
        urls = [
            'http://secbeg.hatenablog.com/entry/2017/10/29/091351',
            'http://secbeg.hatenablog.com/entry/2017/11/18/172919',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

#取得したデータをファイル名を指定して保存する
    def parse(self, response):
        page = response.url.split("/")[-1]
        filename = 'hatena-%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s' % filename)

下記でプログラムを実行すると、

# scrapy crawl hatena

hatena-[記事番号]のファイルが作成されているはずです。

# ls
__init__.py  __init__.pyc  hatena-091351.html  hatena-172919.html  hatena.py  hatena.pyc

4.参考

qiita.com

qiita.com

Scrapy チュートリアル — Scrapy 1.2.2 ドキュメント