電子書籍の厳選無料作品が豊富!

ホームページのデータを収集してEXCELで表にしたいのですが、
ホームページのURLおよびHTMLソースは一定しているものの、
収集したいデータは数百ページもあり、いちいちソースを開いて、
探して抽出するのは非常に非効率で、途方にくれています。

一定の連番の持つURL(予め用意したURLリスト)を自動巡回して、
HTML内の一部のテキスト(行指定して1行~数行)を抽出するソフト探しています。
もちろんHTMLソースが一定の法則になっています。
(htmlタグは変わらないが、テキストとURLだけは違う・・・)

例えば、
 http://www.***.com/data/1255.html
 http://www.***.com/data/1256.html
 http://www.***.com/data/1428.html
のようにURLは一定していること。
個別のHTMLソースでは例えば、
18行目の・・・
『 <td width="100"><b><font size="-1">●●●●</font></b></td>』
 の●●●●だけを抽出するとか・・・
 これをCSVやウェブでテキストベースで表示できれば幸いです。

そのようなソフトはございますか?
よろしくお願いします。

A 回答 (6件)

下記リンクのプログラムで一応読めます。


あまり試験していないので、どの程度一般性があるのかは判りません。不具合があれば「補足」して下さい。

参考URL:http://homepage3.nifty.com/tokutou-syuppan/progr …
    • good
    • 0
この回答へのお礼

ありがとうございます。
新潟地震で被害に会い、動けない状況です。
落ち着きましたら、また質問させていただきます。

お礼日時:2004/11/13 12:10

補足回答有り難うございます。

