Java: анализатор HTML не может быть разрешенным типом - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть этот исходный код Java, который мне дал один из моих друзей, и, к сожалению, он уехал из страны, чтобы решить мою проблему. Этот код очищает данные с веб-сайтов и заполняет саму базу данных.

Но ранее из-за некоторых изменений макета на сайте он не функционировал должным образом. Поэтому я пытаюсь перекомпилировать его, используя Eclipse. Но в нем говорится, что этот HTML-анализатор не может быть разрешенным типом, и в исходном коде, который мне дал мой друг, нет класса HTML-анализатора.

Я погуглил по поводу HTML-парсера, и это, похоже, библиотека с открытым исходным кодом. Но я не знаю, как заставить это скомпилировать код, интегрирующий его. Как мне использовать HTML Parser для компиляции моего исходного кода?

Я попытался загрузить их файлы BIN. Но не знаю, что с ними делать.

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

parser = new HTMLParser("file:///"+myProp.getPropertyPageLink());

Я указал только одну функцию, которая использует класс HTMLParser.

   public Property parsePropertyPage(Property myProp){
    myProp.setAgentId(this.agentId);

    int count = 0;
    String description = "No Description Available";
    String content = "No Content Available";
    predicatesFilter = new NodeFilter[2];
    predicatesFilter[0] =
        new NodeClassFilter(org.htmlparser.tags.Div.class);
    predicatesFilter[1] =
        new NodeClassFilter(org.htmlparser.tags.Span.class);
    filtersHolder = new OrFilter(predicatesFilter);
    linkTag = new LinkTag();
    div = new Div();
    sp = new Span();
    filter = new NodeClassFilter(org.htmlparser.tags.Div.class);
    try {
        System.out.println("file:///"+myProp.getPropertyPageLink());
        parser = new HTMLParser("file:///"+myProp.getPropertyPageLink());
        NodeList myList = parser.extractAllNodesThatMatch(filtersHolder);
        System.out.println("Relevant Tags : " + myList.size());
        for (int i = 0; i < myList.size(); i++) {
            //System.out.println(myList.elementAt(i));
            if (myList.elementAt(i).getClass().equals(div.getClass())) {
                String temp = ((Div) myList.elementAt(i)).getText();
                if (temp.indexOf("div id=\"agentCollapsed\"")==0) {
                    System.out.println("Process Agent");
                    this.processAgent(myList.elementAt(i), myProp);
                }else if ("div id=\"majorResultsNav\"".equalsIgnoreCase(temp)) {
                    System.out.println("Process Major Results");
                    Node n = myList.elementAt(i);
                    n = n.getFirstChild().getNextSibling();
                    n = n.getFirstChild().getNextSibling();
                    n = n.getFirstChild().getNextSibling();
                    n = n.getFirstChild().getNextSibling();
                    String s = n.toPlainTextString();
                    if (s.indexOf("for Rent") > 1)
                        myProp.setIsRental(true);
                    if (s.indexOf("for Sale") > 1)
                        myProp.setIsSales(true);
                    if (s.indexOf("Sold") > 1)
                        myProp.setIsSold(true);
                    s = s.substring(s.indexOf("-") + 1);
                    myProp.setState(s.trim());
                } else if ("div class=\"header\""
                        .equalsIgnoreCase(
                                myList.elementAt(i).getText())){
                        processHeader(myList.elementAt(i), myProp);
                        System.out.println("Process Header");
                } else if (
                        myList.elementAt(i).getText().startsWith(
                        "div class=\"textual")){
                    processTextual(myList.elementAt(i), myProp);
                    System.out.println("Process Textual");
                } else if (
                    "div id=\"propertyLocation\""
                        .equalsIgnoreCase(
                                myList.elementAt(i).getText())){
                    myProp.setPropertyLocation(
                            myList.elementAt(i).toHtml());
                    System.out.println("Process Property Location");
                } else if (
                        myList.elementAt(i).getText().startsWith(
                            "div class=\"minorImage")) {
                        count++;
                        myProp.setNumberOfMinorImages(count);
                        System.out.println("Process Minor Image");
                }else if (
                    myList.elementAt(i).getText().startsWith(
                        "div id=\"inspectionTimes")){
                    processInspection(myList.elementAt(i), myProp);
                    System.out.println("Process Inspection Times");
                }
            } else if (
                myList.elementAt(i).getClass().equals(sp.getClass()))
                if ("span class=\"lg-dppl-bold\""
                    .equalsIgnoreCase(
                        ((Span) myList.elementAt(i)).getText()))
                    myProp.setPrice(
                        ((Span) myList.elementAt(i)).getStringText());
                else if (
                    "span class=\"lg-mag-bold\"".equalsIgnoreCase(
                        ((Span) myList.elementAt(i)).getText()))
                    myProp.setIsSold(true);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return myProp;
}

Ответы [ 2 ]

0 голосов
/ 12 ноября 2009

Как вы определили, что HTMLParser был из библиотеки, на которую вы ссылаетесь?

Кажется странным, что некоторые объекты полностью определены (org ....), а ваш объект HTMLParser - нет.

Разве это не может быть класс в вашем собственном проекте?

0 голосов
/ 12 ноября 2009

Вам необходимо добавить файл jar (или файлы) в путь сборки Eclipse.

Щелкните правой кнопкой мыши по проекту в Package Explorer и выберите Build Path / Configure Build Path

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...