gpt4 book ai didi

java - Jsoup 获取两个标签之间的 html

转载 作者:可可西里 更新时间:2023-11-01 13:15:04 25 4
gpt4 key购买 nike

在类似 http://wikitravel.org/en/San_Francisco 的网站上,“Districts”、“Understand”、“Get in”等部分实际上并不包含 HTML 中的整个部分。部分实际上只是标题中的跨类。因此,不能简单地通过选择 id 来获取 wiki 文档的某些部分。

但是,是否可以收集两个标签之间的所有html?假设我想要“四处走走”部分。我将如何发布一个选择器,说明

之间的所有 html
<h2><span class="editsection">[<a href="/wiki/en/index.php?title=San_Francisco&amp;action=edit&amp;section=15" title="Edit section: Get around">edit</a>]</span> <span class="mw-headline" id="Get_around">Get around</span></h2>

<h2><span class="editsection">[<a href="/wiki/en/index.php?title=San_Francisco&amp;action=edit&amp;section=22" title="Edit section: See">edit</a>][<a href="#See" title="click to add a see listing" onclick="addListing(this, '22', 'see', 'San_Francisco');">add listing</a>]</span> <span class="mw-headline" id="See">See</span></h2>

?

最佳答案

哎呀。该 HTML 不是很容易使用。我认为你可能正在做一些抓取,所以我知道有时这就是我们处理的事情。你标记了这个 ,所以我会尝试一下。通常没有选择器可以像这样处理相当非结构化的 HTML。您可以做的是选择第一个 h2 的所有下一个 sibling ,然后删除第二个 h2 的所有下一个 sibling 。更痛苦的是,我们只能通过文本内容来识别节标题,因此我们需要使用 :contains选择器。像这样:

Document doc = Jsoup.connect("http://wikitravel.org/en/San_Francisco").get();
//select all "next siblings" of the "Get around" h2
Elements section = doc.select("h2:contains(Get around) ~ *");
//select all "next siblings" of the "See" h2 and remove them
section.select("h2:contains(See) ~ *").remove();
//remove the second h2
section.select("h2").remove();
//section now contains the elements between "Get around" and "See"
String sectionHtml = section.html();

下面是用 jQuery 做同样事情后的一些 Firebug 输出:第一个选择器返回一个包含这些 Element 的 Elements 对象:

[h3, p, p, p, p, h3, p, p, p, h3, div.thumb, div.thumb, p, ul, p, p, p, p, p, p, p, div.thumb, ul, ul, div.thumb, ul, ul, p, ul, ul, h3, p, p, p, h3, p, p, p, h3, p, p, p, p, p, p, h2, p, p, ul, ul, ul, h3, p, ul, h3, div.thumb, p, p, p, h3, div.thumb, p, p, p, p, p, h3, p, p, p, p, h3, div.thumb, p, p, p, p, p, h2, h3, div.thumb, p, p, p, p, p, ul, h3, div.thumb, ul, ul, ul, ul, ul, h3, p, h4, ul, h4, ul, h4, p, ul, h4, ul, h3, div.thumb, p, p, p, h3, p, h2, p, p, h2, p, p, p, h2, dl, p, p, p, p, h2, div.thumb, dl, p, p, p, h2, dl, h3, p, p, p, p, p, p, h3, p, ul, p, p, h2, dl, p, p, p, h2, p, p, p, p, h2, p, p, p, p, p, p, h2, p, p, p, p, h2, h3, ul, h3, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, h2, p, p, ul, p, div.route_box, p, p, p, p, p, table, p, div, p, p, p, p]

哪里第一个h3说“导航”和最后p包含 <br> (奇怪的 HTML,是的)。第二个选择和删除将其缩减为:

[h3, p, p, p, p, h3, p, p, p, h3, div.thumb, div.thumb, p, ul, p, p, p, p, p, p, p, div.thumb, ul, ul, div.thumb, ul, ul, p, ul, ul, h3, p, p, p, h3, p, p, p, h3, p, p, p, p, p, p, h2]

哪里第一个h3仍然是“导航”和最后一个 h2是您引用的“查看”。 select("h2") 和 remove 结果如下:

[h3, p, p, p, p, h3, p, p, p, h3, div.thumb, div.thumb, p, ul, p, p, p, p, p, p, p, div.thumb, ul, ul, div.thumb, ul, ul, p, ul, ul, h3, p, p, p, h3, p, p, p, h3, p, p, p, p, p, p]

其中包含“Get around”h2 之间的所有元素和“见”h2 .

关于java - Jsoup 获取两个标签之间的 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11660976/

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