Ich bin auf der Website http://www.flashscore.com/nhl/ und ich versuche, die Links der Tabelle "Heutige Matches" zu extrahieren.Warum HTML-Code unterscheidet sich beim Parsen von Website mit Jsoup als mit Browser
Ich versuche es mit dem folgenden Code, aber es funktioniert nicht Können Sie darauf hinweisen, wo der Fehler liegt?
final Document page = Jsoup
.connect("http://d.flashscore.com/x/feed/t_4_200_G2Op923t_1_en_1")
.cookie("_ga","GA1.2.47011772.1485726144")
.referrer("http://d.flashscore.com/x/feed/proxy-local")
.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36")
.header("X-Fsign", "SW9D1eZo")
.header("X-GeoIP", "1")
.header("X-Requested-With", "XMLHttpRequest")
.header("Accept" , "*/*")
.get();
for (Element game : page.select("table.hockey tr")) {
Elements links = game.getElementsByClass("tr-first stage-finished");
for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text();
}
}
Um zu versuchen, es zu beheben, fing ich an, es zu debuggen. Es zeigt, dass wir die Seite bekommen (obwohl wir irgendwie komische HTML bekommen). Danach zeigte das Debugging, dass die for-Schleife nicht einmal startet. Ich habe versucht, die Seite zu ändern. Wählen Sie ("") Teil zu anderen (wie getElementByAttribute usw.), aber ich habe gerade angefangen, Web Scraping zu lernen, also muss ich mich mit diesen Methoden vertraut machen, um durch ein Dokument zu navigieren. Wie soll ich diese Daten extrahieren?
Hi @ exoddues unterstützt, vielen Dank für Ihre Lösung, es funktioniert wie Charme. Kannst du mir auch sagen, wie es möglich ist, nur diejenigen herauszufiltern, die das heutige Datum haben? Lassen Sie uns also sagen, dass das heutige Datum die Variable 'String date' ist. Ich denke ich sollte '.filter()' irgendwie benutzen. –
Auf den ersten Blick scheint, dass die heutigen Matches in einem Div mit id = "fscountry" platziert sind. Ein Weg wäre zum Beispiel ein Filter, der die tr Elemente in einem div mit der ID = "fscountry" bekommt. Versuchen Sie, anstelle der ersten beiden zu verwenden.findElement Aufrufe verwenden etwas wie .findElement (By.id ("fscountry")). findElements (By.tagName ("tr") – exoddus
Hallo @exoddus, es war ein guter Tipp. Mit "fscountry" hat es nicht funktioniert, aber mit "fs". Wenn Sie die Elemente überprüfen, können Sie sehen, warum. In der Tabelle "Heutige Matches" gibt es immer zwei Elemente mit der gleichen ID (zwei Zeilen, das Heimteam oben, Auswärts Team unten), ich habe Dinge wie folgt geändert: ... .collections (toSet()) "also habe ich die gleiche ID nur einmal. Ich weiß nicht, ob es eine beste Lösung dafür ist, aber es funktioniert. –