読者です 読者をやめる 読者になる 読者になる

bloggerをスクレイプ

Programming/Python
ある企業の面接の持ち物に「自分を表す101のキーワード」を紙媒体で持ってこいというものがあった。
零から101個書きだすのはとても大変そうなので、自分のブログから頻出語を取り出してみるとかどうかな?とか思った。名刺以外でも「なのだけれども」とか口調も抽出してみたりできれば面白いかも?と思ったのである。Twitter解析ツールみたいなのはよく見るけど、Twitterには大したことも書いてない。ブログの方はあるていど本気で書いているので何か見えてくるのではないかと思ったのである。
(この記事はあくまでこの処理を行う方法についてなので先に結果を言うと、全く役に立つ結果は得られなかった…。)



そこでとりあえずこのブログの全文を取得しなければならない。このとき気がついたのだが、bloggerが変なのかそれとも使ってるテンプレートが変なのか、URLのルールがわからない。記事ごとのパーマネントリンクの名づけ方はある程度把握しており、日本語タイトルの記事は無味乾燥な番号、タイトルに英字アルファベット列が含まれているとそれが含まれたものになるというのはひと目でわかる。問題はトップページから「前の投稿」をたどっていく際のURLルールだ。
期待していたのはwww.unkoblog.com/の次のページはwww.unkoblog.com/?p=1、さらに次はwww.unkoblog.com/?p=2といったもの。これだったら最後のページのURLを調べてそこまで単純なループを回せばよい。
しかし、実際にトップページに表示されている「前の投稿」のリンクを調べてみると…
http://awakara.blogspot.jp/search?updated-max=2015-01-07T22:19:00%2B09:00&max-results=1
ハァ?といいたくなるくらい汚い。MUR大先輩の縦割れXXX並だ。

じゃあどうするかといえば、ページのHTML全文をとってきて「前の投稿」にあたるURLを発見した場合はそのURLで表される記事のHTML全文を持ってきて…というのを繰り返す。「前の投稿」自体にはまさしくといった感じのクラス名が付いているので探すのは簡単。

コードの質はともかくちゃちゃっと書いたのがこれ。一応Amazonのアフィリンクを貼るのに使っているamazletというのの生成した文言は消すようにしてある。

これ、コード自体は良くはないものの問題ないはずである。けどこれはWindowsで実行しても正しく実行できない。文字コードの問題なのか、「保存できない文字が含まれている」というエラーが出てしまう。43行目はそれ対策のはずなのだが、どうもうまくいっていないようだ。
結局Linux Mintの動いてるPCで実行して結果を持ってくるということになった。
Windows文字コードまわりはよくわかんなくて、特にWindows8からは今までのような「日本語版」といった日本語版は存在しない。「日本語版」Windows7とかはSJISで、日本語版以外のWindowsでの日本語表示はUTF-8だとかいろいろあったような気がするし、Windows8以降のはますますわからない。

早急にWindowsで改善してもらいたいポイントは画面の表示サイズをピクセル数依存にしてるところと、文字コードがよくわからない点。
ぶっちゃけまた自宅PCもMintにしてもいいような気がしてきたけど。