当前位置: 首页 > 知识库问答 >
问题:

如何用Java中的Jsoup从javascript变量解析html?

越嘉石
2023-03-14

我使用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变量之类的东西。

共有2个答案

阚夕
2023-03-14

我不太确定答案,但我在这里之前看到了类似的情况。

您可能可以使用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
}

希望它会有所帮助。

寇升
2023-03-14

您可以使用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表,但不确定如何提取集群名和主机名- 更新:- 表中可能有两个集群名称,如下所示- 现在,如果您看到上面,我有两个集群名称--一个是,另一个是,所以我想找到所有仅为集群名称关闭的计算机。