3

HTML テーブルをスクレイピングして、そのデータをデータベースに保存しようとしています。このプログラムに取り組む際に役立つと思われる戦略/ソリューションは何ですか。

私は Java と PHP に最も慣れていますが、実際にはどの言語でも解決策があれば役に立ちます。

編集: 詳細については、UTA (ソルトレイクのバス システム) のウェブサイトでバスの時刻表を提供しています。各スケジュールは、ヘッダーに駅があり、行に出発時刻があるテーブルに表示されます。スケジュールを調べて、テーブルに情報を保存し、クエリを実行できるようにしたいと考えています。

スケジュールの起点はこちら

4

8 に答える 8

3

このトピックについては、Kevin Hemenway と Tara Calishain による Spidering Hacksという素晴らしい本があります。

于 2008-09-16T14:54:04.647 に答える
3

それはすべて、スクレイピングする HTML がどれだけ適切かによって異なります。有効な XHTML である場合は、XPath クエリをいくつか使用するだけで、必要なものを取得できます。

PHP での xpath の例: http://blogoscoped.com/archive/2004_06_23_index.html#108802750834787821

テーブルを配列にスクレイピングするヘルパー クラス: http://www.tgreer.com/class_http_php.html

于 2008-09-16T14:54:08.687 に答える
2

一般に、スクリプト言語はこのようなタスクを実行するのにより適していることがわかりました。個人的には Python の方が好きですが、PHP も同様に機能します。Java で文字列を切り刻んだり、切り刻んだり、解析したりするのは大変な作業です。

于 2008-09-16T14:55:36.217 に答える
1

ピアノハッカーは、まさにこの種のもののために設計されたHTML::TableExtractモジュールを見落としていました。テーブルを取得するには、LWPが必要です。

于 2008-09-16T15:22:37.247 に答える
1

ここでSOでシットストームを開始するリスクを冒して、テーブルの形式がまったく変わらない場合は、Regularexpressionsを使用して必要なコンテンツを解析およびキャプチャするだけで済むことをお勧めします.

于 2011-01-31T12:30:26.427 に答える
1

これは、Perl と次の CPAN モジュールを使用すると、はるかに簡単になります。

CPAN は Perl モジュールの主要な配布メカニズムであり、次のシェル コマンドを実行することでアクセスできます。

# cpan HTML::Parser

Windows を使用している場合は、より興味深いものになりますが、それでも実行できます: http://www.perlmonks.org/?node_id=583586

于 2008-09-16T15:02:57.387 に答える
1

必要なものが csv テーブルの形式である場合は、これを使用できます: Python を使用:

たとえば、 fxoandaのようなサイトから csv 形式で外国為替相場をスクレイピングしたいとします。

それから...

from BeautifulSoup import BeautifulSoup
import urllib,string,csv,sys,os
from string import replace

date_s = '&date1=01/01/08'
date_f = '&date=11/10/08'
fx_url = 'http://www.oanda.com/convert/fxhistory?date_fmt=us'
fx_url_end = '&lang=en&margin_fixed=0&format=CSV&redirected=1'
cur1,cur2 = 'USD','AUD'
fx_url = fx_url + date_f + date_s + '&exch=' + cur1 +'&exch2=' + cur1
fx_url = fx_url +'&expr=' + cur2 +  '&expr2=' + cur2 + fx_url_end
data = urllib.urlopen(fx_url).read()
soup = BeautifulSoup(data)
data = str(soup.findAll('pre', limit=1))
data = replace(data,'[<pre>','')
data = replace(data,'</pre>]','')
file_location = '/Users/location_edit_this'
file_name = file_location + 'usd_aus.csv'
file = open(file_name,"w")
file.write(data)
file.close()

この形式になったら、データを好きな形式に変換できます。

于 2008-11-11T01:20:47.280 に答える
1

以前にスクリーンスクレイピングを試したことがありますが、特に動的に生成されたコードでは非常に脆弱であることがわかりました。サードパーティの DOM パーサーを見つけて、正規表現のようなマッチング パターンでソース コードをナビゲートし、必要なデータを見つけました。

私は、サイトの所有者がシステムからデータを取得するための API (多くの場合 Web サービス) を公開しているかどうかを調べることを提案しました。そうでない場合は、幸運を祈ります。

于 2008-09-16T14:54:08.843 に答える