Java [закрытый] парсинг HTML

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

52
задан Eric Leschinski 29 August 2013 в 04:08
поделиться

6 ответов

Несколько лет назад я использовал JTidy для той же цели:

http://jtidy.sourceforge.net/

"JTidy является портом Java Опрятного HTML, программа проверки синтаксиса HTML и симпатичный принтер. Как его кузен не-Java, JTidy может использоваться в качестве инструмента для чистки уродливого и дефектного HTML. Кроме того, JTidy предоставляет интерфейс DOM документу, который обрабатывается, который эффективно делает Вас способными использовать JTidy в качестве синтаксического анализатора DOM для реального HTML.

JTidy был записан Andy Quick, который позже ушел от обслуживающего положения. Теперь JTidy сохраняется группой волонтеров.

[еще 115] информация о JTidy может быть найдена на странице проекта SourceForge JTidy".

18
ответ дан user31586 7 November 2019 в 09:08
поделиться

Основной проблемой, как указано путем предшествования комментариям является уродливый HTML, таким образом, инструмент для очистки HTML или преобразователь HTML-XML - необходимость. Как только Вы получаете код XML (XHTML), там много инструментов для обработки его. Вы могли получить его с простым обработчиком SAX, который извлекает только данные, в которых Вы нуждаетесь или любой основанный на дереве метод (DOM, JDOM, и т.д.), которые позволяют Вам даже изменить исходный код.

Вот пример кода, который использует инструмент для очистки HTML для получения всех ОТДЕЛЕНИЙ, которые используют определенный класс и распечатывают все текстовое содержание в нем.

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();
        }
    }
}
20
ответ дан Fernando Miguélez 7 November 2019 в 09:08
поделиться

Вам могло бы быть интересно TagSoup, синтаксический анализатор HTML Java, который в состоянии обработать уродливый HTML. Синтаксические анализаторы XML работали бы только над хорошо сформированным XHTML.

13
ответ дан PhiLho 7 November 2019 в 09:08
поделиться

Проект HTMLParser ( http://htmlparser.sourceforge.net/ ) мог бы быть возможностью. Это, кажется, довольно достойно при обработке уродливого HTML. Следующий отрывок должен сделать то, в чем Вы нуждаетесь:

Parser parser = new Parser(htmlInput);
CssSelectorNodeFilter cssFilter = 
    new CssSelectorNodeFilter("DIV.targetClassName");
NodeList nodes = parser.parse(cssFilter);
5
ответ дан dave 7 November 2019 в 09:08
поделиться

HTMLUnit мог бы помочь. Это действительно намного больше наполняет также.

http://htmlunit.sourceforge.net/ 1

4
ответ дан alex 7 November 2019 в 09:08
поделиться

Если Ваш HTML правильно построен, можно легко использовать синтаксический анализатор XML, чтобы сделать задание для Вас... Если бы Вы только читаете, , SAX был бы идеален.

0
ответ дан musiKk 7 November 2019 в 09:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: