2011-06-16 18 views
8

Estoy tratando de rastrear el contenido de los sitios web de pujas, pero no puedo buscar la página completa del sitio web. Estoy usando palanca en xulrunner para ir a buscar la página primero (ya que ajax carga ciertos elementos de forma perezosa) y luego raspar del archivo. Pero en la página principal del sitio web de bidrivals, esto falla incluso cuando el archivo local está bien formado. jSoup simplemente parece terminar con '...' caracteres a mitad de camino en el código html. Si alguien ha encontrado esto antes, por favor ayuda. Se requiere el siguiente código para [this link].Jsoup buscando una página parcial

File f = new File(projectLocation+logFile+"bidrivalsHome"); 
    try { 
     f.createNewFile(); 
     log.warn("Trying to fetch mainpage through a console."); 
     WinRedirect.redirect(projectLocation+"Curl.exe -s --data \"url="+website+"&delay="+timeDelay+"\" http://127.0.0.1:10000", projectLocation, logFile+"bidrivalsHome"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     log.warn("Error in fetching the nameList", e); 
    } 
    Document doc = new Document(""); 
    try { 
     doc = Jsoup.parse(f, "UTF-8", website); 
    } catch (IOException e1) { 
     System.out.println("Error while parsing the document."); 
     e1.printStackTrace(); 
     log.warn("Error in parsing homepage", e1); 
    } 
+0

Se puede publicar el código que está utilizando que genera el '' ...? –

+0

Agregó el código. Además, lo mismo se exhibe a través de jSoup.connect (url) .get() – sumit

+0

@submit: Pero aquí ha construido el documento. ¿Dónde exactamente aparece ...? –

Respuesta

1

Trate de usar HtmlUnit para representar la página (incluyendo JavaScript y manipulación del DOM CSS) y luego pasar el HTML representado a jsoup.

// load page using HTML Unit and fire scripts 
WebClient webClient = new WebClient(); 
HtmlPage myPage = webClient.getPage(myURL); 

// convert page to generated HTML and convert to document 
Document doc = Jsoup.parse(myPage.asXml(), baseURI); 

// clean up resources   
webClient.close(); 


pagina.html - código fuente

<html> 
<head> 
    <script src="loadData.js"></script> 
</head> 
<body onLoad="loadData()"> 
    <div class="container"> 
     <table id="data" border="1"> 
      <tr> 
       <th>col1</th> 
       <th>col2</th> 
      </tr> 
     </table> 
    </div> 
</body> 
</html> 

loadData.js

// append rows and cols to table.data in page.html 
    function loadData() { 
     data = document.getElementById("data"); 
     for (var row = 0; row < 2; row++) { 
      var tr = document.createElement("tr"); 
      for (var col = 0; col < 2; col++) { 
       td = document.createElement("td"); 
       td.appendChild(document.createTextNode(row + "." + col)); 
       tr.appendChild(td); 
      } 
      data.appendChild(tr); 
     } 
    } 

page.html cuando se carga en el navegador

| Col1 | Col2 | | ------ | ------ | | 0.0 | 0.1 | | 1.0 | 1.1 |

Usando jsoup para analizar los datos pagina.html col

// load source from file 
    Document doc = Jsoup.parse(new File("page.html"), "UTF-8"); 

    // iterate over row and col 
    for (Element row : doc.select("table#data > tbody > tr")) 

     for (Element col : row.select("td")) 

      // print results 
      System.out.println(col.ownText()); 

salida

(vacío)

¿Qué pasó?

Jsoup analiza el código fuente entregado desde el servidor (o en este caso cargado desde el archivo). No invoca acciones del lado del cliente, como JavaScript o manipulación DOM de CSS. En este ejemplo, las filas y cols nunca se anexan a la tabla de datos.

Cómo analizar mi página como se muestra en el navegador?

// load page using HTML Unit and fire scripts 
    WebClient webClient = new WebClient(); 
    HtmlPage myPage = webClient.getPage(new File("page.html").toURI().toURL()); 

    // convert page to generated HTML and convert to document 
    doc = Jsoup.parse(myPage.asXml()); 

    // iterate row and col 
    for (Element row : doc.select("table#data > tbody > tr")) 

     for (Element col : row.select("td")) 

      // print results 
      System.out.println(col.ownText()); 

    // clean up resources   
    webClient.close(); 

salida

0.0 
0.1 
1.0 
1.1