问题:大侠们我想问两个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获取单选框的属性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)