Java - Получить текст в теге script с помощью Jsoup
Я использую библиотеку Jsoup для чтения URL-адреса. Этот url имеет текст в нескольких тегах <script>
. Возможно ли получить текст в каждом теге <script>
? Обратите внимание, что я не прошу проанализировать Javascript файл, поскольку я уже знаю, что JSoup этого не позволяет. Фактический исходный код URL-адреса имеет текст в теге script, мне это нужно.
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 из исходного кода:
<script type="text/javascript">
(function() {
...
})();
</script>
Ответы
Ответ 1
Да. Вы можете использовать элемент # getElementsByTag(), чтобы получить все теги script
. Каждый тег 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("-------------------");
}
Ответ 2
В качестве альтернативы вы можете использовать метод Element#html()
который возвращает внутренний html элемента.
Начиная с 1.11.1: используйте эффективный метод Element#selectFirst()
для поиска элемента script.
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#select()
и Elements#first()
чтобы найти элемент script.
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();
Ответ 3
Document doc = Jsoup.parse(html);
Elements scripts = doc.getElementsByTag("script");
for (Element script : scripts) {
System.out.println(script.data());
}
Ответ 4
В зависимости от вашего случая решение будет таким, как показано ниже.
Document doc = Jsoup.connect("http://www.example.com").timeout(10000).get();
Elements scripts = doc.select("script");
for (Element script : scripts) {
String type = script.attr("type");
if (type.contentEquals("text/javascript")) {
String scriptData = script.data(); // your text from the script
break
}
}