从页面的无元素部分提取文本

时间:2012-05-18 19:53:29

标签: java jsoup

我目前在网页上有以下HTML代码部分:

<td class="movieclass">
<b>Cinema 1</b>
    10.30 AM. + 12.45 + 3.00 + 5.15 + 7.30 + 9.45 + 12.00 MN.
<br />

<b>Cinema 2</b>
    3.00 + 5.15 + 7.30 + 9.45 + (12.00 MN. THRS./FRI.)
<br />

<b>Cinema 3</b>
    2.30 + 4.45 + 7.00 + 9.15  + (12.15 PM. + 11.30 PM. THRS./FRI.)
<br />

<b>Cinema 4</b>
    11.30 AM. + 2.00 + 4.30 + 7.00 + 9.30 + 12.00 MN.
<br />

<b>Cinema 5</b>
    10.30 AM. + 1.00 + 3.30 + 6.00 + 8.30 + 11.00 PM.
<br />
</td>

我正在尝试使用jsoup来尝试提取时间,但是对于特定的电影来说。我假设时间线在段落(p标签)中我可以使用以下内容进行提取:

Elements movieTime = doc.select("a:contains(Cinema 3) + p");

但是,在上面的代码中,带有时间的行没有标记。有没有办法提取某个电影院的时间线?

2 个答案:

答案 0 :(得分:0)

如果您提供的文档始终保持相同的结构,则始终可以手动执行此操作。然后你可以简单地将所有文档读取到某种List。对于例如ArrayList中。

然后遍历该列表并使用if语句检查

if (line.get(0).equals("Cinema 1")) {
  timeOfCinema1 = line.get(1);
} 

但这是最简单而不是“好”的方式。您可以使用Map<String, String>来映射线条,或创建一个包含文档结构的对象。

希望这有帮助。

答案 1 :(得分:0)

我决定使用页面的HTML创建一个jsoup文档:

String doc = Jsoup.connect("http://www.example.com").get().html();

然后在文档上做了一些字符串替换:

doc = doc.replaceAll("<b>","<p>");
doc = doc.replaceAll("</b>","</p><p>");

替换看起来有点极端,因为它正在浏览整个文档,但我只需要在我需要提取的部分周围添加一些标签。最后提取:

Document newDoc = Jsoup.parse(doc);
String movieTimes = newDoc.select("p:contains(Cinema 2) + p").text();
System.out.println(movieTimes); //Should print only text within <p> after Cinema 2