
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);
}
}
}
}
运行结果 :
usercc
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标签值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)