単純なものとして、BeautifulSoupを使ったHTML解析で
Googleの表示順位を取得するスクリプトを作ってみた。
んだから、もちろんBeautifulSoupと初期設定は必須。
そして、もちろんノンオブジェクト指向。
設定で指定した検索クエリ(q)を使用し、
Googleで検索結果を取得。
その中からURL(s)を発見したら表示するというもの。
単純なものとして、BeautifulSoupを使ったHTML解析で
Googleの表示順位を取得するスクリプトを作ってみた。
んだから、もちろんBeautifulSoupと初期設定は必須。
そして、もちろんノンオブジェクト指向。
設定で指定した検索クエリ(q)を使用し、
Googleで検索結果を取得。
その中からURL(s)を発見したら表示するというもの。
BeautifulSoupが素晴らしいので
他にあまり解説サイトもないし、
簡単に使えそうなものを羅列してみた。
ただしデフォルトエンコーディングを設定している事が前提。
BeautifulSoupに渡されたHTMLは、
utf-8に文字コードを変換され自動で綺麗に生成しなおされる。
prettify()を使用すると、綺麗なソースに生成しなおされる。
※BeautifulSoup内で処理される場合は、このソースが元になる。
壊れたタグを修復という訳ではなさそうだが
改行やインデントを作り直してくれる。
Webアプリケーションとしても、かなり使えそう。
urllib2, cookielibを使用し、某管理画面にログインするが
セッションが保持できず、格闘すること数日。。。
苦戦した末、やっと行き着いた答えは
ヘッダが足りなかった事。。。。
keep-aliveという、セッションを保持させる感じの
ブラウザの機能らしいのだが、urllib2には現状では搭載されておらず
Connection: keep-alive
というヘッダは吐き出さない。
んで、付記するように
add_headerやaddheadersなど試みるが、
これはUAしか変更できないのか効果なし。
結局httplibを使用して、無理やりヘッダを作ってあげるしか思いつかなかった。
目的のページへは、ヘッダを吐き出すだけで、簡単にログインに成功した。
Keep-Aliveを保持するには、HTTPConnectionをCloseせずに
そのまま次のリクエストを送信するだけでいい。
ただし、リクエストした後には、
必ずread()を実行しなければエラーを吐く。
まぁ、普通ではあまりない仕様だと思うが
cookielibが、うまく挙動しない場合は
ブラウザが吐き出すリクエストヘッダと同じように
変更してみるのも良いだろう。
以下が、そのスクリプト。
cookielibというモジュールを使うと良いらしいが
同梱されるのは、python2.4からだそうだ。
日本Pythonユーザ会から最新版をダウンロードし、アップデートしてみた。
いちいちパスを通しなおすのが面倒なので
インストール先はC:\Python
現時点では、日本語環境対応版が無いようだ。と思ったが
2.4以降くらいから標準で日本語にも対応しているらしい。
ちなみにリダイレクト(Location:)は、勝手にやってしまうみたいなので注意。
やり方的には、次の通りで一応できた。
POSTする事自体は結構簡単っぽい。
urllibをimportしてエンコードしたパラメタを持ってリクエスト。