2012-03-11 2 views
0

Я работаю над приложением для Android, которое анализирует сайт, но я не могу заставить Jsoup работать.JSoup Parsing issues

Я пытаюсь разобрать этот HTML:

Here's a pic

Мой код только сейчас:

Document doc = null; 
     try{ 
    doc = Jsoup.connect("URL").get(); 
     Elements tds = doc.select("table.tr>td"); 

    for (Element td : tds) { 
     String tdText = td.text(); 
     System.out.println(tdText); 
    } 
    } 

На данный момент она ничего не возвращает, но если я печатаю «документ» его вернуть весь сайт.

Я пытаюсь извлечь следующую информацию: Drower, Е. С.   (Этель Stefana),   Девушку,   б. 1879, с или без & nbsp.

Но я не могу шов, чтобы заставить его работать.

Благодарим за помощь!

+0

Не '.' для классов? Дети - это 'foo> bar> baz'. –

+0

У меня создалось впечатление, что вы можете смешать их. Что это должно быть вместо смешанного примера. Я действительно в недоумении. – Tbuermann

+0

Вы могли бы смешать их, конечно, но ваш селектор все еще не прав. Вы выбираете 'td' дочерние элементы' table' с классом 'tr'. Вместо этого вы, вероятно, хотите, чтобы ячейки 'td' находились в строках' tr' в 'таблице'. Я считаю, что вы можете получить их, просто используя '' td "' в качестве селектора. Тем не менее, было бы трудно извлечь только нужную вам информацию, поскольку содержащаяся в ней 'td' не имеет идентификатора' id' или какой-либо другой уникальной характеристики, которая может изолировать ее от других элементов 'td' на странице - возможно, это всегда третьей ячейки второй строки в этой конкретной таблице? –

ответ

0

Вы получили неправильный селектор: он выбирает td детей в table элемента с классом tr, в то время как вы, вероятно, хотите td клетки в tr строк в table. Я считаю, что вы можете получить их, используя "td" в качестве селектора.

Однако это слишком универсально, так как он будет выбирать каждую ячейку в таблице. Если ячейка, в которой вы нуждаетесь, всегда является третьей ячейкой в ​​строках этой таблицы, вы можете уточнить селектор, чтобы выбрать только те: "td:eq(2)". Вы действительно должны получить ловкость JSoup selectors и немного поэкспериментировать, чтобы узнать, сколько вы можете ограничить данные, извлеченные из документа, только теми элементами, которые вам действительно нужны.

Чтобы получить текст после <script> элемента в четвертой ячейке вы могли бы использовать что-то по следующему фрагменту:

Element td = doc.select("td:eq(3)").first(); 
System.out.println(td.text()); 

потому, что из небольшого эксперимента у меня, кажется, что JavaScript код внутри <script> тегов пропущен при запросе текста элемента, который содержит один из них.

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

+0

Спасибо за вашу помощь Мне удалось получить необходимую информацию через этот бит кода: String td = doc.select ("tr: has (td)"). Text(); \t \t System.out.println (td); – Tbuermann

+0

@ tbone24 добро пожаловать. Если ответ был полезен, подумайте о его продолжении или принятии. –