しかしアプリケーションを具体化するにはもう少し不足があり(^^;
ともかく

>出来上がればぜひシェアウェアリリースしたいですね
ウーン、需要があれば公開する気はありますがフリーです。「ノウハウ提供したから . . . .」といわれたら困るなと思ったら

>なお個人的に利用したいだけなので権利関係は興味ありません
ということで、この件は問題なし。

>1.ある程度時間(例:30秒とか)経ったら、次のURLへ行くような感じが理想ですね。(結果では取得不可の数表示)

マルチスレッドの経験がないのでこの際チャレンジしてみたいと。本件に関していえば、要するにURLからの応答を待たずに次も問合わせるということです。出来るかな?

>2.一つのドメインかつ一定のURLパターン(同じHTML構造を持つページ)に限定する方が良いと思います。他のドメインや違うURLを指定すると、正規表現などパターンが崩れると思います。

ですから、予めパターン登録をして、「このURLはこのパターンに属する」みたいにURL登録をするのかなと考えています

>3.HTMLソースにある行の固定は必要ないと思います。ページによっては、ずれているケースがあると思います。

これは当然ですが、それでも「範囲を数行に絞れないだろうか?」ということです。数百、数千行になると、

>抽出する箇所の前後のタグを指定すれば拾えると思います。

が怪しくならないか?

>DB接続しているので、タグのパターンは変わらないと考えています

これで安全なのでしょうか?何しろ具体的な対象ページを見たことがないもので(^^;

>4.考えられます。

この質問も、数百、数千行も離れる可能性があるかというもので . . . .

>5.太文字とかは特にこだわりません。あくまでHTML上の文字を抽出するものです

エーと、「正規表現」そのものをお尋ねするつもりはありませんでした。ただNo.の補足回答で

>もしくは正規表現で、
><TD><b>100,000 円</b></TD></TR>

となっていたからです。これは

~/<TR><TD>現在の価格:<\/TD>
<TD><b>?[0-9]+[,]+?[0-9] 円<\/b><\/TD><\/TR>

みたいなことだったのでしょうか(スミマセン正規表現久し振りなので間違えているかも)

>巡回結果
>"http://page10.auctions.yahoo.co.jp/jp/auction/m5 … 円"
>"http://page3.auctions.yahoo.co.jp/jp/auction/c75 … 円"
>"http://page10.auctions.yahoo.co.jp/jp/auction/m5 … 円"
>・・・

巡回結果をリストに吐き出すのはイメージ的に馴染みません。発展性(ロボット的に探索を無人遂行、複数パターン同時探索etc.)を考えるとリストではワケワカになるからです。で、アクセスへの記録を考えています。これから必要なデータを抽出してエクセルへ送るのは簡単なことだと思います。この部分までアプリケーションに作り込むか?

アプリケーションの完成がお約束できないことを前提で申し訳ないが、ともかく具体的条件が明らかにならないと「試作」も出来ません。この「具体的」ということは、必ずしも現在oiranoiuさんが追いかけている物件を明らかにせよということではありません。たとえば上記「巡回結果」で試作しても問題ないのでしょうか?
    • good
    • 0
この回答へのお礼

すみません。
新潟地震で家の片付けで追われています。
回答までもうしばらくお待ちください。

お礼日時:2004/10/31 22:12

面白そうですね。

Webや文字列処理(正規表現)は不得手な分野なので興味が湧きます。取り敢えず複数URLを巡回してテキストをダウンロードする部分は見通しが付きました。

そこで
1.数百を見て行くと、途中に繋がらない所が有った場合、タイムアウトになるまで待っていると非常に長時間かかる可能性がある。並列処理(スレッド)にするべきか?

2.「ショッピングサイトの商品ページ、各地域の天気予報ページ、市町村の議会録」と例が挙げられていましたが、当然質の違いは見るところの違いを招くと思います。ウーン、URLに数種類の「属性」を付けて、それ毎に違う場所をサンプリングするのかな。

3.見る場所は少なくとも行で(数行以内に)固定なのでしょうか

4.見る場所の先頭位置からの距離(文字数、行数)はかなり多い(離れている)場合もあるのでしょうか

5.正規表現(検索)のパターンは(まさか)太字だけではないですよね

この回答への補足

毎度すみません・・・
そこまでやっていただけるとは非常に恐縮です。
出来上がればぜひシェアウェアリリースしたいですね。
なお個人的に利用したいだけなので権利関係は興味ありません。

さて、上記質問を回答いたします。

1.ある程度時間(例:30秒とか)経ったら、次のURLへ行くような感じが理想ですね。(結果では取得不可の数表示)

2.一つのドメインかつ一定のURLパターン(同じHTML構造を持つページ)に限定する方が良いと思います。他のドメインや違うURLを指定すると、正規表現などパターンが崩れると思います。

3.HTMLソースにある行の固定は必要ないと思います。ページによっては、ずれているケースがあると思います。抽出する箇所の前後のタグを指定すれば拾えると思います。(もちろんその箇所は数行にわたることがありますが、DB接続しているので、タグのパターンは変わらないと考えています)

4.考えられます。例えば、文章となると何行になるかはわかりません。ただ3番でお答えしたいように、HTMLではタグの完結(</a>のようなもの)はあるので、それが多い方が拾い安いと思います。

5.太文字とかは特にこだわりません。あくまでHTML上の文字を抽出するものです。

ご参考に正規表現のサイトを載せておきます。
http://www.mnet.ne.jp/~nakama/
書籍ではCGI等の書物はありますが、他ではオライリーの「spidering hacks」などがあります。

お答えになっていないかもしれませんので、遠慮なくご質問ください!
よろしくお願いします。

補足日時:2004/10/23 21:32
    • good
    • 0

この件に関し、アプリケーション開発は興味があるものの、何時、どのようになるか不明確です。

ある程度予想していたのですが、オークションなどを追いかけると理解し、その方面はまったく無知ですが、ベクターの関連カテゴリーなど調査されたのでしょうか?
既に調査済みであれば「このような点が不満」などの情報を頂けないでしょうか。

参考URL:http://search.vector.co.jp/search?query=%83I%81% …

この回答への補足

説明不足でした。すみません。

オークションで利用したいと言うのではなく、同じHTML構造を持つウェブサイトの各ページを取得・解析・抽出するものです。例えばショッピングサイトの商品ページ、各地域の天気予報ページ、市町村の議会録、展示会の出展各社ページなど、データベースを使ったサイトであれば、テキストや画像URL・リンクURLが変わってもHTMLタグはそう変わらないというものです。オークションサイトを例に出したのは、そういったデータベースを使って、一定のデザインを持つウェブサイトを例に出したのです。

実はベクターは自動巡回ソフトを中心に全てのソフトウェアを使ってみましたが、巡回+全文テキスト表示が中心です。今回考えている全文テキスト内の一部のテキスト抽出に限定したものはないのです。

よろしくお願いします。

補足日時:2004/10/23 11:40
    • good
    • 0

#1です。

補足有り難うございます。しかしもう少し細かく

1.に関し、サーバ環境が現在ないのでPCでないと作業が始まらず、この点は良いのですが。「タイミング、あるいは間隔」は?常時(エンドレスループ)、1分置き、1時間置き、ユーザーによるトリガー、その他どのようなことになりますか

2.「データベース的に各URL毎」は判りましたが、ログ的に変化の記録を延々と残して行くのか、最新が判れば良いのか、基準がありそれとの差違が示されれば良いのか

この回答への補足

ありがとうございます。
プログラミングはまったくわからないので大変恐縮です。

こういった形で協業して新しいものが生み出したら良いですね。(^^)友人や仕事関係(調査・企画)の方では、結構ニーズあったりするみたいです。シェアウェアで提供できればいいですね。

1.に関してはPCで大丈夫です。
間隔についてはその都度実行するイメージだったので、定期巡回は便利そうですね。都度実行でリリースして、様子見て定期巡回機能を付加するでいかがですか?

2. についてですが最新情報で十分です。#2さんがなるべくご負担にならないようにしたいです。
イメージでは、クロールしたい同じサイトの複数URLと行数もしくは正規表現(どこどこのタグからどこどこのタグまで)を指定して実行したら、巡回URLと抽出データ(テキスト)をテキストファイルで出せればというものです。そのまま保存できれば過去のデータと合わせてEXCELで加工できますしね。


もうちょっと補足させてください。
YAHOOオークションを例にします。
power book g4を検索したURLリストがある。

http://page10.auctions.yahoo.co.jp/jp/auction/m5 …
http://page3.auctions.yahoo.co.jp/jp/auction/c75 …
http://page10.auctions.yahoo.co.jp/jp/auction/m5 …
・・・

これは当方でリストを用意します。
それで現在の価格を抽出したいとします。

・・・
<TR><TD>現在の価格:</TD>
<TD><b>208,000 円</b></TD></TR>
・・・

これを抽出するには2つの方法はあると思います。
何行目をまるごと1~2行を抽出するか、
もしくは正規表現で、
<TD><b>100,000 円</b></TD></TR>
の部分を抽出するか(テキストもしくはソース)…

でも現実的には前者はページによっては行がずれたりして、違うものを拾ってしまうケースはあると思います。タグは前後変わることはあまりないので、変わらない部分の前と後ろを指定して巡回する後者が理想かもしれません。

(例)
URLリスト・・・100~1000件を羅列
拾う前の部分・・・<TD><b>
拾う後の部分・・・</b></TD></TR>
それを実行。巡回開始。

巡回結果
"http://page10.auctions.yahoo.co.jp/jp/auction/m5 … 円"
"http://page3.auctions.yahoo.co.jp/jp/auction/c75 … 円"
"http://page10.auctions.yahoo.co.jp/jp/auction/m5 … 円"
・・・
取得200件、取得できず10件
抽出198件、抽出できず2件
取得開始:2004-10-23 20:00:01
取得終了:2004-10-24 22:15:11

こんな感じでリストができればと思います。
長々となってすみません。イメージが沸くようになれれば嬉しいです。お気軽にご意見・ご質問ください。

よろしくお願いします。

補足日時:2004/10/23 09:37
    • good
    • 0

残念ながらそのようなソフトは知りません。

しかし興味はあるし、場合によっては練習に作っても良いと考えています。
そこで仕様ですが
・ダウンロードするタイミング、あるいは間隔
・差違が出た時、その部分だけリポートするのか、データベース的に各URL毎の変化を記録して行くのか
辺りはどのようなものでしょうか?

この回答への補足

ありがとうございます。
1番目ですが、二つのパターンがあると思います。
 WEBサーバ上で動かす:その都度拾って解析するもの
 パソコン上:全部拾ってから解析するもの
どちらが良いかは一長一短だが、サーバ負担考えて
パソコン上で動かす方が良いと考えております。

2番目ですが、後者のDB的に格URL毎の方が後々の
マッチングの場合、作業しやすいと思います。
(例)
http://www.***.com/data/001.html,<p><a href=...>...
http://www.***.com/data/002.html,error.

とか・・・
説明不足かもしれませんが、お気軽にお問い合わせください。
よろしくお願いします。

補足日時:2004/10/23 04:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!