mechanizeを使ってマイミク全員に足跡を残すサンプル

久々に関東に行ってみる予定のbonlifeです。
さてさて、なんとなく便利そうだったのでPythonmechanizeを試してみました。手順は以下の通りです。

  1. easy_installのインストール (ファイルダウンロードして実行)
  2. mechanizeのインストール (easy_installを使って楽々インストール)
  3. コーディング (苦戦)
1. easy_installのインストール

まず、モジュールのインストールには、easy_installってのが便利だよ、ってのを表紙絵の評判がよくない「実践Python~文字列操作からWebアプリケーション開発まで」で読んだのを思い出して、試してみました。mechanize、easy_installの両方に言及している日記があったので、そちらを参考にさせていただきました。

やる事は簡単で、ez_setup.pyってファイルをダウンロードして、実行するだけです。
すると、Scriptsフォルダに、easy_install.exeが出来上がります。

Windowsで試したのですが、拡張子 .py にはpython.exeが関連付けられていたので、コマンドプロンプトを開いて、適当なフォルダで ez_setup.py を実行して少し待つだけでインストール完了。

C:\download_files>ez_setup.py

私の場合、C:\Python25\Scripts にeasy_install.exe(と関係するっぽいファイルたち)が出来てました。

2. mechanizeのインストール

続いて、mechanizeのインストールです。さっきインストールしたeasy_installを使います。C:\Python25\Scripts にパスを通しても良いかな、と思いつつ、C:\Python25\Scripts で作業。

C:\Python25\Scripts>easy_install mechanize

なにやら色々とメッセージ(探して、読んで、処理して)が出て、インストール完了。C:\Python25\Lib\site-packages\mechanize-0.1.6b-py2.5.egg ってのが本体っぽいです。

3. コーディング

最初はmechanizeとお友達になるためにIDLE使いながら色々と実験。で、なんだかんだ苦戦した後できたのが以下のスクリプトです。参考にさせていただいたのは、以下の2つのblogです。

練習として、ログイン、画面遷移があるものが良いなぁ、ということで、mixiのマイミク全員にあしあとを残すスクリプトを書いてみました。(オブジェクト指向な書き方になってないのは気にしない方向で。)

  • mixi_left_footprint.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from mechanize import Browser
import time

email = 'foo@bar.com'
password = 'hoge'

br = Browser()
br.set_handle_robots(False)

br.open('http://mixi.jp/')
br.select_form(nr=0)

br["email"] = email
br["password"] = password

br.submit()
br.follow_link(url="list_friend.pl")

next_page = unicode('次を表示', 'utf-8').encode(br.encoding())
my_mixi_link_list = []

while True:
    for link in br.links(url_regex="show_friend.pl\?id="):
         my_mixi_link_list.append(link)
    try:
        br.follow_link(text_regex=next_page)
    except:
        break

# print len(my_mixi_link_list)

for link in my_mixi_link_list:
    br.follow_link(link)
    print br.geturl()
    time.sleep(3)

mechanizeは、"cookie handling is ON by default"らしいので、Cookieのことも意識せずに使えて便利。最後の行でtime.sleepを入れてるのは、これをやらないと以下のようなメッセージの画面しか表示されなくなってしまうからです。

間隔を空けない連続的なページの遷移・更新を頻繁におこなわれていることが見
受けられましたので、一時的に操作を停止させていただきます。申し訳ございま
せんが、しばらくの間お待ちください。

あわわ、あわわですよ。10分ぐらい一覧、検索関係がこの画面になってしまう様子。time.sleep(3)なら今のところ大丈夫みたいですね。マイミクの数が多い人だと数分かかってしまいますが、まぁ、それは仕方がないということで。あしあと残してなんなのよ!とかそういうツッコミはなしの方向で。
気が向いたら、もう少し自分にとって役に立ちそうなものを作ってみようと思います。では、またアスタ!