如何在Java中使用Jsoup从javascript变量解析html
How to parse html from javascript variables with Jsoup in Java?
我使用Jsoup来解析html文件,并从元素中提取所有可见的文本。问题是javascript变量中有一些html位显然被忽略了。把这些碎片弄出来的最佳解决方案是什么?
示例:
<!DOCTYPE html>
<html>
<head>
<script>
var html = "<span>some text</span>";
</script>
</head>
<body>
<p>text</p>
</body>
</html>
在这个例子中,Jsoup只从p
标签中提取文本,这是它应该做的。我如何从var html
span中提取文本?该解决方案必须应用于数千个不同的页面,所以我不能依赖于具有相同名称的javascript变量。
您可以使用Jsoup将所有<script>
-标记解析为DataNode
-对象。
DataNode
一个数据节点,用于样式、脚本标记等的内容,其中的内容不应显示在text()中。
Elements scriptTags = doc.getElementsByTag("script");
这将为您提供标记<script>
的所有元素。
然后可以使用getWholeData()
-方法提取节点。
// Get the data contents of this node. String getWholeData()
for (Element tag : scriptTags){
for (DataNode node : tag.dataNodes()) {
System.out.println(node.getWholeData());
}
}
Jsoup API-数据节点
我不太确定答案,但我以前在这里看到过类似的情况。
您可能可以使用Jsoup和手动解析来根据该答案获取文本。
我只是针对您的具体情况修改了这段代码:
Document doc = ...
Element script = doc.select("script").first(); // Get the script part
Pattern p = Pattern.compile("(?is)html = '"(.+?)'""); // Regex for the value of the html
Matcher m = p.matcher(script.html()); // you have to use html here and NOT text! Text will drop the 'html' part
while( m.find() )
{
System.out.println(m.group()); // the whole html text
System.out.println(m.group(1)); // value only
}
希望对你有所帮助。
相关文章:
- 将函数的上下文应用于javascript变量
- 如何通过ajax刷新JSF填充的javascript变量
- Javascript变量赋值|
- 限制javascript变量的最小/最大整数
- 来自文本输入null的html javascript变量
- 访问jsrender模板中的全局javascript变量并更新它
- 从数据库中获取数据并插入JavaScript变量
- 如何将javascript变量传递到Meteor Spacebars模板中
- 将JavaScript变量保存到Rails模型
- 在if语句下的html中使用javascript变量
- Javascript变量分配-按类别
- 操作javascript变量[HTML]以只显示文本
- 无法比较javascript变量
- 如何将smarty变量与javascript变量进行比较
- 如何使用PHP将javascript变量添加到mysql数据库中
- Javascript 变量使用 jquery 查找变量
- 重新加载页面时Javascript变量发生变化
- 在asp classic中使用javascript变量
- 全局Javascript变量变为null
- 如何向服务器端提交javascript变量