Java jsoup 取得html中的table里的内容

Java jsoup 取得html中的table里的内容,第1张

import orgjsoupJsoup;

import orgjsoupnodesDocument;

import orgjsoupselectElements;

public class Test {

    public static void main(String[] args) {

         String str = "<table><tr><td>user</td><td>cc</td></tr><tr><td>pass</td><td>123</td></tr></table>";

        Document doc = Jsoupparse(str);

        Elements trs = docselect("table")select("tr");

        for(int i = 0;i<trssize();i++){

            Elements tds = trsget(i)select("td");

            for(int j = 0;j<tdssize();j++){

                String text = tdsget(j)text();

                Systemoutprintln(text);

            }

        }

    }

}

运行结果 :

user

cc

pass

123

比如,我们进入百度的新闻界面,每一个标题背后都是一个链接;而我需要

答:直接用>

1你现在的代码定位的是所有包含"class=nlctd1"的语句。用同样的方法可以定位class="nlctd2",然后用getElementsByTag("a")加html()或字符串截取的方法可以提取出你要的内容

2有没有方法可以根据现在的位置截取下一个td标签值呢?这个问题用你的例子不好说,比如在你的class=nlctd1里包含多个元素,例如<div>题名与责任</div> <div>111</div> <div>22</div> ,这种情况你通过定位 class=nlctd1后,在for (Element element : td) 循环里就可以依次截取下一个标签里的内容了!

这段html实际上是不符合规范的。在用jsoup解析时会出现问题。

我想到一个办法解决这个问题。

首先我想你应该是想得到 标题、馆藏复本的数目、可借复本的数目、朱印宏编著和长江出版社。

所以我们先把上面html里面的文字全部得到即:

java开发解析 馆藏复本:3 可借复本:0 朱印宏编著 长江出版社

然后我想在这段文字中 “馆藏复本:”、“可借复本:”、“编著” 这几个字应该是固定不变的。所以我们可以用正则表达式去对它进行解析,得到你想要的文字。

代码如下:

public class Test {

public static void main(String[] args) {

String html = "<div class=\"list_books\" id=\"list_books\"><td>java开发解析</td><p><span><strong>馆藏复本:</strong>3 <br /> <strong>可借复本:</strong>0 </span>朱印宏编著 <br /> 长江出版社</p> </div>";

Document doc = Jsoupparse(html);

String e = docselect("#list_books")text()replaceAll("[\\s]+", "");

//Systemoutprintln(e);

Pattern p = Patterncompile("^()馆藏复本:([\\d]+)可借复本:([\\d]+)()编著()$");

Matcher m = pmatcher(e);

if(mfind()){

for(int i=1;i<=mgroupCount();i++){

Systemoutprintln(mgroup(i));

}

}

}

}

如果如下:

java开发解析

3

0

朱印宏

长江出版社

这是开发者工具解析到的一个论坛页面结构。。

可以看到每一个a标签和br标签之间总会夹着一个text,,也就是密码文本。而我根据网上的

API教程:

siblingA ~ siblingX: 查找A元素之前的同级X元素,比如:h1 ~ p

写成这样

Elements links_1 = tdsmselect("#postmessage_24532691>br~text");

然后打印_links_1size为0也就是并没有匹配到一个元素

特此求正确写法

1、用找的标签调用一下text()这个方法就可以得到两个标签之间的内容了

2、Element对象的textNodes()或ownText()方法。

新浪的那个天气的值是通过js动态加载的,原始html页面是<div id="SI_Weather_Wrap" class="now-wea-wrap clearfix"></div> 。

而jsoup只是对html进行解析,所以是找不到js动态生成的哪些信息的。

public void parse(){

String htmlStr = "<table id=kbtable >"

+ "<tr> "

+ "<td width=123>"

+ "<div id=12>这里是要获取的数据1</div>"

+ "<div id=13>这里是要获取的数据2</div>"

+ "</td>"

+ "<td width=123>"

+ "<div id=12>这里是要获取的数据3</div>"

+ "<div id=13>这里是要获取的数据4</div>"

+ "</td> "

+ "</tr>"

+ "</table>";

Document doc = Jsoupparse(htmlStr);

// 根据id获取table

Element table = docgetElementById("kbtable");

// 使用选择器选择该table内所有的<tr> <tr/>

Elements trs = tableselect("tr");

//遍历该表格内的所有的<tr> <tr/>

for (int i = 0; i < trssize(); ++i) {

// 获取一个tr

Element tr = trsget(i);

// 获取该行的所有td节点

Elements tds = trselect("td");

// 选择某一个td节点

for (int j = 0; j < tdssize(); ++j) {

Element td = tdsget(j);

// 获取td节点的所有div

Elements divs = tdselect("div");

// 选择一个div

for (int k = 0; k < divssize(); k++) {

Element div = divsget(k);

//获取文本信息

String text = divtext();

//输出到控制台

Systemoutprintln(text);

}

}

}

}

以上就是关于Java jsoup 取得html中的table里的内容全部的内容,包括:Java jsoup 取得html中的table里的内容、jsoup爬虫怎么获取可点击并转到的文字、jsoup解析td标签值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9667050.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存