Jsoup анализирует HTML-файл с тегом tbody - PullRequest
2 голосов
/ 17 июня 2011

У меня совсем недавно противоречивое поведение Jsoup, когда дело доходит до тегов tbody, Когда я анализирую удаленную страницу в Интернете с помощью структуры HTML, например:

<table>
   <tbody>
     <tr><td>... text
   </tbody>
</table>

Jsoup не включает элемент tbody в элементы, возвращаемые методом select ().

Я использую метод connect (). Get () для загрузки удаленной страницы в переменную Document, например:

Document doc = Jsoup.connect(url).get();
String expr = "table>tr>td";
String parsedTxt = doc.select(expr).text();

Но когда я проанализировал ту же страницу на локальном диске (после того, как я ее скачал). Jsoup включает тег tbody. Мое выражение больше не будет работать, потому что отсутствует элемент tbody.

Я использую:

File input = new File(locationOfFile);
Document doc = Jsoup.parse(input, "UTF-8", "");

Мое выражение Jsoup работает только в первом случае.

Есть ли способ заставить Jsoup распознать элемент tbody (или удалить его), чтобы одно и то же выражение могло использоваться в обоих случаях?

Это нормальное поведение от Jsoup?

Должен ли я использовать метод connect при анализе локальной страницы?

Ответы [ 3 ]

1 голос
/ 17 июня 2011

Похоже, что браузер, который вы использовали для сохранения файла, включил / создал теги tbody при сохранении файла. Какой браузер вы использовали для сохранения файла на рабочий стол?

Я бы попытался загрузить файл вручную, используя curl или wget, а затем попытаться разобрать файл.

0 голосов
/ 11 марта 2014

Вы можете попробовать Jsoup 1.7.3.Это работает для вашей ситуации.Пример кода следующий.

    String html
            = "<table>\n"
            + "<tbody>\n"
            + "<tr><td>... text.\n"
            + "</tbody>\n"
            + "</table>";
    Document doc = Jsoup.parse(html);
    Elements eles = doc.select("tbody > tr > td");

    for (Element ele : eles) {
        System.out.println(ele.toString());

    }

Результат такой:

    <td>... text. </td>
0 голосов
/ 08 июня 2013

Вместо проверки элемента с помощью firebug попробуйте поискать в источнике (Показать исходный код страницы).Вы должны попытаться напечатать / проверить

Document.html() 

и посмотреть, действительно ли JSOUP получил весь html.Если это произойдет, то следующим шагом будет сообщение об этом в JSOUP https://github.com/jhy/jsoup/issues

Если этого не произошло (что наиболее вероятно), попробуйте добавить дополнительные заголовки к вашему запросу get (например, user-agent ипеченье).AJAX также может быть проблемой, в этом случае вы должны использовать Selenium http://seleniumhq.org

...