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

Jsoup在两个标记之间获取html

廖弘伟
2023-03-14

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

但是,是否可以收集两个标记之间的所有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>

?

共有1个答案

夹谷星纬
2023-03-14

哎哟这种HTML不太容易使用。我想你可能是在刮东西,所以我知道有时候这是我们要处理的事情。你给这个jsoup加了标签,所以我要试试看。通常情况下,没有选择器可以处理这样的非结构化HTML。您可以做的是选择第一个h2的所有下一个同级,然后删除第二个h2的所有下一个同级。为了增加痛苦,我们只能通过其文本内容来识别节标题,因此我们需要使用: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输出:第一个选择器返回一个包含以下元素的Elements对象:

[h3,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p拇指,p,p,p,p,p,p,ul、 第三,第四,第四,第三,第二,第三,第三,第三,第三,第三,第四,第四,第四,第四,第三,第四,第三,第三,第三,第三,第三,第三,第三,第二,第三,第三,第三,第二,拇指拇指拇指拇指拇指,第四,第,第四,第三,第,第三,第三,第二,第二,拇指,第三,拇指拇指,第二,第三,第二,第二,拇指,第三,第二,拇指,第二,第三,第二,拇指,第二,拇指,第三,第三,第三,第二,第二,拇指拇指,第三,第二,第二,第三,第二,第三,第三,第三,第三,第二,第二,第二,第三,拇指拇指,第三,第三,第三,第二,第二,第二,第二保险商实验室,保险商实验室,保险商实验室,保险商实验室,保险商实验室,保险商实验室,ul,ul,ul,ul,ul,ul,ul,ul,ul,ul,ul,ul,ul,h2,p,p,p,p,ul,ul,ul,ul,ul,ul,ul,ul,ul,ul,ul,ul,ul

其中第一个h3表示导航,最后一个p包含一个

[h3, p, p, p, p, h3, p, p, p, h3,div.thumb,div.thumb, p, ul, 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表示您引用的“查看”。选择(“h2”)和删除导致:

[h3,p,p,p,p,h3,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,ul,ul,ul,ul,ul,p,ul,ul,h3,p,p,p,p,p,p,p,p,p,p,p]

其中包含“绕过”和“查看”之间的所有元素。

 类似资料:
  • 我正在从事一个个人项目,希望解析这个html并从中检索信息。 基本上,我希望获得 标记中给出的所有信息,为此,我在java中使用JSOUP。 我使用这段代码来获取,但这是在一个段落中给出所有值。 我也试过了 但他的观点是空泛的。 有人能帮我以更好的方式获得这些数据吗?

  • 我试图获取提供的html(跨度)之间的数据(在本例中为31) 以下是原始代码(来自chrome中的inspect elements) 我有一个包含页面源代码的富文本框,下面是相同的代码,但是在富文本框的第51行: 我将如何做到这一点?我已经尝试了几种方法,但似乎都不适合我。 我试图从这一页检索点值:http://www.subxcess.com/sub4sub.php根据谁潜艇你的数量变化。

  • 嗨,我有一个html文件解析的场景。我正在使用jsoup解析html文件,解析后我想提取头标记(h1、h3、h4)。我用过医生。select()但它将只返回标题标记值,但我的要求是我应该提取h1到h3或h4之间的标记,反之亦然。 所以这里首先搜索html字符串是否包含任何H1,H3,H4。这里我们有h4,所以包括h4,它应该搜索下一个h1或h3,直到h3我们提取字符串并把它放在一个单独的html文

  • 问题内容: 我正在尝试获取2 h1标签之间的所有html。实际的任务是根据h1(heading 1)标签将html分成几帧。 感谢任何帮助。 谢谢苏尼尔 问题答案: 如果要获取和处理两个连续标签之间的所有元素,则可以处理同级对象。这是一些示例代码:

  • 问题内容: 我陷入MySQL中的问题。我想获取两个日期时间项之间的记录数。 例如: 我的表中有一列名为“ created”的数据类型。 我想计算在“今天的4:30 AM”和“当前日期时间”之间的日期时间创建的记录。 我尝试了MySQL的一些功能,但仍然没有运气。 你能帮我吗?谢谢。 问题答案: 可能与: 或使用: 您可以根据需要更改日期时间。可以使用或获取所需的日期。