2011-01-02 9 views
6

Javaを使用してWebページを掻き集める必要があります。正規表現は非常に非効率的な方法であり、それをナビゲートするにはDOM文書に入れるべきです。Javaのページを掻き集めるのに役立ついくつか

私はドキュメントを読もうとしましたが、広すぎると思われます。どこから始めるべきかわかりません。

thisテーブルをアレイにスクレイプする方法を教えてください。私はそこから自分の道を見いだそうとすることができます。スニペット/例はうまくいくでしょう。

ありがとうございました。

答えて

7

jsoup: Java HTML Parserを試すことができます。良いサンプルコードの優れたライブラリです。

+0

私はjSoupのドキュメントを見て、それはかなりうまく見えます。私はBeautifulSoup for Pythonのラインで何かを探していましたが、ここにあります! –

0

確かにRegexは行く方法です。 DOMの構築は複雑すぎるため、多くのテキスト解析が必要です。

4
  1. あなたがXHTML文書にスクラップしようとしているWebページを変換します。 Javaでこれを行うには、JTidyHTMLCleanerのようないくつかのオプションがあります。これらのツールは、不正な形式のHTML(クローズされていないクローズドタグなど)も自動的に修正します。両方とも非常にうまく動作しますが、JTidyはJavaのDOM APIとの統合が優れているため、JTidyが好きです。
  2. XPathを使用して必要な情報を抽出します。

ここでは、JTidyと提供したWebページを使用して、テーブルからすべてのファイル名を抽出するための実例を示します。

public static void main(String[] args) throws Exception { 
    // Create a new JTidy instance and set options 
    Tidy tidy = new Tidy(); 
    tidy.setXHTML(true); 

    // Parse an HTML page into a DOM document 
    URL url = new URL("http://www.cs.grinnell.edu/~walker/fluency-book/labs/sample-table.html");   
    Document doc = tidy.parseDOM(url.openStream(), System.out); 

    // Use XPath to obtain whatever you want from the (X)HTML 
    XPath xpath = XPathFactory.newInstance().newXPath(); 
    XPathExpression expr = xpath.compile("//td[@valign = 'top']/a/text()"); 
    NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET); 
    List<String> filenames = new ArrayList<String>(); 
    for (int i = 0; i < nodes.getLength(); i++) { 
     filenames.add(nodes.item(i).getNodeValue()); 
    } 

    System.out.println(filenames); 
} 

結果は、期待通りに[Integer Processing:, Image Processing:, A Photo Album:, Run-time Experiments:, More Run-time Experiments:]になります。

もう1つのクールなツールはWeb Harvestです。基本的には上記のすべてを行いますが、XMLファイルを使用して抽出パイプラインを設定します。

+0

これは洗練されたソリューションですが、単純な掻き取りには過剰です。大規模なWebページのDOMを構築するのは非常に遅いでしょう(元の例は小さなページでしたが、一般的に、ほとんどのWebページではDOMが複雑です)。 – monkjack

0

あなたがしているのは、テーブルをデータファイルにスクラップするだけであれば、正規表現はうまくいくでしょうし、DOM文書を使うよりも良いかもしれません。 DOMドキュメントは大量のメモリを消費します(特に大規模なデータテーブルの場合)。大規模なドキュメントにはSAXパーサが必要です。

関連する問題