2011-03-22 24 views
23
<td width="10"></td> 
<td width="65"><img src="/images/sparks/NIFTY.png" /></td> 
<td width="65">5,390.85</td> 
<td width="65">5,428.15</td> 
<td width="65">5,376.15</td> 
<td width="65">5,413.85</td> 

Esta es la fuente HTML desde la que tengo que extraer los valores 5390.85,5428.15, 5376.15, 5413.85. Yo quería hacer esto usando jsoup. Pero soy relativamente nuevo en jsoup (hoy comencé a usarlo). Entonces, ¿cómo debería hacer esto?cómo analizar una tabla desde HTML usando jsoup

URL url = new URL("http://www.nseindia.com/content/equities/niftysparks.htm"); 
Document doc = Jsoup.parse(url,3*1000); 
String text = doc.body().text(); 

Ya he extraído el contenido del sitio web usando jsoup. pero ¿cómo extraer los valores que necesito? Gracias de antemano

+2

Encontré otro ejemplo http://technology.amis.nl/blog/13121/screenscraping-from-java-using-jsoup-effective-data-gathering-from-websites – 2sb

Respuesta

33

intentar algo como esto: -

URL url = new URL("http://www.nseindia.com/content/equities/niftysparks.htm"); 
Document doc = Jsoup.parse(url, 3000); 

Element table = doc.select("table[class=niftyd]").first(); 

Iterator<Element> ite = table.select("td[width=65]").iterator(); 

ite.next(); // first one is image, skip it 

System.out.println("Value 1: " + ite.next().text()); 
System.out.println("Value 2: " + ite.next().text()); 
System.out.println("Value 3: " + ite.next().text()); 
System.out.println("Value 4: " + ite.next().text()); 

Aquí está la copia impresa: -

Value 1: 5,390.85 
Value 2: 5,428.15 
Value 3: 5,376.15 
Value 4: 5,413.85 
+0

gracias limc. funcionó. – CyprUS

5

Aquí hay un ejemplo usando Groovy lang:

def url = "http://www.espn.co.uk/scrum/rugby/match/scores/recent.html" 
def doc = Jsoup.connec(url).get() 

//Strip the table from the page 
def table = doc.select("table").first() 
// Strip the rows from the table 
def tbRows = table.select("tr") 

// For each column in a row, print its contents if not empty 
tbRows.each { row -> 
    def tbCol = row.select("td") 
    tbCol.each { column -> 
     if(!column.text().empty) { 
      println column.text() 
     } 
    } 
} 

usted podría ahorrar esto a una matriz para su posterior procesamiento. Solo otra perspectiva.

Cuestiones relacionadas