jsoup解析html的table中的内容

jsoup解析html的table中的内容,第1张

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);

}

}

}

}

Elements elestb = Jsoupselect("table");

Elelments elestr = elestbget(0)select("tr");

Elements eles= elestrget(1)select("a");

//第一个

String a1 = elestdget(0)text();

//第二个

String a2 = elestdget(1)text();

Elements elestd = elestrget(1)select("td");

//第三个

String td1 = elestdget(2)text();

//第四个

String td2 = elestdget(3)text();

获取所有双色球数据,但是返回的都是html页面,需要进行处理,最开始想着用dom4j处理,发现不可行。之后想着自己处理,但是又太麻烦了,然后找到了jsoup,使用起来非常简单。

*** 作、解析HTML格式的数据

jsoup的使用和dom4j非常类似,最开始都是先获得一个Document对象,然后获取需要的子元素或节点进行 *** 作,但是jsoup可以通过dom、css、和类似jquery的方法( 选择器 )来获取需要的数据。

选择器官方API

其他方法详见官方API

Node

Element

Elements

Whitelist官方API

总结一下Jsoup提供的方法:

获取元素的有:

getElementById(String id)

getElementsByTag(String tag)

getElementsByClass(String className)

getElementsByAttribute(String key)

siblingElements(), firstElementSibling(), lastElementSibling(); nextElementSibling(), previousElementSibling()

parent(), children(), child(int index)

获取元素数据:

attr(String key) 获取属性

attr(String key, String value) 设置属性

attributes() 获取所有属性

id(), className() and classNames()

text() 获取文字内容

text(String value) 设置文字内容

html() 获取html内容

html(String value) 设置html内容

outerHtml()

data() 获取类似script,style的数据内容

tag() and tagName()

*** 作HTML内容:

append(String html), prepend(String html)

appendText(String text), prependText(String text)

appendElement(String tagName), prependElement(String tagName)

html(String value)

我用Jsoup写爬虫,一般遇到html返回没有的内容。但是浏览器显示有的内容。都是分析页面的>

//json页面返回格式{"data":{"blogs":[{"albid":865218,"id":12323,

orgjsonJSONObject

 

//返回多个json里面的id值

    public static List  findimgCrawIdList(String url)  {

        List imgCrawIdList=new ArrayList();

        try {

            JSONObject jo = getJsonObj(url,"utf-8");

            JSONObject menu = jogetJSONObject("data");

            JSONArray jsonArray =  menugetJSONArray("blogs");

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

                imgCrawIdListadd(jsonArraygetJSONObject(i)get("id"));

            }

        } catch (Exception e) {

            // TODO Auto-generated catch block

            eprintStackTrace();

        }

        return imgCrawIdList;

    }

 

/

      根据网址,返回JSONObject对象

      注:只适合请求响应为json格式网址

      @param src            来源网址

      @param code            编码方式

      @author chitianxiang $22th March, 2012 - 2:42 pm

     /

    private static JSONObject getJsonObj(String src, String code) {

        InputStreamReader reader = null;

        BufferedReader in = null;

        try {

            URL url = new URL(src);

            URLConnection connection = urlopenConnection();

            connectionsetConnectTimeout(1000);

            reader = new InputStreamReader(connectiongetInputStream(), code);

            in = new BufferedReader(reader);

            String line = null;        //每行内容

            int lineFlag = 0;        //标记: 判断有没有数据

            StringBuffer content = new StringBuffer();

            while ((line = inreadLine()) != null) {

                contentappend(line);

                lineFlag++;

            }

            return lineFlag == 0  null : new orgjsonJSONObject(contenttoString());

        } catch (SocketTimeoutException e) {

            Systemoutprintln("连接超时!!!");

            return null;

        } catch (JSONException e) {

            Systemoutprintln("网站响应不是json格式,无法转化成JSONObject!!!");

            return null;

        } catch (Exception e) {

            Systemoutprintln("连接网址不对或读取流出现异常!!!");

            return null;

        } finally {

            if (in != null) {

                try {

                    inclose();

                } catch (IOException e) {

                    Systemoutprintln("关闭流出现异常!!!");

                }

            }

            if (reader != null) {

                try {

                    readerclose();

                } catch (IOException e) {

                    Systemoutprintln("关闭流出现异常!!!");

                }

            }

        }

    }

根据java网络编程相关的内容,使用jdk提供的相关类可以得到url对应网页的html页面代码。

针对得到的html代码,通过使用正则表达式即可得到我们想要的内容。

比如,我们如果想得到一个网页上所有包括“java”关键字的文本内容,就可以逐行对网页代码进行正则表达式的匹配。最后达到去除html标签和不相关的内容,只得到包括“java”这个关键字的内容的效果。

从网页上爬取的流程和爬取内容的流程基本相同,但是爬取的步骤会多一步。

需要先用img标签的正则表达式匹配获取到img标签,再用src属性的正则表达式获取这个img标签中的src属性的url,然后再通过缓冲输入流对象读取到这个url的信息,配合文件输出流将读到的信息写入到本地即可。

以上就是关于jsoup解析html的table中的内容全部的内容,包括:jsoup解析html的table中的内容、菜鸟求教 java爬虫 Jsoup 查找元素 求教如何select出来这四个数据,谢谢!、jsoup 的使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存