2013-05-27 5 views
15

Я использую библиотеку Jsoup для чтения URL-адреса. Этот url имеет текст в нескольких тегах <script>. Возможно ли получить текст в каждом теге <script>? Обратите внимание, что я не прошу проанализировать Javascript-файл, поскольку я уже знаю, что JSoup этого не позволяет. Фактический исходный код URL имеет текст в теге скрипта, мне это нужно.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()); 
} 

Это то, что один из тегов сценария выглядят как из исходного кода:

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

ответ

21

Да. Вы можете использовать Element#getElementsByTag(), чтобы получить все теги script. Каждый тег скрипта будет представлен 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

спасибо @KenChan, он отлично работает, я использую 'String scriptdata = node.getWholeData(); ** Но как только получить второй скрипт на странице? ** – Florida

16

В качестве альтернативы можно использовать Element#html() метод, который возвращает внутреннюю HTML элемента.

С 1.11.1: Можно использовать более эффективный метод 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(); 

до Jsoup 1.10.3: использовать менее эффективный подход с двумя методами вызовов Element # выберите() и элементы # первый()

 
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

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно _why_ и/или _how_ он отвечает вопрос значительно улучшил бы его долгосрочное значение . Пожалуйста, отредактируйте свой ответ, чтобы добавить какое-то объяснение. –

Смежные вопросы