2013-05-27 68 views
15

Tôi đang sử dụng thư viện Jsoup để đọc URL. Url này có văn bản trong một vài thẻ <script>. Tôi có thể lấy văn bản trong mỗi thẻ <script> không? Xin lưu ý rằng tôi không yêu cầu phân tích cú pháp tệp Javascript vì tôi đã biết JSoup không cho phép điều đó. Mã nguồn thực sự của URL có văn bản trong thẻ script, tôi cần nó.Java - Lấy văn bản trong thẻ script bằng cách sử dụng 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()); 
} 

Đây là những gì một trong các thẻ script trông giống như từ mã nguồn:

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

Trả lời

21

Yes. Bạn có thể sử dụng Element#getElementsByTag() để nhận tất cả các thẻ script. Mỗi thẻ tập lệnh sẽ được đại diện bởi DataNode.

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

cảm ơn bạn @KenChan, Nó hoạt động hoàn hảo, tôi đang sử dụng 'Chuỗi scriptdata = node.getWholeData();' ** Nhưng chỉ nhận được tập lệnh thứ hai trên trang? ** – Florida

16

Hoặc, bạn có thể sử dụng phương thức Element#html() trả về html bên trong của phần tử.

Kể từ 1.11.1: Người ta có thể sử dụng hiệu quả hơn phương pháp Element#selectFirst()

 
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(); 

Lên đến Jsoup 1.10.3: Sử dụng cách tiếp cận ít hiệu quả với hai phương pháp các cuộc gọi phần tử # chọn() và Elements # first()

 
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

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung liên quan đến _why_ và/hoặc _how_ nó trả lời câu hỏi sẽ cải thiện đáng kể giá trị dài hạn của nó. Xin vui lòng [sửa] câu trả lời của bạn để thêm một số lời giải thích. –