PythonのクローラフレームワークScrapyを使ってみた(Mac OS X Maverics)
pythonでクローラを作成するためのフレームワークscrapyを使ってみました。
http://doc.scrapy.org/en/latest/index.html
これを使って下の情報をjsonで保存してみます。
http://www.google.co.jp/movies?near=%E6%B8%8B%E8%B0%B7
まずはscrapyのインストール
$ sudo pip install Scrapy
インストールが完了したら、早速プロジェクトを作成してitem.pyを編集します。
$ scrapy startproject movie_spider $ cd movie_spider $ vim movie_spider/items.py
items.pyにはサイトから取得するデータを格納するための変数を定義しておきます。
from scrapy.item import Item, Field class MovieSpiderItem(Item): theater = Field()
次にmovie_spider/spiders/MovieSpider.pyにサイトから情報を取得する処理を記述します。
from scrapy.spider import BaseSpider from scrapy.selector import HtmlXPathSelector from scrapy.http.request import Request from movie_spider.items import MovieSpiderItem class MovieSpider(BaseSpider): name = "google" allowed_domains = ["www.google.co.jp"] start_urls = ["http://www.google.co.jp/movies?near=%E6%B8%8B%E8%B0%B7"] def parse(self, response): hxs = HtmlXPathSelector(response) sites = hxs.select("//div[@class='theater']") items = [] for site in sites: item = MovieSpiderItem() item["theater"] = site.select('div/h2/a/text()').extract() items.append(item) for item in items: yield item
ここではclass名が"theater"のdiv要素を取得し、
その子要素から映画館の名前を出力します。
以下のように実行すると結果をmovie.jsonに保存します。
scrapy crawl google -o movie.json -t json
ソースコードはこちらで公開しています。
https://github.com/atsuya046/MovieSpider