我使用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
跨度中获取文本?该解决方案必须应用于数千个不同的页面,因此我不能依赖具有相同名称的javascript变量之类的东西。
我不太确定答案,但我在这里之前看到了类似的情况。
您可能可以使用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
}
希望它会有所帮助。
您可以使用Jsoup解析所有<code>
数据节点
一个数据节点,用于样式、脚本标签等内容,其中内容不应显示在text()中。
Elements scriptTags = doc.getElementsByTag("script");
这将为您提供tag的所有元素。
然后可以使用< code > 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 - DataNode
问题内容: 在页面中,我想选择一个变量的值。以下是页面的摘要。 我的目的是使用来从此页面读取变量的值。有可能吗?如果是,那怎么办? 问题答案: 由于jsoup不是javascript库,因此有两种方法可以解决此问题: A.使用JavaScript库 优点: 全面的Javascript支持 缺点: 附加的天秤/依赖项 B.使用Jsoup +手动解析 优点: 无需额外的库 足以完成简单的任务 缺点:
问题内容: 这是我必须从中提取值5390.85,5428.15,5376.15和5413.85的HTML源。我想使用jsoup做到这一点。但是我对jsoup比较陌生(今天我开始使用它)。那我该怎么办呢? 我已经使用jsoup提取了网站的内容。但是如何提取我需要的值?提前致谢 问题答案: 尝试这样的事情: 这是打印输出:-
我正在尝试访问由Javascript创建的网页上的一些内容。然而,我希望访问的内容是在页面加载后由javascript创建的,因此当我尝试用Jsoup解析它时,无法找到这个Html源代码块。 我使用HtmlUnit获取Html源代码的代码如下: 但是当我运行它时,应该创建的Html没有被打印出来。我想知道如何获得这个由Javascript创建的Html源代码,使用HtmlUnit,然后获得所述结果
问题内容: 我正在使用BeautifulSoup和Requests抓取一些网站。我正在检查的页面的标签中包含其数据。看起来像这样: 有没有一种方法可以通过此脚本标签内的变量创建python字典或json对象?这比尝试通过BeautifulSoup获取值要好得多。 问题答案: 如果您使用BeautifulSoup获取标签的内容,则该模块可以使用一些字符串魔术来完成其余的工作: 上面的和组合在Java
问题内容: 我正在尝试使用jsoup解析HTML。这是我第一次使用jsoup,并且我也阅读了有关它的一些教程。以下是我要解析的HTML表- 如果您看到我的下表,则它现在有3个(我只是为了理解目的将其缩短为3个表行,但总的来说会更多)。现在,我想从我的下表中提取出它的对应信息,例如-我将提取其群集状态及其状态为关闭的所有主机名。 正如你可以看到下面的群集名称,我有两个主机名和其地位,但地位。 因此,
正如您在下面看到的集群名称,我有两个主机名和,其中状态为,但状态为。 因此,我将打印作为集群名,并打印作为主机名,因为它已关闭。使用JSOUP可以做到这一点吗? 到目前为止,我能够使用jsoup提取整个HTML表,但不确定如何提取集群名和主机名- 更新:- 表中可能有两个集群名称,如下所示- 现在,如果您看到上面,我有两个集群名称--一个是,另一个是,所以我想找到所有仅为集群名称关闭的计算机。