質問

私はウェブサイトからデータをスクレイピングするアプリに取り組んでいますが、データを取得する方法について考えていました。具体的には、特定のCSSクラスを使用する多数のdivタグに含まれるデータが必要です-現在(テスト目的で)確認しています

div class = "classname"

HTMLの各行で-これは機能しますが、もっと良い解決策があると感じずにはいられません。

クラスにHTMLの行を指定し、次のようないくつかの素晴らしいメソッドを作成する良い方法はありますか

boolean usesClass(String CSSClassname);
String getText();
String getLink();
役に立ちましたか?

解決

数年前、私は同じ目的でJTidyを使用しました:

http://jtidy.sourceforge.net/

" JTidyは、HTML構文チェッカーおよびプリティプリンターであるHTML TidyのJavaポートです。非Javaの従兄弟と同様に、JTidyは不正な形式のHTMLをクリーンアップするためのツールとして使用できます。さらに、JTidyは処理中のドキュメントにDOMインターフェイスを提供します。これにより、実際にJTidyを実際のHTMLのDOMパーサーとして使用できるようになります。

JTidyはAndy Quickによって書かれました。AndyQuickは後にメンテナーの地位を辞任しました。現在、JTidyはボランティアのグループによって管理されています。

JTidyの詳細については、JTidy SourceForgeプロジェクトページを参照してください。"

他のヒント

HTML処理に役立つもう1つのライブラリはjsoupです。 Jsoupは、不正な形式のHTMLをきれいにしようとし、jQueryのようなタグセレクター構文を使用してJavaでhtml解析を許可します。

http://jsoup.org/

前述のコメントで述べられている主な問題は、不正なHTMLであるため、htmlクリーナーまたはHTML-XMLコンバーターが必須です。 XMLコード(XHTML)を取得したら、それを処理するツールがたくさんあります。必要なデータのみを抽出する単純なSAXハンドラー、または元のコードを変更できるツリーベースのメソッド(DOM、JDOMなど)で取得できます。

HTMLクリーナーを使用して特定のクラスを使用するすべてのDIVを取得し、印刷するサンプルコードを次に示します。内部のすべてのテキストコンテンツ。

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;

/**
 * @author Fernando Miguélez Palomo <fernandoDOTmiguelezATgmailDOTcom>
 */
public class TestHtmlParse
{
    static final String className = "tags";
    static final String url = "http://www.stackoverflow.com";

    TagNode rootNode;

    public TestHtmlParse(URL htmlPage) throws IOException
    {
        HtmlCleaner cleaner = new HtmlCleaner();
        rootNode = cleaner.clean(htmlPage);
    }

    List getDivsByClass(String CSSClassname)
    {
        List divList = new ArrayList();

        TagNode divElements[] = rootNode.getElementsByName("div", true);
        for (int i = 0; divElements != null && i < divElements.length; i++)
        {
            String classType = divElements[i].getAttributeByName("class");
            if (classType != null && classType.equals(CSSClassname))
            {
                divList.add(divElements[i]);
            }
        }

        return divList;
    }

    public static void main(String[] args)
    {
        try
        {
            TestHtmlParse thp = new TestHtmlParse(new URL(url));

            List divs = thp.getDivsByClass(className);
            System.out.println("*** Text of DIVs with class '"+className+"' at '"+url+"' ***");
            for (Iterator iterator = divs.iterator(); iterator.hasNext();)
            {
                TagNode divElement = (TagNode) iterator.next();
                System.out.println("Text child nodes of DIV: " + divElement.getText().toString());
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

Javaの TagSoup に興味があるかもしれません不正なHTMLを処理できるHTMLパーサー。 XMLパーサーは、整形式のXHTMLでのみ機能します。

HTMLParserプロジェクト( http://htmlparser.sourceforge.net/ )が可能性があります。不正なHTMLの処理はかなり適切なようです。次のスニペットは必要なことを行う必要があります。

Parser parser = new Parser(htmlInput);
CssSelectorNodeFilter cssFilter = 
    new CssSelectorNodeFilter("DIV.targetClassName");
NodeList nodes = parser.parse(cssFilter);

ジェリコ: http://jericho.htmlparser.net/docs/index.html

使いやすく、整形式ではないHTMLをサポートしています。多くの例。

HTMLUnitは役に立つかもしれません。さらに多くのことを行います。

http://htmlunit.sourceforge.net/ 1

Jerry 、javaのjQuery:高速で簡潔なJavaライブラリを忘れないでくださいHTMLドキュメントの解析、トラバース、および操作を簡素化します。 css3セレクターの使用が含まれます。

例:

Jerry doc = jerry(html);
doc.$("div#jodd p.neat").css("color", "red").addClass("ohmy");

例:

doc.form("#myform", new JerryFormHandler() {
    public void onForm(Jerry form, Map<String, String[]> parameters) {
        // process form and parameters
    }
});

もちろん、これらはすべてがどのように見えるかを理解するための簡単な例です。

nu.validator プロジェクトは、優れた高性能のHTMLです。コーナーを正確にカットしないパーサー。

  

Validator.nu HTMLパーサーは、JavaのHTML5解析アルゴリズムの実装です。パーサーは、XMLパーサーでXHTML 1.xコンテンツを既にサポートし、SAX、DOM、またはXOMを使用してパーサーとインターフェイスするアプリケーションで、XMLパーサーのドロップイン置換として機能するように設計されています。低レベルの機能は、独自のIOを実行し、スクリプトでdocument.write()をサポートしたいアプリケーションに提供されます。パーサーコアはGoogle Web Toolkitでコンパイルされ、自動的にC ++に変換できます。 (現在、Geckoで使用するパーサーの移植には、C ++翻訳機能が使用されています。)

XWiki HTML Cleaner を使用することもできます:

HTMLCleaner を使用し、拡張して有効なXHTML 1.1コンテンツを生成します。

HTMLの形式が整っていれば、XMLパーサーを使用して簡単に仕事をすることができます...読んでいるだけなら、 SAX が理想的です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top