سؤال

أنا أعمل على تطبيق يقوم بإخلاص البيانات من موقع ويب وكنت أتساءل كيف يجب أن أحصل على البيانات. على وجه التحديد ، أحتاج إلى بيانات موجودة في عدد من علامات DIV التي تستخدم فئة CSS محددة - حاليًا (لأغراض الاختبار) أنا فقط أتحقق من ذلك

div class = "classname"

في كل سطر من HTML - هذا يعمل ، لكن لا يسعني إلا أن أشعر أن هناك حلًا أفضل هناك.

هل هناك أي طريقة لطيفة حيث يمكنني إعطاء خط من الدرجة الأولى من HTML ولدي بعض الطرق اللطيفة مثل:

boolean usesClass(String CSSClassname);
String getText();
String getLink();
هل كانت مفيدة؟

المحلول

قبل عدة سنوات ، استخدمت Jtidy لنفس الغرض:

http://jtidy.sourceforge.net/

"Jtidy هو منفذ Java من HTML TIDY ، وهو مدقق بناء جملة HTML وطابعة جميلة. مثل ابن عمه غير Java ، يمكن استخدام Jtidy كأداة لتنظيف HTML المشوه والمعي. المستند الذي تتم معالجته ، مما يجعلك قادرًا على استخدام JTIDY كحوض DOM لـ HTML في العالم الحقيقي.

كتب Jtidy من قبل آندي كويك ، الذي تنحى فيما بعد من منصب المشرف. الآن يتم الحفاظ على Jtidy من قبل مجموعة من المتطوعين.

يمكن العثور على مزيد من المعلومات حول Jtidy على صفحة مشروع Jtidy SourceForge. "

نصائح أخرى

مكتبة أخرى قد تكون مفيدة لمعالجة HTML هي JSoup. يحاول JSoup تنظيف HTML المشوه ويسمح HTML تحليل في Java باستخدام jQuery مثل بناء جملة Selector Tag.

http://jsoup.org/

المشكلة الرئيسية كما ذكرت Coments السابقة هي HTML مشوهة ، وبالتالي فإن منظف HTML أو محول HTML-XML أمر لا بد منه. بمجرد الحصول على رمز XML (XHTML) ، هناك الكثير من الأدوات للتعامل معها. يمكنك الحصول عليها باستخدام معالج SAX بسيط يقوم باستخراج البيانات التي تحتاجها فقط أو أي طريقة قائمة على الأشجار (DOM ، JDOM ، إلخ) التي تتيح لك تعديل التعليمات البرمجية الأصلية.

هنا رمز عينة يستخدم HTML منظف للحصول على جميع divs التي تستخدم فئة معينة وطباعة جميع محتوى النص بداخله.

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();
        }
    }
}

قد تكون مهتمًا TagSoup, ، محلل Java 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

دعونا لا ننسى جيري, ، لها jQuery في Java: مكتبة 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 ممتاز وعالي الأداء لا يقطع الزوايا.

The Validator.Nu HTML Parser هو تنفيذ خوارزمية تحليل HTML5 في Java. تم تصميم المحلل المحلل للعمل كبديل إسقاط لمحلل XML في التطبيقات التي تدعم بالفعل محتوى XHTML 1.x مع محلل XML واستخدام SAX أو DOM أو XOM للواجهة مع المحلل. يتم توفير وظائف منخفضة المستوى للتطبيقات التي ترغب في تنفيذ IO ودعم المستند. write () مع البرمجة النصية. يجمع محلل المحلل الأساسي على مجموعة أدوات ويب Google ويمكن ترجمته تلقائيًا إلى C ++. (تُستخدم إمكانية ترجمة C ++ حاليًا لنقل المحلل المحلل للاستخدام في Gecko.)

تستطيع ايضا استخذام Xwiki HTML منظف:

يستخدم htmlcleaner ويمتدها لإنشاء محتوى XHTML 1.1 صالح.

إذا كان HTML الخاص بك جيدًا ، فيمكنك بسهولة استخدام محلل XML للقيام بالمهمة من أجلك ... إذا كنت تقرأ فقط ، ساكس سيكون مثاليًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top