2

我目前有来自网页的以下 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");

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

4

2 回答 2

0

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

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

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

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

希望这可以帮助。

于 2012-05-18T20:05:29.953 回答
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
于 2012-05-21T07:58:13.313 回答