Ich habe versucht, die Daten einer Website zu verschrotten und bis zu einem gewissen Grad gelingt mir mein Ziel. Aber, es gibt ein Problem, dass die Webseite, die ich verwerfen möchte, mehrere HTML-Tabellen darin hat. Wenn ich jetzt mein Programm ausführe, ruft es nur die Daten der ersten Tabelle in der CSV-Datei ab und ruft nicht die anderen Tabellen ab. Mein Java-Klassencode ist wie folgt.Wie Daten von mehreren HTML-Tabellen durch Web-Scrapping in Java abgerufen werden
public static void parsingHTML() throws Exception {
//tbodyElements = doc.getElementsByTag("tbody");
for (int i = 1; i <= 1; i++) {
Elements table = doc.getElementsByTag("table");
if (table.isEmpty()) {
throw new Exception("Table is not found");
}
elements = table.get(0).getElementsByTag("tr");
for (Element trElement : elements) {
trElement2 = trElement.getElementsByTag("tr");
tdElements = trElement.getElementsByTag("td");
File fold = new File("C:\\convertedCSV9.csv");
fold.delete();
File fnew = new File("C:\\convertedCSV9.csv");
FileWriter sb = new FileWriter(fnew, true);
//StringBuilder sb = new StringBuilder(" ");
//String y = "<tr>";
for (Iterator<Element> it = tdElements.iterator(); it.hasNext();) {
//Element tdElement1 = it.next();
//final String content2 = tdElement1.text();
if (it.hasNext()) {
sb.append("\r\n");
}
for (Iterator<Element> it2 = trElement2.iterator(); it.hasNext();) {
Element tdElement2 = it.next();
final String content = tdElement2.text();
//stringjoiner.add(content);
//sb.append(formatData(content));
if (it2.hasNext()) {
sb.append(formatData(content));
sb.append(" , ");
}
if (!it.hasNext()) {
String content1 = content.replaceAll(",$", " ");
sb.append(formatData(content1));
//it2.next();
}
}
System.out.println(sb.toString());
sb.flush();
sb.close();
}
System.out.println(sampleList.add(tdElements));
}
}
}
Was ich analysieren, ist, dass es eine Schleife gibt, die nur tr tds überprüft. Nach der ersten Tabelle gibt es also ein Stylesheet auf der HTML-Seite. Kann sein, wegen der Artblattschleife zu brechen. Ich denke, das ist der Grund, warum es zur nächsten Tabelle geht.
PS: Hier ist der Link, den ich http://www.mufap.com.pk/nav_returns_performance.php?tab=01
Wie wäre es mit Ihrer Schleife, die Sie zwingt, nur auf einen Tisch zu schauen? 'für (int i = 1; i <= 1; i ++) {' – csmckelvey
wenn ich es auf 'i <= 2 oder i <= 5' erhöhe, wird es die gleiche Tabelle für zwei Mal oder welche Nummer ich geschrieben habe. –
Weil Sie die Tabelle hart codiert haben, die Sie betrachten möchten. 'elements = table.get (0) .getElementsByTag (" tr ");' Egal, wie oft Sie die Schleife durchlaufen, Sie sehen immer nur die erste Tabelle in der Sammlung. – csmckelvey