2016-06-28 29 views
1

Hi Java-Experte, Ich versuche, Daten von angegebenen URL-Adresse zu extrahieren, wo Informationen unter "Div ID" versteckt sind. Meine URL-Abfrage-Seite sieht so aus:Extract Wert unter DIV ID

Ich gebe Peptid-Sequenz als meine Abfrage und dann auf "Search Dataset" klicken, um das Ergebnis als Tabelle anzuzeigen.

Aber wenn ich versuche, "Seitenquelle anzeigen" zu sehen, um das Ergebnis als HTML anzuzeigen, und ich habe diese Tabelle nicht angezeigt.

Nach 'Firebug' verwendet, kann ich die Tabelle in HTML sehen und das wie folgt aussieht:

[! [Treten Sie hier image description] [2]] [2]

Um Daten zu erhalten

package retrieve.information; 
import java.io.IOException; 

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

public class DemoExtractHidenHtml { 
    public static void main(String[] args) { 
     Document document; 
     try { 
      document = Jsoup.connect("http://example.com/xyz_proxi.jsp#{\"searched_button\":\"datasets\",\"peptide\":\"NLAVSQVVHK\"}").userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21").get(); 
      Element dataset = document.select("td.table[datasets]_row[0]_column[1]").first(); 
      System.out.println(dataset); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 

und natürlich arbeiten sie nicht für mich und ich bin immer folgende Fehlermeldung: für meine Frage habe ich einfach JAVA Script geschrieben

Exception in thread "main" org.jsoup.select.Selector$SelectorParseException: Could not parse query 'td.table[datasets]_row[0]_column[1]': unexpected token at '_row[0]_column[1]' 
at org.jsoup.select.QueryParser.findElements(QueryParser.java:196) 
at org.jsoup.select.QueryParser.parse(QueryParser.java:65) 
at org.jsoup.select.QueryParser.parse(QueryParser.java:39) 
at org.jsoup.select.Selector.<init>(Selector.java:84) 
at org.jsoup.select.Selector.select(Selector.java:106) 
at org.jsoup.nodes.Element.select(Element.java:286) 
at retrieve.information.DemoExtractHidenHtml.main(DemoExtractHidenHtml.java:14) 

Jeder hat eine Idee, wie man dieses Problem löst und ich bin ein Neuling in JAVA.

Antwort

1

folgt Hallo ich dieses Problem mit Selen gelöst haben. So Lösung für mein Problem:

package extract.data; 
import java.util.Scanner; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class ExtractDataDynamic { 
private static Scanner kb; 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    kb = new Scanner(System.in); 
    String userpepseq; 
    userpepseq = kb.nextLine(); 
    if (userpepseq.trim().isEmpty()){ 
     System.out.println("User didn't input any value!"); 
    } else { 
     if (Pattern.matches("[a-zA-Z]+", userpepseq) == true) { 
      WebDriver drivermassid = new FirefoxDriver(); 
      drivermassid.manage().window().maximize(); 
      drivermassid.get("http://exmaple.com/xyz_proxi.jsp#{\"searched_button\":\"datasets\",\"peptide\":\""+userpepseq+"\"}"); 
      //Here we are storing the value from the cell in to the string variable 
      String sCellValuemassid = drivermassid.findElement(By.xpath(".//*[@class='result']/tbody")).getText(); 
      drivermassid.quit(); 
      if (sCellValuemassid.length() > 0){ 
       String mid=""; 
       String status=""; 
       Pattern pattern = Pattern.compile("MSV\\d+\\s+\\d+\\s+"); 
       Matcher macther= pattern.matcher(sCellValuemassid); 
       while (macther.find()){ 
        mid=((macther.group()).split("\\ "))[0]; 
        status=((macther.group()).split("\\ "))[1]; 
       } 
       if (meid.length() > 0){ 
        WebDriver drivermasspro = new FirefoxDriver(); 
        drivermasspro.manage().window().maximize(); 
        drivermasspro.get("http://exmaple.com/xyz_proxi.jsp#{\"searched_button\":\"proteins\",\"peptide\":\""+userpepseq+"\"}"); 
        String sCellValuemasspro = drivermasspro.findElement(By.xpath(".//*[@class='result']/tbody")).getText(); 
        drivermasspro.quit(); 
        if (sCellValuemasspro.length() > 0){ 
         String [] proteinifo = sCellValuemasspro.split("\\n"); 
         for (int i=0;i<proteinifo.length;i++) { 
          String [] subproteinifo = proteinifo[i].split("\\ "); 
          System.out.println(mid+" "+status+" "+subproteinifo[1]); 
         } 
        } 
       } else { 
        System.out.println(" ID doesn't exist for "+userpepseq +"."); 
       } 
      } else { 
       System.out.println(userpepseq+" doesn't exist in database."); 
      } 


     } else { 
      System.out.println(userpepseq+" should not contain any number!"); 
     } 
    } 

Becuase dieser Tabelle ist dynamisch und sie Javascript verwenden Daten in die Tabelle zu füllen, so habe ich gefunden, dies eine Art und Weise ist mein porblem zu lösen. Danke

1

Wenn Sie die Tabelle in Firebug sehen können, kopieren Sie dann seine Selector (CSS-Pfad) und die Verwendung als

document.select(selector_str); 
document.select("#rso > div > div:nth-child(1) > div > h3 > a");