我目前在网页上有以下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");
但是,在上面的代码中,带有时间的行没有标记。有没有办法提取某个电影院的时间线?
答案 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