【问题标题】:How to parse div in this html code?如何在这个 html 代码中解析 div?
【发布时间】:2017-09-05 02:06:26
【问题描述】:

我有以下 html html 代码:

我要解析的文本用红色箭头显示。这就是我尝试解析h2的方式:

Elements elements = document.select("div#app div#timetable-content-holder h2");

但不幸的是,elements 的大小为零。

但我检查了 document.select(div#app).size() 是 1,但 document.select(div#app div#timetable-content-holder).size() 是 0。如果它是零,这意味着我不能对元素执行 for 循环,也永远无法实现图像上显示的其他文本,因为它们在这个div 里面。我想问题是timetable-content-holder 有一些data-reactroot。我不知道它为什么在那里。 我通过 URL 引用该页面。 如何解决这个问题呢?为什么elements 的大小总是为零?

HTML代码供需要者使用(需要解析的文字标注)

    <div id="app">

<div data-reactroot="" id="timetable-content-holder">

<div> </div> 

<div> </div> 

<div> </div> 

<div> </div> 

//a lot of div above(closed) 

<h2>I need it1</h2> ( how to get this) 



<div class="timetable-holder gr-holder">

<div class="timetable-day gr">

<div class="timetable-day-title">I need it2</div>

<div class="timetable-card" data-day="1" data-time="1">

<div class="timetable-time">

08:00<!-- /react-text --> // I need it3

<!-- react-text: 57 --> <!-- /react-text --><!-- react-text: 58 -->

08:50<!-- /react-text --></div><span class="font-icon down-arrow"></span><div class="timetable-subject" title="title">I need it4</div>

//below is also closing divs  

【问题讨论】:

  • 能否请添加 html 而不是屏幕截图?
  • @soorapadman 完成!

标签: android html jsoup


【解决方案1】:

你可以编写下面的代码来得到结果。 首先创建 id 为 timetable-content-holder 的元素并使用 get(0)(否则它将返回元素列表),这样文档将只返回 id 的第一个元素。然后你可以直接从那个元素中选择h2,你会得到你的第一个答案
ele1:是你要解析的第一个文本等等

Element ele1 = document.select("div[id=timetable-content-holder]").get(0);
ele1 = ele1.select("h2").get(0);
Element ele2 = document.select("div[class=timetable-day-title]").get(0);
Element ele3 = document.select("div[class=timetable-time]").get(0);
Element ele4 = document.select("div[title=Subject]").get(0);

上面代码的结果是:

IT NEED TO BE PARSED
THIS IS ALSO
"08:00"
Subject

【讨论】:

  • 您的意思是可以引用子代而不引用其父代?例如你提到timetable-day-title而不是参考apptimetable-cotent-holder和其他两个div
  • 我检查了以下内容:document.select("div.timetable-day-title").size() 为零。为什么?
  • 是的,我们可以直接引用子代而不引用父代。在select 中,我们需要传递 CSS 路径。
  • 我在本地系统中检查了document.select("div.timetable-day-title").size()没有问题,大小为1
  • 我试图通过String doc = Jsoup.connect(#yourURL).get().toString(); System.out.println(doc); 打印给定 URL 的文档,我们发现在解析文档时缺少一些 HTML。然后我尝试通过右键单击谷歌浏览器打开给定 URL 的页面源。那么我们只能看到&lt;div id="app"&gt;&lt;/div&gt;(Same as jsoup)。所以我怀疑是 div id="app" 里面的数据是通过 javascript 来的,而 JSoup 不支持 java 脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
  • 2020-06-03
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多