【Python】mechanizeでWEBスクレイピング【BeautifulSoup】

| 0件のコメント

Pythonでスクレイピング

今つくっているシステムでWEBスクレイピングの必要性があったので、Pythonを勉強中です。
PerlでもRubyでも良かったのですが機械学習系ライブラリの豊富さとNumpy, Pandasなども揃っているので決めました。
* perl/Rubyにも似た様なライブラリはあると思います。

[[amazon2][4797371595]]

BeautifulSoup

BeautifulSoupはHTML/XMLパーサーです。
セッション管理していないWEBサイトはこれだけで充分使えます。

環境はMacOS X 10.8.2です。

公式からtar.gzをゲット後展開してインストールするか,


$ sudo python setup.py install 

以下で直接インストールします。(すでに上で入れてました…)


$ sudo easy_install BeautifulSoup4
Searching for BeautifulSoup4
Best match: beautifulsoup4 4.1.3
Adding beautifulsoup4 4.1.3 to easy-install.pth file

mechanize

BeautifulSoupはパーサーなので認証を行うサイトの突破には不十分です。
mechanizeならセッションの保存などを自動的に行ってくれるので、認証系サイトのスクレイピングを行うことが可能です。


$ sudo easy_install mechanize
Searching for mechanize
Reading http://pypi.python.org/simple/mechanize/
Reading http://wwwsearch.sourceforge.net/mechanize/
Best match: mechanize 0.2.5
Downloading http://pypi.python.org/packages/source/m/mechanize/mechanize-0.2.5.tar.gz
Processing mechanize-0.2.5.tar.gz
Running mechanize-0.2.5/setup.py -q bdist_egg --dist-dir /tmp/easy_install-mAAKN4/mechanize-0.2.5/egg-dist-tmp-JgQmKq
Adding mechanize 0.2.5 to easy-install.pth file

mechanizeによるフォーム解析

フォームの情報を取得する例です。


br = mechanize.Browser()
br.open("https://www.google.co.jp")
print [form for form in br.forms()][0]

<f GET https://www.google.co.jp/search application/x-www-form-urlencoded
  
  
  
  
  
  
  

HTTPメソッドと入力できる情報が取得できます。
この情報を用いてログインID, パスワードを渡すようにします。

UnicodeDecodeError: ‘ascii’ …の対処

上記エラーの対処法。asciiからutf-8に変更する方法です。
/usr/lib/python2.7/site.pyのdef setencoding():の

encoding = “ascii” # Default value set by _PyUnicode_Init()
を encoding = “utf-8” に書き換えます。

Python2系は文字コードが混在しているのがちょっと難点。
主要なライブラリが3系に移行したらPython3に変えてもいいかもしれません。

コメントを残す

必須欄は * がついています