2016-07-04 4 views
2

Ich kam auf etwas wie das, was nicht geklappt hat. Ich versuche, die Texte, die das Schlüsselwort enthalten, allein und nicht den gesamten Text der Webseite zu extrahieren, nur weil die Webseite dieses Schlüsselwort hat.Wie würde ich nur die Texte einer Webseite erhalten, die das benötigte Schlüsselwort mit JSoup enthalten?

String pconcat=""; 

for (i = 0; i < urls.length; i++) { 

Document doc=Jsoup.connect(urls[i]).ignoreContentType(true).timeout(60*1000).get(); 

     for(int x=0;x<keyWords.length;x++){ 
     if(doc.body().text().toLowerCase().contains(keyWords[x].toLowerCase())){ 
       Elements e=doc.select("body:contains("+keyWords[x]+")"); 
       for(Element element : e) 
       { 
       pconcat+=element.text(); 
       System.out.println("pconcat"+pconcat); 
      }  
     } 
     } 
     } 

Betrachten example.com, wenn das Schlüsselwort ich für „Dokumente“ sehen ist, muss ich die Ausgabe als „Dieser Bereich hergestellt wird für illustrative Beispiele in Dokumenten verwendet werden.“ und nichts anderes

+0

Beispiel der Eingabe und Ausgabe/Ergebnis, das Sie versuchen zu finden. Im Moment wissen wir nicht genau, wie Sie dieses Ergebnis begrenzen wollen. – Pshemo

+0

Da Sie bereits Text von Seite haben, iterieren Sie einfach über alle Sätze und wählen Sie diejenigen aus, die das Wort enthalten, nach dem Sie suchen. Dies sollte hilfreich sein: http://stackoverflow.com/a/2687929/1393766 – Pshemo

+0

Eigentlich versuche ich eine bestimmte Webseite zu crawlen und Inhalt zu erhalten, die einem bestimmten Schlüsselwort entsprechen. Mehr wie Keyword-bezogenes Web-Crawling. Ihr Ansatz funktionierte gut für diese Seite, aber nicht für alle sicher. Coz mit example.com, es hat nur 2 Satz. Betrachten Sie eine zufällige Webseite mit Links, Menüs, Tabs, diese Vorgehensweise scheint nicht angemessen. Irgendeine Idee? – Lalitha

Antwort

0

Sie müssen den Textkörper nicht klein schreiben, um den :contains Selektor zu verwenden, es ist case insensitive.

Elemente, die den angegebenen Text enthalten. Die Suche ist case unempfindlich. Der Text kann in dem gefundenen Element oder einem seiner Nachkommen angezeigt werden.

select() wird nur Elemente zurückgeben, wenn es eine Übereinstimmung findet.

Elemente, die die Abfrage (leer, wenn keine Übereinstimmung) entsprechen

Sie brauchen nicht eine if -Anweisung für „Dokumente“ zu überprüfen, nur CSS-Selektoren jedes Element auszuwählen, die dann übereinstimmt Mach etwas mit den Ergebnissen.

Document doc = Jsoup 
      .connect(url) 
      .ignoreContentType(true) 
      .timeout(60*1000) 
      .get(); 

    for (String keyword : keywords) { 

     String selector = String.format(
       "p:contains(%s)", 
       keyword.toLowerCase()); 

     String content = doc 
       .select(selector) 
       .text(); 

     System.out.println(content); 

    } 

Ausgabe

Diese Domäne hergestellt wird für illustrative Beispiele in Dokumenten verwendet werden. Sie können diese Domain in Beispielen ohne vorhergehende Koordination verwenden oder um Erlaubnis bitten.

Verwandte Themen