Java 如何在不调用直接父级的情况下解析HTML
我想用jsoup解析这个HTML,但是我需要在不使用“更改类名”类的情况下提取标题和副标题,因为类名总是在更改。我只需要“h1”属性和“p”中的文本 Html:Java 如何在不调用直接父级的情况下解析HTML,java,html,parsing,jsoup,Java,Html,Parsing,Jsoup,我想用jsoup解析这个HTML,但是我需要在不使用“更改类名”类的情况下提取标题和副标题,因为类名总是在更改。我只需要“h1”属性和“p”中的文本 Html: <header class="my header"> <div class="row"> <h3>I don't want this </h3> <div class="Changing class name"> <
<header class="my header">
<div class="row">
<h3>I don't want this </h3>
<div class="Changing class name">
<h1>The headline </h1>
<p class=" my subtitle">
The subtitle
</p>
</div>
</div>
</header>
我不要这个
标题
副标题
我想发表评论,但现在还不能
我知道有一个函数getElementsByTag()
,可以用来获取
的每个元素,因此如果您知道只有标题在使用
,可以使用这个函数
您也可以使用select()
()来选择标题或例如副标题
您没有说副标题的类发生了变化,因此我假设您可以查询my subtitle类的
标记,我们可以这样使用getElementsByTag:
String MyTitle = doc.getElementsByTag("h1").get(0).text();
或者我们可以通过这种方式使用select(工作速度更快):
关于副标题,我添加了一个检查,以避免在字符串中输入NULL:
Element Subtitle = doc.select("p.my").first();
if (Subtitle != null) {
String MySubtitle = doc.select("p.my").text().trim();}
我不太了解JSoup,但是如果您不想使用该类,您可能必须确保结构始终相同,然后通过它们的路径访问元素,即header.div.div.h1
和header.div.div.p
(如果有多个div,您可能还需要一个常量索引)。谢谢。部分工作正常。我忘了提到,但有时有些文章没有副标题,所以当我执行String articlessubtitle=doc.getElementsByTag(“p”).get(0.text();这里没有“p”我得到了例外好吧,你可以检查列表或者你从getElementsByTag()得到的任何东西的大小是否大于0,基于这个get(0)与否,我不知道我真的不喜欢整个站点的解析,它感觉是如此静态和错误。它的返回值为NULL,所以我在将其保存为字符串之前添加了一个检查
Element Subtitle = doc.select("p.my").first();
if (Subtitle != null) {
String MySubtitle = doc.select("p.my").text().trim();}