2017-10-12 2 views
0

Ich möchte eine HTML-Tabelle lesen und Daten in Excel schreiben. Was ist der beste und schnellste Weg, um das zu erreichen? Ich habe eine HTML-Tabelle mit 13529 Zeilen mit 37 Spalten. Was zu lange dauert, um die Daten ~ 1Hr + zu lesen, und ich kann mir nicht vorstellen, wie lange es dauern würde, diese Daten zu schreiben, um zu übertreffen. Nicht sicher, was mache ich hier falsch. Jeder Vorschlag wird geschätzt. Danke im Voraus.HTML-Tabelle lesen und in Excel schreiben - Selenium WebDriver mit POI

Lesen von Daten aus HTML-Tabelle Code:

private List<WebElement> getData(String object){ 
    System.out.println("Object = ="+OR.getProperty(object)); 
    List<WebElement> tr_collection = driver.findElements(By.xpath(OR.getProperty(object))); 
    System.out.println("NUMBER OF ROWS IN THIS TABLE = " + tr_collection.size()); 
    int row_num, col_num; 
    row_num = 1; 
    for (WebElement trElement : tr_collection) { 
     List<WebElement> td_collection = trElement.findElements(By.xpath("td")).size() == 0?trElement.findElements(By.xpath("th")):trElement.findElements(By.xpath("td")); 
     System.out.println("NUMBER OF COLUMNS=" + td_collection.size()); 
     col_num = 1; 
     for (WebElement tdElement : td_collection) { 
      System.out.println("row # " + row_num + ", col # " + col_num + ", text | " + tdElement.getText()); 
      col_num++; 
     } 
     row_num++; 
     System.out.println("================================================================================"); 
    } 
    return tr_collection; 
} 

Daten schreiben zu Excel-Blatt:

private void writeExcel(List<WebElement> tr_collection,XSSFWorkbook workbook,XSSFSheet spreadsheet,String fileName){ 

    //HSSFRow row; 

    for (int i=0; i<tr_collection.size(); i++) 
    { 
     WebElement webRow = tr_collection.get(i); 
     //Get all cell values in each row 
     List<WebElement> allCells = new ArrayList<>(); 
     if(webRow.findElements(By.tagName("th")).size() > 0){ 

      allCells = webRow.findElements(By.tagName("th")); 
     }else{ 
      allCells = webRow.findElements(By.tagName("td")); 
     } 
     //System.out.println(allCells.size()); 

     if(allCells.size() > 1) 
     { 
      XSSFRow excelRow = spreadsheet.createRow(i); 

      for (int j=0; j<allCells.size(); j++) 
      { 
       WebElement webCell = allCells.get(j); 
       String text = webCell.getText(); 
       XSSFCell cell = excelRow.createCell(j); 
       cell.setCellValue(text); 
      } 
     } 
    } 
    try { 
    FileOutputStream fileOut = new FileOutputStream(fileName); 
    //write this workbook to an Outputstream. 
     workbook.write(fileOut); 

     fileOut.flush(); 
     fileOut.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Lassen Sie mich wissen, wenn weitere Details erforderlich sind. – Nag

+0

Können Sie einen Link zu der Seite teilen, die die Tabelle oder eine Beispieltabelle enthält, für die Sie codieren? Ein Vorschlag, die Ausgabe schneller zu machen, besteht darin, in CSV (Textdatei) zu schreiben. Sie können dann die CSV-Datei leicht in Excel importieren und es wird Ihnen wahrscheinlich viel Zeit sparen. Die Verwendung eines Schreibpuffers hilft auch, die Dinge schneller zu machen. – JeffC

+0

Wenn Sie in der Lage sind, den genauen Zweck zu erkennen, gibt es viele Möglichkeiten. Wenn es etwas wie ein Dienstprogramm ist, um Ihre allgemeine Arbeit zu reduzieren, können Sie sogar kopieren und einfügen mit Hilfe der Action-Klasse und der Robot-API. –

Antwort

0

Es ist nur ein Vorschlag, aber wenn ich hatte, dass HTML-Tabelle zu analysieren und Holen Sie es in Excel Ich würde den HTML-Code herunterladen, die Tabellenelemente mit String-Operationen oder Regex auslesen und dann in eine CSV-Datei schreiben (wie bereits oben empfohlen). Dies ist viel schneller, als die Elemente des Tisches mit Selen zu erhalten. Wir sprechen hier von 500000 Elementen. Dafür ist Selenium nicht optimiert. :-)

+0

Durch einige Foren stieß ich auf JSOUP API für HTML-Parsing. Irgendeine Idee, wie ich Jsoup zu meinem Code integriere? Ich möchte die HTML-Tabelle mit Jsoup analysieren und die verbleibenden mit Selenium machen. – Nag

+0

Ich denke, das wäre eine neue Frage wert. Ich habe noch nicht mit JSOUP gearbeitet, aber von dem, was ich verstehe, kann man das HTML "offline" parsen, was sicher schneller ist als mit Selenium, aber ich weiß nicht, wie die Leistung von JSOUP ist, und ich würde immer noch einen großen Unterschied erwarten Regex und XPath-Ausdrücke auf HTML-Code zugunsten von Regex natürlich. Wenn Sie weitere Hilfe bei JSOUP benötigen, würde ich empfehlen, eine neue Frage zu öffnen, weil es ein völlig anderes Thema ist. Aber machen Sie zuerst eine Suche. :-) – AlvaHenrik

+0

Nur um zu aktualisieren. gestern habe ich meinen Code mit JSOUP integriert, um zu analysieren und zu versuchen, dieselbe riesige HTML-Tabelle zu excel zu exportieren, und es wurde schnell belichtet. Ich muss noch daran arbeiten, meinen Code zu optimieren. Bcuz Jsoup ist ziemlich neu für mich. Danke, dass Sie sich die Zeit genommen haben, zurück zu antworten. – Nag

Verwandte Themen