2013-05-27 26 views
15

kullanarak komut dosyası içinde metin elde edin Bir URL'yi okumak için Jsoup kütüphanesini kullanıyorum. Bu url, birkaç <script> etiketinde metin içeriyor. Her bir <script> etiketindeki metni almam mümkün mü? JSoup'in buna izin vermediğinin farkında olduğum için bir Javascript dosyasını ayrıştırmak istemediğimi lütfen unutmayın. URL'nin gerçek kaynak kodunun bir komut dosyası etiketinde metni var, buna ihtiyacım var.Java - Jsoup

doc = Jsoup.connect("http://www.example.com").timeout(10000).get(); 

Element div = doc.select("script").first(); 
for (Element element : div.children()) { 
System.out.println(element.toString()); 
} 

Bu komut dosyası etiketlerden biri kaynak kodundan böyle görünüyor:

<script type="text/javascript"> 
(function() { 
... 
})(); 
</script> 

cevap

21

Evet. Tüm script etiketini almak için Element#getElementsByTag()'u kullanabilirsiniz. Her komut dosyası etiketleri DataNode ile temsil edilir.

Document doc =Jsoup.connect("http://stackoverflow.com/questions/16780517/java-obtain-text-within-script-tag-using-jsoup").timeout(10000).get(); 
Elements scriptElements = doc.getElementsByTag("script"); 

for (Element element :scriptElements){     
     for (DataNode node : element.dataNodes()) { 
      System.out.println(node.getWholeData()); 
     } 
     System.out.println("-------------------");    
    } 
+0

Teşekkür ederim @KenChan, Mükemmel çalıştı, ben 'string scriptdata kullanıyorum = node.getWholeData();' ** Ancak sayfadaki ikinci betiği aldınız mı? ** – Florida

16

Alternatif olarak, bir elemanın iç html döner Element#html() yöntemi kullanabilir.

1.11.1 beri: Eleman # seçmek aramaları iki yöntem ile kullanın daha az verimli yaklaşım: Bir Jsoup 1.10.3 kadar daha verimli Element#selectFirst() yöntemi

 
Document doc = Jsoup.connect("http://www.example.com").timeout(10000).get(); 
Element scriptElement = doc.selectFirst("script"); 

// Don't forget to check scriptElement is not null... 

String jsCode = scriptElement.html(); 

kullanabilirsiniz() ve Elemanlar # ilk()

 
Document doc = Jsoup.connect("http://www.example.com").timeout(10000).get(); 
Element scriptElement = doc.select("script").first(); 

// Don't forget to check scriptElement is not null... 

String jsCode = scriptElement.html(); 
2
Document doc = Jsoup.parse(html); 
Elements scripts = doc.getElementsByTag("script"); 
for (Element script : scripts) { 
    System.out.println(script.data()); 
} 
+1

Bu kod soruyu yanıtlayabilirse de, , _why_ ve/veya _how_ ile ilgili yanıtları ile ilgili ek bağlam sağlayarak, sorunun uzun vadeli değerini önemli ölçüde artıracaktır. Lütfen bazı açıklama eklemek için cevabınızı [düzenleyin]. –