繁体   English   中英

使用JSoup检索p标签之间的所有html

[英]Retrieving all html between p tags using JSoup

所以这是场景。 我有一个很大的html文件,我想使用JSoup进行抓取。 我对此并不陌生,并且已经阅读了一些教程和API参考。 我有以下的html块。

<p><a name="bob"></a>
<table class='schedules'>
<tr><td  align='center' colspan="5"><b>Bob the Builder</b><br>
<a href="blah blah" class='tiny'>Blah Blah Blah</a></td></tr>
<tr><td class='bk'><a href="random/randomUrl.htm">Blah</a></td><td class='bm'><a href="random/randomUrl.htm">Blah</a></td><td class='nm'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td></tr>
<tr><td class='bk'><a href="random/randomUrl.htm">Blah</a></td><td class='bk'><a href="random/randomUrl.htm">Blah</a></td><td class='nm'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td></tr>
<tr><td class='bk'><a href="random/randomUrl.htm">Blah</a></td><td class='bm'><a href="random/randomUrl.htm">Blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td></tr>
<tr><td class='bm'><a href="random/randomUrl.htm">Blah</a></td><!--<td class='whoohaa'><a href="random/randomUrl.htm">Blah</a></td>--><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='cc'><a href="random/randomUrl.htm">blah</a></td><td class='cc'><a href="random/randomUrl.htm">Blah</a></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td></tr>
<tr></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td><td class='nm'><a href="random/randomUrl.htm">Blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td></tr>
<tr><td class='sk'><a href="random/randomUrl.htm">Blah</a></td><td class='nm'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td></tr>
</table>
</p>

现在,这些块中有更多的块遵循类似的模式,从而(在第一行中)name属性发生变化(从“ bob”变为其他)。 我想做的是首先能够选择“ bob” p块,然后检索所有html直到最后一行中的终止p块。

我尝试了以下操作:

Elements innerStuff = doc.select("a:contains(bob) ~ *");

但这只给我提供了href属性的链接,我想这是可以预期的。 但是,我正在努力寻找其他方法可以解决此问题?

非常感谢您在这方面的帮助。

根据其名称属性选择标签的更严格的方法是:

doc.select("a[name=bob]")

从那里,您应该能够使用parent()导航到想要的元素(以获取包含链接的p标签)(例如,您需要先调用first()才能获取第一个(也是唯一一个)元素与选择器匹配):

doc.select("a[name=bob]").first().parent()

但是,存在一个问题:解析的HTML文档与原始HTML不同:这是原始HTML结构:

p
    a[name=bob]
    table
        ...

解析后的HTML如下所示:

p
    a[name=bob]
table
    ...
p

因此,从链接标记开始,并获取该表的元素,您将需要上一层(到该段落)并获取下一个元素:

doc.select("a[name=bob]").first().parent().nextElementSibling()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM