【问题标题】:Extract text from element-less section of page从页面的无元素部分中提取文本
【发布时间】:2012-05-18 19:53:28
【问题描述】:

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

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

【问题讨论】:

    标签: java jsoup


    【解决方案1】:

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

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

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

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

    希望这会有所帮助。

    【讨论】:

    • 这是我正在考虑的一种方法,但就像你提到的那样,它并不是很好。在下面发布另一个解决方案。
    【解决方案2】:

    我决定用页面的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      相关资源
      最近更新 更多