gpt4 book ai didi

java - Jsoup tagName() 给出错误的标签

转载 作者:行者123 更新时间:2023-11-30 07:37:14 26 4
gpt4 key购买 nike

我有以下 HTML 片段:

    <p>                         
<a href="http://www.today.com/video/jill-martin-rescues-savannah-guthrie-from-her-guest-room-mess-604921923959" rel="nofollow"> Jill Martin rescues Savannah Guthrie from her guest room mess </a>
<a href="http://www.today.com/video/4-simple-ways-to-clear-your-clutter-this-year-596741699678" rel="nofollow"> 4 simple ways to clear your clutter this year </a>
<a href="http://www.today.com/video/staying-home-on-new-years-eve-great-ideas-to-celebrate-at-home-594027587814" rel="nofollow"> Staying home on New Year's Eve? Great ideas to celebrate at home </a>
<a href="http://www.today.com/video/heres-how-to-set-a-functional-christmas-table-591622211749" rel="nofollow"> Here's how to set a functional Christmas table </a>
</p>

本文来自网页http://www.today.com/home/decorating-ideas-david-bromstad-shares-tips-living-luxury-less-t70861

还有一段代码:

    Document document = Jsoup.connect("http://www.today.com/home/decorating-ideas-david-bromstad-shares-tips-living-luxury-less-t70861").get(); 
String tag = null;
for (Element element : document.select("*") ) {
tag = element.tagName();

if ( "a".equalsIgnoreCase( tag ) ) {
LOGGER.info("element : {}; nextElementSibling: {}", element.ownText(), element.nextElementSibling() );
}


if ( StringUtils.containsIgnoreCase(element.ownText(), "Jill Martin rescues Savannah") ) {
LOGGER.info("element : {}; nextElementSibling: {}", element.ownText(), element.nextElementSibling() );
LOGGER.info("tag : {}; nextNodeSibling: {}", tag, element.nextSibling() );
LOGGER.info("element : {}; previousElementSibling: {}", element.ownText(), element.previousElementSibling() );
}

}

我得到的输出:

    element : Jill Martin rescues Savannah Guthrie from her guest room mess; nextElementSibling: null
tag : h2; nextNodeSibling:
element : Jill Martin rescues Savannah Guthrie from her guest room mess; previousElementSibling: null

存在一些问题:

  1. 从主要 HTML 源代码中,有许多标记为 a 的元素。但我正在检查的 HTML 小片段中没有一个
  2. 出现 <a>被捕获为 <h2>
  3. element.nextElementSibling()大多数情况下为空

但是,如果仅针对小块进行测试,问题就会消失。因此,当标 checkout 现在较大的 HTML 源代码中时,Jsoup 似乎无法正确识别标签。

知道为什么吗?

谢谢。

编辑2

该练习的目的是清理网页。这就是为什么我迭代了整个 HTML,而不是像 @Stephan 所建议的那样迭代特定部分。我只选择了一个有问题的特定部分。

但是在检查了 @luksch 的回复后,我重新查看了原始 HTML,发现了拍摄中的异常之处。该代码总体上查看所有标签,但对 a 给出异常(exception)。 。在主要来源中,我们有 article接下来是 a , figure (其中包含 iimgimgsmallsmall )、 h2 。该问题似乎所有标签(除 a )都被删除(按要求工作),但它们的 text被抛在后面。这就是为什么我最终留下 <a href="http://www.today.com/video/jill-martin-rescues-savannah-guthrie-from-her-guest-room-mess-604921923959" rel="nofollow"> Jill Martin rescues Savannah Guthrie from her guest room mess </a>这不在原始 HTML 源代码中。

吉尔·马丁 (Jill Martin) 将萨凡娜·格思里 (Savannah Guthrie) 从困惑的客房中救了出来 文本来自 <h2>但是<h2>被删除并留下其文本。有趣的是,Jsoup 仍然将文本识别为来自 h2 ,尽管最终输出没有 h2 .

最佳答案

您提供的 URL 包含此元素:

<a class="player-tease-link" href="http://www.today.com/video/jill-martin-rescues-savannah-guthrie-from-her-guest-room-mess-604921923959">
<figure class="player-tease">
<i class="player-tease-icon icon-video-play"></i>
<img class="tease-icon-play" src="http://nodeassets.today.com/img/svg/641a740d.video-play-white.svg" alt="Play">
<img class="tease-image" src="http://media1.s-nbcnews.com/j/MSNBC/Components/Video/__NEW/tdy_guth_clutter_160120.today-vid-post-small-desktop.jpg" title="Jill Martin rescues Savannah Guthrie from her guest room mess" alt="Jill Martin rescues Savannah Guthrie from her guest room mess">
<small class="tease-sponsored">Sponsored Content</small>
<small class="tease-playing">Now Playing</small>
</figure>
<h2 class="player-tease-headline">Jill Martin rescues Savannah Guthrie from her guest room mess</h2>
</a>

看来您确实将苹果与橙子进行了比较,这意味着您提供的 html 片段不是原始 HTML 的一部分。我猜你使用了一些已经更改了 HTML 的提取工具。请注意,a 元素不包含任何自己的文本!

一个好主意是遵循@Stephan的建议并学习如何使用CSS selectors properly 。这应该比选择全部然后在程序代码中手动过滤要高效得多。以下是您可以执行的操作的示例:

 Elements interestingAs = document.select("a:matches(^Jill Martin)");

这将选择包含以“Jill Martin”开头的文本的所有 a 元素。

关于java - Jsoup tagName() 给出错误的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35217222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com