前段时间确定了毕设,每天晚上花时间完善功能。
考虑到要异步解析html抓取数据,jsoup——json的使用模式是最方便了,html代码的提取方式不要太花式太强大~╮(╯▽╰)╭~
使用期间jsoup自带的解析url数据有点慢,异步线程如下:
private Document doc;
@Override
protected Document doInBackground(String... params) {
Date startdate=new Date();
try {
doc=Jsoup.connect(params[0]).timeout(5000).get();
} catch (IOException e) {
e.printStackTrace();
}
Date enddate=new Date();
Long time=enddate.getTime()-startdate.getTime();
Log.e("使用连接耗时==",""+time);
return doc;
}
测试:
个人感觉可能是api太繁冗,后来想了一下还是自己写http解析:
private String strAll;
@Override
protected String doInBackground(String... params) {
Date startdate=new Date();
strAll = new HttpURLconn().httpURLconn(url);
Date enddate=new Date();
Long time=enddate.getTime()-startdate.getTime();
Log.e("使用连接耗时==",""+time);
return strAll;
}
异步改为~
private String strAll;
@Override
protected String doInBackground(String... params) {
Date startdate=new Date();
strAll = new HttpURLconn().httpURLconn(url);
Date enddate=new Date();
Long time=enddate.getTime()-startdate.getTime();
Log.e("使用连接耗时==",""+time);
return strAll;
}
测试:
好吧,白天上班一不小心还得加班...晚上补功能实在没精力去深究了,这里记录一下有时间了要得到why,能有大神点明一下就更好了~还有jsoup可一行代码往服务器post数据,挺方便,有兴趣的哥们可以深入研究~
继续~得到解析的html代码,转为Document,规范、补全解析格式。
Document doc =Jsoup.parse(result);
中文开发指南:http://www.open-open.com/jsoup/
这里用www.ip138.com里的身份验证做例子,
异步获取html代码结束
@Override
protected void onPostExecute(String result) {
if(result!=null){
Document doc2 =Jsoup.parse(result);
//选择html中的第四个table标签里的所有<tr>标签对
Elements select = doc2.select("table").eq(4).select("tr");
List<String> list = new ArrayList<String>();
for (Element element : select) {
String text = element.getElementsByTag("td").text();
Log.e("text", ""+text);
}
// Log.e("if_out","list0:"+list.get(0));
// Log.e("if_out","list1:"+list.get(1));
// Log.e("if_out","list2:"+list.get(3));
}
}
得到
随意网上找的一个身份证号,可以看到第三个td对是空的,这在取数据的时候要注意,最好每一行都能打印出来~
别忘记访问网络的权限~
最后,异步线程的学习资料网上很多,推荐郭神的良心博客:http://blog.csdn.net/guolin_blog/article/details/11711405
记录,共勉!