2017-11-22 4 views
0

Ich versuche, einen Web-Crawler mit JSOUP zu erstellen. Das Problem ist, während es für andere Seiten funktioniert, ist es nicht in der Lage Swiggy Daten zu crawlen. Ich denke, das liegt an dem Vorhandensein eines benutzerdefinierten Tags restaurant-menu. Ich tue dies:Web-Crawler mit JSOUP- kann benutzerdefinierte Tags nicht abrufen

Document document = Jsoup.connect(url).get(); 
Elements document_body = document.select(".layout-wrapper"); 
System.out.println(document_body.html()); 

Und in der Ausgabe, bekomme ich diese:

<div class="restaurant-menu-container"> <restaurant-menu></restaurant-menu> </div>

Der restaurant-menu-Tag ist leer, während, wenn Sie die Website besuchen und seinen Inhalt untersuchen, die gesamte Daten sind in der restaurant-menu Tag:

Ist es aufgrund der benutzerdefinierten Tags oder gibt es einen anderen Grund?

Antwort

0

den Inhalt der restaurant-menu Lesen ist einfach:

document.select("div.restaurant-menu-container.restaurant-menu") 

Aber ... wenn Sie JSoup verwenden (wie gerade, wenn Sie auf die Seite und View Source zu sehen) Sie werden feststellen, dass es keine Inhalte . Dies liegt daran, dass JSoup statischen HTML-Inhalt analysiert und der Inhalt von div.restaurant-menu-container.restaurant-menu dynamisch erstellt wird.

JSoup kann dynamische Inhalte nicht analysieren, wenn Sie - programmatisch - dynamischen Inhalt extrahieren möchten, müssen Sie sich wahrscheinlich etwas wie Selenium ansehen.

0

Hier ist eine tutorial erklärt, wie mit StormCrawler + Selen zu crawlen. SC verwendet Jsoup unter der Haube zum Parsen der HTML-Dokumente und Sie könnten Extraktionsregeln basierend auf XPath schreiben, aber auch dynamisch mit der Seite über NavigationFilters interagieren.