使用jsoup来解析具有某个开头的类的html

时间:2014-09-04 10:43:21

标签: jsoup

标题很奇怪,我知道。我不知道如何更好地解释它。

我正在使用jsoup来解析XML。这就是我现在这样做的方式:

Elements dan = doc.select("table.ednevnik-seznam_ur_teden tbody tr:eq(0) th:eq("+i+") div");

所以我正在解析类名为“ednevnik-seznam_ur_teden”的元素......

但现在网站管理员对其进行了更改,以便每天都有不同的类名。它仍然以“ednevnik-seznam_ur_teden”开头,但还有一些内容。

示例:“ednevnik-seznam_ur_teden 123”

是否可以只查找类名的某个开头然后解析它?例如,如果calss名称以“ednevnik-seznam”开头,它将解析它。

可以替换所有内容的东西,例如SQL中的%。

编辑:这是我更改代码的方式,但仍无效:

Elements dan = doc.select("table[class^=ednevnik-seznam_ur_teden] tbody tr:eq(0) th:eq("+i+") div");

深入解释

我很乐意发布HTML代码,但我无法访问它。如果我检查元素然后从那里复制/粘贴它,代码就太乱了。所以这是我要解析HTML的网站:https://www.easistent.com/urniki/cc45c5d0d303f954588402a186f5cdba5edb51d6/razredi/28396

到目前为止,这是我用它做的代码。

for (int i = 1; i <= 5; i++)
                {
                    Elements dan = doc.select("table[class^=ednevnik-seznam_ur_teden] tbody tr:eq(0) th:eq("+i+") div");
                    for (int b = 1; b <= 11; b++)
                    {
                        Elements predmeti = doc.select("table[class^=ednevnik-seznam_ur_teden] tbody  tr:eq("+b+") td:eq("+predmet+") td[class=text14 bold]");
                        Elements ucilnice = doc.select("table[class^=ednevnik-seznam_ur_teden] tbody  tr:eq("+b+") td:eq("+predmet+")   div[class=text11]");
...

基本上我对此做了什么,我特意解析每个表元素。

这一直有效,直到网站上发生了变化。现在,表列元素不再具有相同的类。他们过去常常是“ednevnik-seznam_ur_teden”,但现在他们改变了对哪一天的看法。当前突出显示的列具有不同的类名。

所以现在这个html解析器代码会解析除突出显示的列之外的所有内容。

1 个答案:

答案 0 :(得分:0)

您应该可以使用CSS选择器来选择以“ednevnik-seznam_ur_teden”开头的项目。

在您的情况下,您的选择器将是:

Elements dan = doc.select("table[class^=ednevnik-seznam_ur_teden]");

这表示选择所有类名称以ednevnik-seznam_ur_teden开头的表。

作为参考,我发现jsoup Selector文档对示例非常有帮助。