大侠们我想问两个Android开发使用jsoup解析html的相关问题

大侠们我想问两个Android开发使用jsoup解析html的相关问题,第1张

问题:大侠们我想问两个Android开发使用jsoup解析html的相关问题

回答:第一个问题帮你解决了;第二个问题很简单(但你用错了),但没有你的这个htm文件,没有修改测试

superonCreate(savedInstanceState);

TextView txt = new TextView(this);

InputStream input;

try {

input = getResources()getAssets()open("temp04_assets/txt01htm");

int buffersize = inputavailable();// 取得输入流的字节长度

byte buffer[] = new byte[buffersize];

inputread(buffer);// 将数据读入数组

inputclose();// 读取完毕后要关闭流。

String txthtml = EncodingUtilsgetString(buffer, "UTF-8");// 设置取得的数据编码,防止乱码

Document doc = Jsoupparse(txthtml);

Element infoTable = docgetElementsByAttributeValue("class",

"table002")first();

Elements tableLineInfos = infoTableselect("tr");

for (Element lineInfo : tableLineInfos) {

String lineInfoContent = lineInfoselect("td")last()text()

trim();

txtsetText(lineInfoContent);

setContentView(txt);

}

} catch (IOException err) {

errgetStackTrace();

}

//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("关闭流出现异常!!!");

                }

            }

        }

    }

package cncomflywaterFiftyAlgorthm;

import javautilScanner;

public class Twenty_sixthWeek {

Scanner s = new Scanner(Systemin);

public static void main(String[] args) {

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

}

}

}

}

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

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

这几天正在研究。废话不多说,直接上代码,自己研究的,通过迭代抓取。pageList就是抓取的分页页面的全部链接地址 。

其中Document doc = NetUtilsgetDocument(url);是jsoup抓取页面的基本 *** 作。

public class HtmlAnalsysTest3 {

static String url = ">

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) 循环里就可以依次截取下一个标签里的内容了!

使用Jsoup解析html中的指定数据,十分方便。Jsoup工具十分强大,十分好用。但网上似乎没有很好的例子,本文的目的即在于此。建议仔细阅读代码中的几个例子,Jsoup解析数据不外乎这几种类型。

第一步:将Jsoup JAR包导入项目

第二步:使用Jsoup API

1, 定位

通过div的属性值,定位到html的div(块),即所需要内容对应的块。

示例代码如下:

<div class="content">

2, 筛选数据

a, 通过标签头,在div中继续筛选数据。可能会找到很多的数据,这里会用到循环。见eg1。

//eg1:解析百度音乐 Document doc = Jsoupconnect(">

以上就是关于大侠们我想问两个Android开发使用jsoup解析html的相关问题全部的内容,包括:大侠们我想问两个Android开发使用jsoup解析html的相关问题、jsoup能爬取json数据吗、如何使用jsoup获取单选框的属性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9289257.html

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

发表评论

登录后才能评论

评论列表(0条)

保存