2014年11月16日日曜日

Python でスクレイピングすると超快適な件

不動産賃貸物件の情報を横断的に見るサイトがない。
Suumo, Homes, エリッツ、、、色々見るのがめんどくさい。
お勉強ついでに自分でツールを作ってみる。

まずは住宅情報を集めるところから。
スクレイピングツールは Ruby Pythonいろいろあるが、
ここではお勉強のためプリミティブな方法で Python 使ってスクレイピングをしてみる。

1. HTTP リクエストを発行してWebページを取得
2. 取得したウェブページをパース
3. データベースにためる

といった流れ。


1. HTTP リクエストを発行してWebページを取得

スクリプト的に徘徊したいので、何かしらのコード実装が必要。
学習コストが低い Python を使ってみます。
HTTP リクエスト用のAPIとしては、
デフォルトで urllib とかいうのがあるけど、それだと使いづらいので、
requests と呼ばれるパッケージをインストールします。
 $ pip install requests 
です。
インストールに失敗するときはこのへんはググラビリティ(ググって解決できること)高めなので頑張って解決してください。大体依存するライブラリがインストールされていないとかで引っかかります。

requests 使うとたった二行で HTTP リクエストできてしまいます。
$ import requests
$ response = requests.get(url)

のちのち問題になるのは、「URL をどうやって決めるのか」という部分。
徘徊の仕方は後日考えることとします。
ガッツリやるなら Scrapy がいいらしいですよ。
ページ徘徊の深さとかも簡単に調整できるみたいよ。

2. 取得したウェブページをパース

HTTP リクエストを発行してページ取得はできるようになった。
その次は取得したウェブページから必要な情報を抜き取る処理です。
データ取得とパース処理には依存関係がないので、
ぶっちゃけ違う言語でもよいです。このへんは分業できる部分かと。

様々なソフトウェアスタックがそれぞれ独立して疎結合でメッセージングして協働しているように、
ページ取得・パース・データ解析は独立性の高い処理なので、
それぞれ得意な方法でやるといいと思います。

ここでは「速く」「小規模に」トライアンドエラーしたいので、一貫して Python にします。

必要な情報を抜き取るためには、ソースコードのタグ要素を特定します。
適当なページを開いて右クリック + 「ページのソースを表示」するのもいいけど、
cmd + opt で Chrome DevTools を開いて、
ソースコード側にフォーカスを当てた状態で Ctrl + F すると、
ページの表示とコードがシームレスに一覧できて素晴らしいです。
サクッとソースコード側を検索して、ほしい情報の箇所のアタリをつけてください。
見つかったら欲しい情報に該当するソースコードの箇所を右クリックして、
「Copy XPath」
を選択して選択箇所へのXPathが取得できます、あら便利。
あとは以下のページで言われるがままに実装するだけです。


【早い者勝ち!】 あなたのお名前、残ってる?

とりあえず簡単のため、ウェブページのリンク部分のテキストだけ抜き取って表示してみました。
lxml は依存関係にあるライブラリが結構あるので
将来的には XPath でうまくパスを設定しなきゃならないですね。
今日はここまで。

0 件のコメント:

コメントを投稿