2013-04-06 4 views
1

Как я могу использовать Jsoup для извлечения данных спецификации из this website отдельно для каждой строки, например. Сеть-> Тип сети, батарея и т.д.Извлечение и анализ HTML-таблицы с использованием Jsoup

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class mobilereviews { 
    public static void main(String[] args) throws Exception { 
     Document doc = Jsoup.connect("http://mobilereviews.net/details-for-Motorola%20L7.htm").get(); 
     for (Element table : doc.select("table")) { 
      for (Element row : table.select("tr")) { 
       Elements tds = row.select("td"); 
       System.out.println(tds.get(0).text()); 
      } 
     } 
    } 
} 

ответ

2

для XPath столбцов - //*[@id="phone_details"]/tbody/tr[3]/td[2]/strong

для XPath значений - //*[@id="phone_details"]/tbody/tr[3]/td[3]

@ код Джоуи пытается сосредоточиться на них. Вы должны иметь возможность писать правила select() на основе Xpath.

Замените номера (tr [N]/td [N]) соответствующими значениями.

В качестве альтернативы, вы можете направить HTML-текст на текстовый браузер и извлечь данные из текста. Вот text version страницы. Вы можете разграничить текст или прочитать после N символов для извлечения данных.

5

Вот попытка найти решение проблемы

Document doc = Jsoup.connect("http://mobilereviews.net/details-for-Motorola%20L7.htm").get(); 

for (Element table : doc.select("table[id=phone_details]")) { 
    for (Element row : table.select("tr:gt(2)")) { 
     Elements tds = row.select("td:not([rowspan])"); 
     System.out.println(tds.get(0).text() + "->" + tds.get(1).text()); 
    } 
} 

разбор HTML является сложным, и если HTML изменяет ваш код должен измениться Что ж.

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

  • Есть несколько таблиц в HTML, так что вы первый фильтр на правильный table[id=phone_details]
  • Первые 2 строки таблицы содержат только разметку для форматирования, поэтому пропустите их tr:gt(2)
  • Каждый второй ряд начинается с глобальное описание для типа содержимого, отфильтровать его td:not([rowspan])

для более сложных вариантов в синтаксисе селектора, смотрите здесь http://jsoup.org/cookbook/extracting-data/selector-syntax

1

вот как я получаю данные из таблицы html.

org.jsoup.nodes.Element tablaRegistros = doc 
        .getElementById("tableId"); 
for (org.jsoup.nodes.Element row : tablaRegistros.select("tr")) { 
       for (org.jsoup.nodes.Element column : row.select("td")) { 
        // Elements tds = row.select("td"); 
        // cadena += tds.get(0).text() + "->" + 
        // tds.get(1).text() 
        // + " \n"; 
        cadena += column.text() + ","; 
       } 
       cadena += "\n"; 
      } 
1

Вот общее решение для извлечения таблицы из HTML-страницы через JSoup.

import java.io.IOException; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class ExtractTableDataUsingJSoup { 

    public static void main(String[] args) { 
     extractTableUsingJsoup("http://mobilereviews.net/details-for-Motorola%20L7.htm","phone_details"); 
    } 

    public static void extractTableUsingJsoup(String url, String tableId){ 
     Document doc; 
     try { 
      // need http protocol 
      doc = Jsoup.connect(url).get(); 

      //Set id of any table from any website and the below code will print the contents of the table. 
      //Set the extracted data in appropriate data structures and use them for further processing 
      Element table = doc.getElementById(tableId); 

      Elements tds = table.getElementsByTag("td"); 

      //You can check for nesting of tds if such structure exists 
      for (Element td : tds) { 
       System.out.println("\n"+td.text()); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
Смежные вопросы