ほんじゃらねっと

ダイエット中プログラマのブログ

Python+ScrapyでWeb上のリストからデータを抽出する

昨日の続きでScrapyをさわる。

ちなみに、昨日Linux環境にインストールする時は苦労したが、 今日Windows環境にpipでScrapyをインストールしてみたら、 何ひとつひっかからずにインストールが完了した。

ともあれ、ようやくScrapyをインストールできたので、 試しにWebサイトのページからデータを抽出してみる。

毎週楽しみにしているトラベリックスの番組内容一覧を取得してみた。 ここは履歴のみ掲載されているけど、同じようなスクリプトを使って 次週の放送予定を取得する、みたいなこともできそう。

放送回、放送日、タイトル、詳細ページのURLを取得して出力する。

travelix_spider.py

import scrapy

class TravelixSpider(scrapy.Spider):
    name = 'travelix_spider'
    start_urls = ['http://www.bs4.jp/document/travelix3/onair/index.html']

    def parse(self, response):
        for table in response.xpath('//table'):
            row = table.xpath('tr/td')
            if len(row) == 4:
                num = row[0].xpath('text()').extract_first()
                date = row[1].xpath('text()').extract_first()
                title_link = row[2].xpath('a')
                url = title_link.xpath('@href').extract_first()
                title = title_link.xpath('text()').extract_first()
                print 'num: %s, date: %s, url: %s, title: %s' % (num, date, url, title,)

実行は、scrapyコマンドを使用する。

scrapy runspider travelix_spider.py

ドキュメントをちゃんと読んだらもう少し洗練された コードにできるかな?

スクレイピングを使いこなせば APIで提供されていないデータや、HTMLベースでしか存在しないデータを データベース化する役に立つので、データ収集・抽出ツールとして 押さえておく価値はありそうです。

実践 Webスクレイピング&クローリング-オープンデータ時代の収集・整形テクニック

実践 Webスクレイピング&クローリング-オープンデータ時代の収集・整形テクニック