Der Seiteninhalt wird mit Javascript geladen und Jsoup sieht ihn nicht
Einen block auf der Seite ist mit Inhalt gefüllt, indem javascript
und nach dem laden der Seite mit Jsoup
gibt es keine Informationen. Gibt es einen Weg, um auch javascript
generated content beim Parsen Seite mit Jsoup
?
Besondere UPD für Marcin:
Kann nicht einfügen Seite code hier ein, da es zu lang ist: http://pastebin.com/qw4Rfqgw
Hier das element, das den Inhalt brauche ich: <div id='tags_list'></div>
Ich brauche, um diese Informationen in Java. Preferebaly mit Jsoup. Element-Feld mit Hilfe von javascript
:
<div id="tags_list">
<a href="/tagsc0t20099.html" style="font-size:14;">разведчик</a>
<a href="/tagsc0t1879.html" style="font-size:14;">Sr</a>
<a href="/tagsc0t3140.html" style="font-size:14;">стратегический</a>
</div>
Java-code:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class Test
{
public static void main( String[] args )
{
try
{
Document Doc = Jsoup.connect( "http://www.bestreferat.ru/referat-32558.html" ).get();
Elements Tags = Doc.select( "#tags_list a" );
for ( Element Tag : Tags )
{
System.out.println( Tag.text() );
}
}
catch ( IOException e )
{
e.printStackTrace();
}
}
}
InformationsquelleAutor der Frage Eugene | 2011-09-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
JSoup ist eine HTML parser, nicht irgendeine Art von eingebetteten browser-engine. Dies bedeutet, dass es völlig in Unkenntnis der Inhalte Hinzugefügt werden, ist das DOM von Javascript nach dem ersten laden der Seite.
Zugang zu dieser Art von Inhalt müssen Sie ein eingebettetes browser-Komponente, gibt es eine Reihe von Diskussionen über was, dass die Art der Komponente, wie zB Gibt es eine Möglichkeit zum einbetten von einem browser in Java?
InformationsquelleAutor der Antwort fvu
Gelöst, in meinem Fall mit com.codeborne.phantomjsdriver
HINWEIS: es ist groovy-code.
pom.xml
PhantomJsUtils.groovy
ClassInProject.groovy
InformationsquelleAutor der Antwort iluhin
Müssen Sie verstehen, was passiert ist :
Den Weg, dies zu verstehen, ist die folgende : Parsen von HTML-code ist einfach. Ausführen von Javascript-code und Aktualisierung der entsprechende HTML-code ist viel komplexer, und es ist die Arbeit von einem browser.
Hier sind einige Lösungen für diese Art von Problemen:
Wenn Sie finden, was werden die Ajax-Aufrufe, die Javascript-code macht, ist, dass das laden von Inhalten, die Sie vielleicht in der Lage sein zu verwenden, das URL für diese Anrufe mit Jsoup. Um dies zu tun, verwenden Sie die Entwickler-Tools aus Ihrem browser. Aber das ist nicht garantiert, um zu arbeiten:
In diesen Fällen müssen Sie "simulieren" die Arbeit, die von einem browser. Glücklicherweise sind solche tools vorhanden sind. Die, die ich kenne und empfehlen, ist PhantomJS. Es funktioniert mit Javascript, und Sie müssen, um es zu starten von Java durch einen neuen Prozess zu starten. Wenn Sie halten möchten, Java, dieser Beitrag listet einige Java-alternativen.
InformationsquelleAutor der Antwort Vic Seedoubleyew
Ich, dass es ein "Weg"! Vielleicht ist es mehr ein "workaround" als "Weg... Der folgende code überprüft, sowohl für die meta-Attribut "REFRESH" - und javascript-Weiterleitungen... Wenn einer von Ihnen vorhanden ist
RedirectedUrl
variable festgelegt ist. So wissen Sie Ihre Ziel... Dann kann man abrufen der Ziel-Seite und gehen Sie auf...InformationsquelleAutor der Antwort salihcenap
Gibt es einen Weg, um auch javascript-Inhalte erzeugt beim Parsen Seite mit Jsoup?
Werde ich denke mal NICHT, darüber nachzudenken, wie schwierig dies werden würde, ohne Gebäude eine gesamte javascript-interpreter in Java.
InformationsquelleAutor der Antwort James