easy_installを使って、mechanize for Pythonを試してみる
ネットをぼ〜っと眺めていると、Python版のmechanizeってのがあるそうで。
そういや、自分、以前ブクマしたっけな?
どんなものか、ちょっと試してみる事にします。
念の為、本家ページの説明を…。
…英語なんてわかんないので、機械翻訳にかけちゃう。
要するに、
- お奨めは、easy_installだよ。
- だけど、昔の'python setup.py install'方式もサポートしているよ。
- 後、ClientFormライブラリを使用しているよ。
って事みたいです。
んじゃぁ、easy_installを入れます。
(以前入れたと思ったんですが、入ってませんでした。あれぇ?)
- EasyInstall - The PEAK Developers' Center
http://peak.telecommunity.com/DevCenter/EasyInstall#downloading-and-installing-a-package
やる事は簡単で、ez_setup.pyってファイルをダウンロードして、実行するだけです。
すると、Scriptsフォルダに、easy_install.exeが出来上がります。
F:\Wacky\Test\python>python ez_setup.py
Downloading http://cheeseshop.python.org/packages/2.4/s/setuptools/setuptools-0.6c1-py2.4.egg
Processing setuptools-0.6c1-py2.4.egg
creating c:\tool2\python24\lib\site-packages\setuptools-0.6c1-py2.4.egg
Extracting setuptools-0.6c1-py2.4.egg to c:\tool2\python24\lib\site-packages
Adding setuptools 0.6c1 to easy-install.pth file
Installing easy_install-script.py script to C:\tool2\Python24\Scripts
Installing easy_install.exe script to C:\tool2\Python24\Scripts
Installing easy_install-2.4-script.py script to C:\tool2\Python24\Scripts
Installing easy_install-2.4.exe script to C:\tool2\Python24\Scripts
Installed c:\tool2\python24\lib\site-packages\setuptools-0.6c1-py2.4.egg
Processing dependencies for setuptools==0.6c1
C:\tool2\Python24\Scripts>dir easy*.*
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 4065-FD4A です
C:\tool2\Python24\Scripts のディレクトリ
2006/08/06 16:19 310 easy_install-2.4-script.py
2006/08/06 16:19 6,144 easy_install-2.4.exe
2006/08/06 16:19 302 easy_install-script.py
2006/08/06 16:19 6,144 easy_install.exe
4 個のファイル 12,900 バイト
0 個のディレクトリ 83,616,264,192 バイトの空き領域
では、mechanizeを入れます。
本家ページの推奨である、'easy_install mechanize'って記述に従ってみます。
F:\Wacky\Test\python>easy_install mechanize Searching for mechanize Reading http://www.python.org/pypi/mechanize/ Reading http://wwwsearch.sourceforge.net/mechanize/ Reading http://www.python.org/pypi/mechanize/0.1.2b Best match: mechanize 0.1.2b Downloading http://wwwsearch.sourceforge.net/mechanize/src/mechanize-0.1.2b.zip Processing mechanize-0.1.2b.zip Running mechanize-0.1.2b\setup.py -q bdist_egg --dist-dir c:\docume~1\xxx\locals~1\temp\easy_install-q1ladt\mechanize-0.1.2b\egg-dist-tmp-6exufd warning: no files found matching '0.1.0-changes.txt' Adding mechanize 0.1.2b to easy-install.pth file Installed c:\tool2\python24\lib\site-packages\mechanize-0.1.2b-py2.4.egg Processing dependencies for mechanize Searching for ClientForm==dev,>=0.2.2 Reading http://www.python.org/pypi/ClientForm/ Reading http://wwwsearch.sourceforge.net/ClientForm/ Reading http://www.python.org/pypi/ClientForm/0.2.2 Best match: ClientForm 0.2.2 Downloading http://wwwsearch.sourceforge.net/ClientForm/src/ClientForm-0.2.2.zip Processing ClientForm-0.2.2.zip Running ClientForm-0.2.2\setup.py -q bdist_egg --dist-dir c:\docume~1\xxx\locals~1\temp\easy_install-xnj4qa\ClientForm-0.2.2\egg-dist-tmp-xfj60p Adding clientform 0.2.2 to easy-install.pth file Installed c:\tool2\python24\lib\site-packages\clientform-0.2.2-py2.4.egg
メッセージを眺めていると、どうもClientFormライブラリを自動的にダウンロードしてインストールしているようです。
なるほど、依存性を自動チェックして入れてくれるようですね。
早速、mechanizeを使ってみます。
F:\Wacky\Test\python>ipython
F:\Wacky\Test\python>python C:\tool2\Python24\Scripts\ipython
Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.
IPython 0.7.2 -- An enhanced Interactive Python.
? -> Introduction to IPython's features.
%magic -> Information about IPython's 'magic' % functions.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
In [1]: import re
In [2]: from mechanize import Browser
In [3]: br = Browser()
In [4]: br.
br.__doc__ br.add_proxy_password br.request
br.__getattr__ br.addheaders br.request_class
br.__init__ br.back br.response
br.__module__ br.clear_history br.retrieve
br.__str__ br.click br.select_form
br._add_referer_header br.click_link br.set_cookiejar
br._any_request br.close br.set_debug_http
br._any_response br.default_features br.set_debug_redirects
br._call_chain br.default_others br.set_debug_responses
br._factory br.default_schemes br.set_handle_equiv
br._filter_links br.encoding br.set_handle_gzip
br._handle_referer br.error br.set_handle_redirect
br._handler_index_valid br.find_link br.set_handle_referer
br._history br.follow_link br.set_handle_refresh
br._maybe_reindex_handlers br.form br.set_handle_robots
br._mech_open br.forms br.set_handled_schemes
br._open br.geturl br.set_password_manager
br._password_manager br.handle_error br.set_proxies
br._proxy_password_manager br.handle_open br.set_proxy_password_manager
br._replace_handler br.handler_classes br.set_response
br._request br.handlers br.submit
br._response br.links br.title
br._set_handler br.open br.viewing_html
br._ua_handlers br.process_request br.__class__
br.add_handler br.process_response
br.add_password br.reload
In [4]: br.open('http://www.google.com/')
Out[4]: <response_seek_wrapper at 0xf7d8f0 whose wrapped object = <closeable_response at 0xf7d8c8 whose fp = <socket._fileobject object at 0x00F79A40>>>
In [6]: br.title()
Out[6]: 'Google'
In [7]: br.viewing_html()
Out[7]: True
In [10]: for i in br.links():
....: print i
....:
....:
Link(base_url='http://www.google.co.jp/', url='/url?sa=p&pref=ig&pval=3&q=http://www.google.co.jp/ig%3Fhl%3Dja', text='\x83p\x81[\x83\\\x83i\x83\x89\x83C\x83Y\x83h \x83z\x81[\x83\x80', tag='a', attrs=[('href', '/url?sa=p&pref=ig&pval=3&q=http://www.google.co.jp/ig%3Fhl%3Dja')])
...結構簡単にアクセスできるもんですね。
と、ここまで来て、mechanizeのソースを眺めてみようと思い、'lib'フォルダ下のmechanize.pyを探してみましたが、どうも見つかりません。
強いて挙げるならば、lib/site-packages フォルダに、以下のファイルがあります。
C:\tool2\Python24\Lib\site-packages>dir *.egg ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4065-FD4A です C:\tool2\Python24\Lib\site-packages のディレクトリ 2006/08/06 16:31 68,591 clientform-0.2.2-py2.4.egg 2006/08/06 16:31 171,193 mechanize-0.1.2b-py2.4.egg 2006/08/06 16:19 <DIR> setuptools-0.6c1-py2.4.egg
そういや、eggファイルって、中身ZIPファイルだったっけなぁ。と思い出し、一応チェックします。
Cygwinのunzipコマンドを使って、ファイルを列挙…。
$ unzip -l mechanize-0.1.2b-py2.4.egg
Archive: mechanize-0.1.2b-py2.4.egg
Length Date Time Name
-------- ---- ---- ----
1 08-06-06 16:31 EGG-INFO/dependency_links.txt
2659 08-06-06 16:31 EGG-INFO/PKG-INFO
24 08-06-06 16:31 EGG-INFO/requires.txt
1146 08-06-06 16:31 EGG-INFO/SOURCES.txt
10 08-06-06 16:31 EGG-INFO/top_level.txt
0 08-06-06 16:31 EGG-INFO/zip-safe
16975 08-06-06 16:31 mechanize/_auth.py
15855 08-06-06 16:31 mechanize/_auth.pyc
63289 08-06-06 16:31 mechanize/_clientcookie.py
54082 08-06-06 16:31 mechanize/_clientcookie.pyc
3291 08-06-06 16:31 mechanize/_gzip.py
4086 08-06-06 16:31 mechanize/_gzip.pyc
8122 08-06-06 16:31 mechanize/_headersutil.py
7939 08-06-06 16:31 mechanize/_headersutil.pyc
18981 08-06-06 16:31 mechanize/_html.py
18504 08-06-06 16:31 mechanize/_html.pyc
7189 08-06-06 16:31 mechanize/_lwpcookiejar.py
6580 08-06-06 16:31 mechanize/_lwpcookiejar.pyc
19979 08-06-06 16:31 mechanize/_mechanize.py
18499 08-06-06 16:31 mechanize/_mechanize.pyc
6249 08-06-06 16:31 mechanize/_mozillacookiejar.py
5261 08-06-06 16:31 mechanize/_mozillacookiejar.pyc
14692 08-06-06 16:31 mechanize/_msiecookiejar.py
12180 08-06-06 16:31 mechanize/_msiecookiejar.pyc
8922 08-06-06 16:31 mechanize/_opener.py
7239 08-06-06 16:31 mechanize/_opener.pyc
12473 08-06-06 16:31 mechanize/_pullparser.py
14495 08-06-06 16:31 mechanize/_pullparser.pyc
2294 08-06-06 16:31 mechanize/_request.py
2606 08-06-06 16:31 mechanize/_request.pyc
1378 08-06-06 16:31 mechanize/_urllib2.py
2590 08-06-06 16:31 mechanize/_urllib2.pyc
24840 08-06-06 16:31 mechanize/_urllib2_support.py
23690 08-06-06 16:31 mechanize/_urllib2_support.pyc
12338 08-06-06 16:31 mechanize/_useragent.py
10951 08-06-06 16:31 mechanize/_useragent.pyc
20523 08-06-06 16:31 mechanize/_util.py
20055 08-06-06 16:31 mechanize/_util.pyc
1245 08-06-06 16:31 mechanize/__init__.py
2083 08-06-06 16:31 mechanize/__init__.pyc
-------- -------
473315 40 filesはい、確かに、eggファイルは、中身ZIPファイルです。
と、ファイル一覧を眺めていると、lib/site-packagesに、easy-install.pthってファイルがあります。
$ cat easy-install.pth import sys; sys.__plen = len(sys.path) .\setuptools-0.6c1-py2.4.egg .\mechanize-0.1.2b-py2.4.egg .\clientform-0.2.2-py2.4.egg import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
なるほど、どうもeggファイルをライブラリにアタッチできるようにしているようですね。
ま〜、つまり、WindowsのZIPファイルを圧縮フォルダとして扱える機能みたいなもんでしょうか。
なんで、.egg拡張子を、適当なアーカイバに設定しておきました。
とりあえず、Archon2に設定してみたんですが、ちゃんと表示されます。ふむふむ。
ただ、ビューワを使うと拡張子がZIPでない悪影響が発生する模様。(テキストエディタにD&Dできますので、とりあえず無問題)
う〜む、もっと別のアーカイバを探すしかないかなぁ。