最も簡単なWebScraping(ウェブスクレイピング)について 〜 環境設定周りで面倒だったが仕方ない

【概要】
スクレイピングするためのコードは2行程度で終わるが、環境設定周りで色々と面倒だったというお話
・WEBスクレイピングをする際には「とりあえずpandasで取得してみて取れたらラッキー。駄目だったら頑張る」というのが良さそう。

【詳細】
スクレイピングなんてこれまでウンザリするほどやって来ているのに、いつも忘れるマンです。
このエントリーも全く目新しいものは無い。忘れやすい自分のための単なる備忘録。このブログ、全部そうだけどな。

ご存知の通り、やり方は色々ある。
2年も前になるが、当時はJavaを使わなければならない制約もあり、この時はJava+Jsoupでやっていたらしい

だけど、今時そんな面倒なことはやりたくない*1
コンパイラ型言語ではなくインタープリタ型言語で。そして今回はPythonで。

Pythonでもやり方は幾つかあって、最初は(発想が古いので)jQuery的にやれるBeautiful Soupを使おうと思ったがセレクタ書きたくない。

そこで最初に一度は試してみたいのが、pandas。
一発で必要な情報が取得できるとは限らないが、取得できたらラッキー。2行で終わる
ここにも書いている

import pandas

urlString = "スクレイピング対象のWEBサイトのURL"
result = pandas.io.html.read_html(urlString)

print result

これで終わるはずが、エラー。。。

AttributeError: 'module' object has no attribute 'html'

ぐぐったら、このblogが出てきたが、今回の原因はこれではなかった。
当方は、Beautiful Soupではなく、pandasでやろうとしているので。
別のPC(PyCharm+Python2.7系)では動いたんだけどねぇ。

結局、pandasのバージョンを最新にしたら本エラーは消えた。
必要なライブラリのimportやupgradeは以前書いた「PyCharmで必要なライブラリをimportする方法」を参照。

しかし、一難去って、また一難。。。
今度はこれ。

LookupError: unknown encoding: windows-31j

これは以前も遭遇したのですぐに解決。
Setting→Editor→File Encodingにて、Project Encodingを確認すると、windows-31Jになっていた。
UTF-8に変更
して終了。

【まとめ】
結局、スクレイピングするためのコードは2行程度で終わるが、環境設定周りで色々と面倒だったというお話でした。

ps
終わってみれば簡単。
ソースはこんな感じで、yahoo financeからコロプラの時系列データ(株価)を取得できる。

import pandas

urlString = "http://stocks.finance.yahoo.co.jp/stocks/history/?code=3668.T"
result = pandas.io.html.read_html(urlString)

print result

結果は、コンソールへの出力結果をそのまま貼り付けるとこんな感じ。
下記結果を見ても分かる通り、欲しい情報は取れているが、若干余計な情報も取れている。
逆にいうと、WEBサイトの構造によっては欲しい情報が取れない可能性もあるので、そういう場合は別の手段を使うか、少し手をいれるかしなければならないはず。
従って、WEBスクレイピングをする際には「とりあえずpandasで取得してみて取れたらラッキー。駄目だったら頑張る」というのが良さそう

D:\Python27\python.exe D:/dev/DataAnalysis/TimeSeries/Numbers/WebScraping.py
[ 0 1 2 3
0 (株)コロプラ NaN 2396 前日比-10(-0.42%), 0 1 2 3 4 5 6
0 日付 始値 高値 安値 終値 出来高 調整後終値*
1 2015年12月30日 2412 2418 2385 2396 367500 2396
2 2015年12月29日 2366 2425 2355 2406 466700 2406
3 2015年12月28日 2375 2432 2375 2397 731900 2397
4 2015年12月25日 2351 2406 2336 2366 930000 2366
5 2015年12月24日 2462 2482 2366 2387 960900 2387
6 2015年12月22日 2473 2491 2456 2457 760900 2457
7 2015年12月21日 2525 2540 2461 2473 859700 2473
8 2015年12月18日 2620 2636 2545 2553 1229700 2553
9 2015年12月17日 2600 2624 2576 2590 1110200 2590
10 2015年12月16日 2570 2584 2527 2544 686900 2544
11 2015年12月15日 2576 2628 2503 2515 1153600 2515
12 2015年12月14日 2520 2581 2520 2573 986900 2573
13 2015年12月11日 2532 2596 2532 2555 599500 2555
14 2015年12月10日 2564 2599 2541 2562 996900 2562
15 2015年12月9日 2629 2668 2576 2589 924700 2589
16 2015年12月8日 2659 2676 2601 2614 1450400 2614
17 2015年12月7日 2647 2730 2641 2663 2747200 2663
18 2015年12月4日 2583 2647 2575 2582 1482200 2582
19 2015年12月3日 2582 2661 2558 2608 2211800 2608
20 2015年12月2日 2454 2599 2453 2592 2370600 2592, 0 \
0 値上がり率2326社 1. トレイダH+26.39% 2. インフォテ+21.13% 3. ...

1
0 値下がり率1096社 1. アークン-14.43% 2. サハダイヤ-10.00% 3. ア... ]

Process finished with exit code 0

*1:もちろん業務上の様々な制約がある場合は仕方がない