ほんじゃらねっと

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

Node.jsでテレビの映画放映情報をWebスクレイピングしてSlackに通知する

最近素晴らしいことに家族内でSlackを使ってやりとりするようになった。

せっかくなので何かボット的なものを作ろう、ということで

昔Clojureで作った、

「映画情報をスクレイピングして通知する」スクリプトのNode.js版を作って、

定期的にSlackに通知するようにしてみたい。

blog.honjala.net

続きを読む

忙しいけど映画は観たい人のために、テレビ映画放映情報チェックして通知してくれるスクリプト

f:id:piro_suke:20160722000409j:plain

映画鑑賞は割と好きなのだけど、

なかなか映画館にはいけないし、

DVDを借りてもレンタル中に観る時間が取れるとは限らないし、

ということでもっぱらテレビで面白そうな映画をやってたら録画して

時間のある時に観ている。

しかしそうそうテレビ欄をチェックしているわけでもないので、

気づいたら観たかった映画が昨日放映されてて悔しがる、なんてことがよくある。

放映予定の映画をまとめて確認する方法はないのか、と探してみたら

良いページが見つかった。

続きを読む

Node.jsでWebサイトの更新チェックを自動化する

f:id:piro_suke:20160501015354j:plain

特定のWebサイトを定期的にチェックして特定のキーワードが含まれていたら

通知してくれる仕組みを1つ覚えておくと色々重宝する。

例えば

会社に社員用Webサイトがあるなら、

(そしてそのサイトがRSSもメール通知も提供してないなら)

そこに「重要」とか「人事」とかのキーワードを含む記事が投稿された時に

通知を受け取れるようにしておけば、

いちいちサイトをチェックしにいかなくても

逃さず確認できる。

また、Webスクレイピングする方法を覚えておけば、

通知を受け取る以外にも、

画面キャプチャの撮影や画像やテキストの収集を

自動化したり、作成したWebシステムの画面テストを行う、

等の応用もしやすくなる。

今回は Node.js + Grunt + cheerio-httpcli を使用して

手軽にWebサイトのデータをチェックする方法を紹介する。

続きを読む

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スクレイピング&クローリング-オープンデータ時代の収集・整形テクニック

CentOSのPython2.7環境にScrapyをインストールするまで

ひとつPythonでWebスクレイピングでもやってみようかとScrapyVPS環境に入れてみたところ、インストールするだけで手間取ってしまった。

環境はPython2.7.3で、インストールしてから特に何も設定していない状態。

本サイトに書いてある通り、まずは

pip install scrapy

を実行してみた。

するとUnicodeDecodeErrorが発生する。 これはよくあるPythonの初期設定の問題なので、 /usr/local/lib/python2.7/site-packages/sitecustomize.py を作成して、下記の内容を書いて保存しておく。

import sys
sys.setdefaultencoding('utf-8')

再度pipを実行すると、またエラー。どうやらlxmlがはいっていないらしい。

pip install lxml

エラー。必要なライブラリが足りないらしい。

# yum install libxml2* libxslt*
pip install lxml

成功。でもscrapyのインストールは失敗。 cffiが見つからない、というエラーが出ている。

sudo yum install libffi*
pip install scrapy

これでようやくインストール成功。 もう寝る。続きは明日やる。

パーフェクトPython

パーフェクトPython