研究目的でデータの使用を許可されました。
ただCSV等のデータの形では提供されず、
勝手にサイトから落とす(要はこぴぺ)ように言われました。
ただかなり大規模なデータになるので、
クローラを作ろうと思っているのですが、
一番早い言語・方法を教えてください。
※EXCEL VBAと正規表現を使ったプログラムでは、よくページのロードが長くかかった時につっかえてしまって大変でした。
よろしくお願いいたします。
クローラそのものを自作しなければどうしても持って来られないデータ…
という訳ではないんですよね?GETHTMLWは試されましたか?
ええと、あなたの得意なプログラミング言語、OSが分からないので私だったらという回答になります
また、質問も微妙に曖昧なのでそれも考慮に入れてみます。
# コメントが開いていればまずそれを聞きたかったのですが、開いてない...
まず、前提条件として出力結果はCSV, 正規表現をサポートしている言語を
期待していると想定します。
> 勝手にサイトから落とす(要はこぴぺ)ように言われました。
というのは
1. 直接DBを検索できず、HTMLが返される
2. 直接DBを検索できる
ことで大きく異なってきます。
HTMLが返される場合、どうにかしてHTMLをDOM/SAXに変換する必要が出てきます
直接DBを検索できる場合、SQLさえ知っていればどうにでもできます。
次に
> 一番早い言語・方法を教えてください。
これは
1. 処理速度が速い
2. そのプログラム言語が比較的シンプルで覚えやすい
という解釈ができます。
ぶっちゃけ処理速度が速く開発環境が整備されている言語は私はJavaだと思います。
# C/C++は正規表現がアレなので...
また、コンパイル言語よりも多少処理速度が遅いけれど
try&errorで何度もデバッグができる言語は
Perl or PHPだと思います。(実は最近のPHPって良く分かってないけれど)
どれもDB接続&操作、DOM/SAX、CSV出力、正規表現には問題ない言語だと思います。
なお、EXCELは確かExcel2007以前は65536行のデータしか扱えないので
大量のデータの取り扱いは不便です。(6万件程度のデータならいいかもしれませんが)
ということで結論としては
・Java
・Perl
・PHP
ということになります。
上記の言語を知っていたら、その言語を使うことが無難でしょう。
少なくとも6万件を超えるような大量データは古いEXCELでは無理です。
また、6万件を超えるようなCSVは古いEXCELでは表示すらされません。
となると、自分でもDBを持つ必要があるかもしれませんね...
いろいろ記入していなくて申し訳ありません。
そうなんです、HTMLで返されます。
それぞれの長所短所を教えて頂きありがとうございました。
JAVAが早いんですね、
PHPはかじったことがあるのでその2つから選ぶことになりそうです。
ありがとうございます。
わざわざクローラーをつくる必要はありませんし、下手にクローラーを作ると逮捕されるようですので(Librahack事件)、既成ソフトの組み合わせで対応するのが無難かと思います。
Irvineフリー版で目的のHTMLファイルをダウンロードし、HC95を使ってCSV形式に変換してはいかがでしょう。
こういった質問が出るということは、スクリプト系の言語が苦手ってことですよね。
ページのダウンロードと、HTML のテーブルからデータを抽出するのを分けたらどうですか?
データをごっそり落とすのは、ダウンロード系のツールで。
ローカルのファイルとして落としたファイルからデータを抽出するのは VBA で。
なるほど。
ありがとうございます。
そのとおりスクリプト系は苦手です。
改行場所や
などの要素がどのようになっているのか分かりませんが、 落とした HTML の
| を \t へ置換 | ||
を文字列0の空文字へ置換 ( | |||
が削除されます) | |||
を文字列0の空文字へ置換 ( | |||
が削除されます) これでタブ区切りのファイルが出来ます。 csv にしたいのであれば、\t を , へ置換してください。 |
ExcelのWebクエリ機能を使うのはどうでしょうか。
≫ エクセルのWebクエリを使って動的にデータを取得する方法≫ Weblet
URLを指定して、テーブルをExcelシートに取り込む機能です。
URLは、「https://www.ris-asia.com/rakutensec/quote.jsp?ric=["クエリパラメータ名", "ダイアログメッセージ001"].T&c=ja&p=quote&c=ja&ind=1」のように、一部をパラメータで指定して、特定のセルで指定した値とパラメータをリンクさせることができます。(セルの値を書き換えると、セルのパラメータを使ってテーブルが自動的に更新される)
例えば、セルに「7203」という値を入力すると、URL「https://www.ris-asia.com/rakutensec/quote.jsp?ric=7203.T&c=ja&p=quote&c=ja&ind=1」に自動的にアクセスして、自動的にテーブルをシートに展開してくれます。
ちょっとわかりにくい機能ではあるのですが、とりあえず上のページの通り操作すれば使い方はわかります。使い方がわかるとかなり便利な機能であることがわかっていただけると思います。
コメント欄が開かないので、已むを得ず2回目の書き込みいたします。
もし目的のデータが、単にHTMLのテーブル内に格納されているだけならば
deflationさんがお書きになっているHC95等を使って一気にCSVまで持って行くか、
或いは、正規表現を利用して、HTMLソースから目的のデータを引き抜いてくることが
容易にできそうなのであれば、online_pさんご推薦のSedが宜しいかと思います。
何れの場合でも、GETHTMLWやIrvine、wget等でHTMLソースを
ローカルの保存領域に落としてから処理を行なうべきです。
---
さて「これらの方法では対応できない」となった場合の話ですが、
「これを契機に本格的にプログラミングを学習したい、その時間も熱意もある」ということで
あるならば、dev_zer0さんが仰せの様にJava、Perl、PHP等を勉強されるのも良いかと思います。
しかし、私感に過ぎませんが、恐らくそういうことではないのではないでしょうか。
ご質問文の中に"EXCEL"が登場していることから、恐らくは
・普段からExcelをお使いになっている。
・しかしVBAは得意ではない。
・研究データの保存や処理は基本的にExcelで行なっている。
・大規模なデータとはいってもExcelで扱いきれない程大きくはない。
ということではないでしょうか。
もしそうであればExcel VBAを学ばれることをお奨めいたします。私自身も研究職ですが
高度な統計や精細なグラフ描画は他のアプリでやらせているものの、
データの保存・整理そのものはExcelで行なっており、
VBAの勉強が日々非常に役に立っています。実行速度では確かに劣りますが、
貴方が普段からExcelをお使いであるならば、
VBAを学ばれることにより受けられる恩恵は
JAVAやPerl、PHP等を勉強されるよりも格段に大きいと思います。
因みに、差し支えなければ、ですが、その
「とあるデータベース系のウェブサイト」の正体を明かしていただけませんか。
HC95やSedで対応できない場合には、何かお手伝いできることがあるかも知れませんので。
なるほどこちらはHPを丸ごとDLするソフトウェアですね。
ほしいデータがあるサイトは、テーブル形式でデータが記述されています。
私はこれをエクセルかCSVの形でほしいと思っています。
すみません、説明が足りませんでした。