Http,Jsoup抓取网页内容-by TomHawk
2015-05-25 18:59
309 查看
在阅读本篇博文前,请大家先阅读另一篇博文:http://demo.netfoucs.com/isharestudio/article/details/13276195。
当你阅读完上面推荐的博文时,我们现在开始介绍如何通过firefox的firebug插件获取登录广石化教务系统后的cookie,因为对于需要登录的网页,我们需要获取登录的cookie,随后利用这个cookie才能对其他的页面进行数据的抓取:
如果没有你的firefox没有firebug插件的话请先安装firebug插件,安装好之后使用firefox打开广石化教务系统网址:http://218.15.22.136:3008/,然后F12打开firebug,选择:网络->XHR->保持(这个很关键,不然进去以后就看不到我们post的那些参数信息了,而我们恰恰是要这些参数信息),如下图:
然后输入你的用户信息进行登录,可以发现:
经测试发现,前面打了标记的那5个参数是我们需要用到的,对于之后的获取课程信息需要的参数和获取成绩信息的参数同上理,接下来就进入代码环节了,由于需要解析的内容都已在代码中注释说明了,所以直接上代码:
Util类:
MainActivity:
最后,送上demo的下载地址:http://download.csdn.net/download/gsh_android_bar/8737723
当你阅读完上面推荐的博文时,我们现在开始介绍如何通过firefox的firebug插件获取登录广石化教务系统后的cookie,因为对于需要登录的网页,我们需要获取登录的cookie,随后利用这个cookie才能对其他的页面进行数据的抓取:
如果没有你的firefox没有firebug插件的话请先安装firebug插件,安装好之后使用firefox打开广石化教务系统网址:http://218.15.22.136:3008/,然后F12打开firebug,选择:网络->XHR->保持(这个很关键,不然进去以后就看不到我们post的那些参数信息了,而我们恰恰是要这些参数信息),如下图:
然后输入你的用户信息进行登录,可以发现:
经测试发现,前面打了标记的那5个参数是我们需要用到的,对于之后的获取课程信息需要的参数和获取成绩信息的参数同上理,接下来就进入代码环节了,由于需要解析的内容都已在代码中注释说明了,所以直接上代码:
Util类:
<span style="font-size:18px;">package com.example.schoolservice; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONException; import org.jsoup.Connection.Response; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class Utils { /** * 对于需要登录的页面,首先需要模拟登录获取cookie以进行下一步的数据获取 * 这里要登录的是广石化教务系统 * @param xueHao * @param miMa * @return * @throws IOException */ public static Map<String,String> getCookies(String xueHao,String miMa) throws IOException{ Map<String,String>params=new HashMap<String,String>(); params.put("Window1$SimpleForm1$rdl_shenFen","学生"); params.put("Window1$SimpleForm1$tbx_XueHao",xueHao); params.put("Window1$SimpleForm1$tbx_pwd",miMa); params.put("__EVENTTARGET","Window1$Toolbar1$btn_login"); params.put("__VIEWSTATE","/wEPDwULLTE5MDM2NzU3OTVkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYGBQdXaW5kb3cxBRNXaW5kb3cxJFNpbXBsZUZvcm0xBR5XaW5kb3cxJFNpbXBsZUZvcm0xJHRieF9YdWVIYW8FG1dpbmRvdzEkU2ltcGxlRm9ybTEkdGJ4X3B3ZAUfV2luZG93MSRTaW1wbGVGb3JtMSRyZGxfc2hlbkZlbgUaV2luZG93MSRUb29sYmFyMSRidG5fbG9naW46QsMiatYU9WJ9boGIR70UrVV93cJFQf4ZdaWAHYr13w=="); Response res = Jsoup.connect("http://218.15.22.136:3008/") .data(params) .timeout(30000) .execute(); Map<String,String>cookies=res.cookies(); return cookies; } /** * 获取广石化排课信息 * @param cookies * @return * @throws IOException */ public static String getCourses(Map<String,String>cookies) throws IOException{ HttpClient httpclient=new DefaultHttpClient(); HttpPost httppost=new HttpPost("http://218.15.22.136:3008/PaiKeXiTong.aspx"); httppost.setHeader("Cookie","ASP.NET_SessionId="+cookies.get("ASP.NET_SessionId")+";XingMing="+cookies.get("XingMing")); httppost.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"); //需要的参数,对于需要用到哪些参数,可以通过火狐的firebug插件来查看到,另外,一下的_VIEWSTATE参数可能是会变化的,所以有时候获取数据失败的话可能要更新一下这个参数,同样是通过firebug ArrayList<NameValuePair>params=new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("__EVENTTARGET","Grid1$Toolbar1$query_PaiKe")); params.add(new BasicNameValuePair("Grid1$Toolbar1$ddl_XueYuan","12"));//学院编号 params.add(new BasicNameValuePair("Grid1$Toolbar1$ddl_BanJi","104623"));//班级编号 params.add(new BasicNameValuePair("__VIEWSTATE","/wEPDwUKLTY0NjUxODI2MWQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgYFBUdyaWQxBRpHcmlkMSRUb29sYmFyMSRkZGxfWHVlWXVhbgUYR3JpZDEkVG9vbGJhcjEkZGRsX0JhbkppBRpHcmlkMSRUb29sYmFyMSRxdWVyeV9QYWlLZQUaR3JpZDEkVG9vbGJhcjEkcHJpbnRfUGFpS2UFBUdyaWQysa6FiUrMMkDf+rMWQCLJa2N1Lvhz0aGl1InAOc2yBvA=")); params.add(new BasicNameValuePair("X_AJAX","true")); params.add(new BasicNameValuePair("X_STATE","eyJHcmlkMV9Ub29sYmFyMV9kZGxfWHVlWXVhbiI6eyJEYXRhVGV4dEZpZWxkIjoiamdtYyIsIkRhdGFWYWx1ZUZpZWxkIjoiamdkbSIsIlhfSXRlbXMiOltbIjAyICAiLCLmnLrnlLXlt6XnqIvlrabpmaIgICAgICAgICAgICAgIiwxXSxbIjAzICAiLCLorqHnrpfmnLrkuI7nlLXlrZDkv6Hmga/lrabpmaIgICAgICIsMV0sWyIwNCAgIiwi5bu6562R5bel56iL5a2m6ZmiICAgICAgICAgICAgICIsMV0sWyIwNSAgIiwi57uP5rWO566h55CG5a2m6ZmiICAgICAgICAgICAgICIsMV0sWyIwNiAgIiwi5paH5rOV5a2m6ZmiICAgICAgICAgICAgICAgICAiLDFdLFsiMDggICIsIuS9k+iCsuWtpuezuyAgICAgICAgICAgICAgICAgIiwxXSxbIjEwICAiLCLoibrmnK/ns7sgICAgICAgICAgICAgICAgICAgIiwxXSxbIjEyICAiLCLnkIblrabpmaIgICAgICAgICAgICAgICAgICAgIiwxXSxbIjEzICAiLCLlpJblm73or63lrabpmaIgICAgICAgICAgICAgICAiLDFdLFsiMTQgICIsIueOr+Wig+S4jueUn+eJqeW3peeoi+WtpumZoiAgICAgICAiLDFdLFsiMTUgICIsIuefs+ayueW3peeoi+WtpumZoiAgICAgICAgICAgICAiLDFdLFsiMTYgICIsIuWMluWtpuW3peeoi+WtpumZoiAgICAgICAgICAgICAiLDFdXSwiU2VsZWN0ZWRWYWx1ZSI6IjEyICAifSwiR3JpZDFfVG9vbGJhcjFfZGRsX0JhbkppIjp7IkRhdGFUZXh0RmllbGQiOiJiam1jIiwiRGF0YVZhbHVlRmllbGQiOiJiamRtIiwiWF9JdGVtcyI6W1siMzkwNyIsIuWcsOeQhijluIgpMTEtMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLDFdLFsiMTA0MzkwIiwi5Zyw55CGKOW4iCkxMS0zIiwxXSxbIjUxMDIiLCLlnLDnkIYo5biIKTEyLTEgICAgICAiLDFdLFsiMTA0NjczIiwi5Zyw55CGKOW4iCkxMi0yIiwxXSxbIjEwNDI1NCIsIuWcsOeQhijluIgpMTMtMSIsMV0sWyIxMDQ2MjUiLCLlnLDnkIYo5biIKTE0LTEiLDFdLFsiMzk2NiIsIuWcsOeQhjExLTIiLDFdLFsiMzk2NCIsIuaVmeiCsuaKgOacrzExLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwxXSxbIjUxMDUiLCLmlZnogrLmioDmnK8xMi0xICAgICAgICAiLDFdLFsiNTEwNiIsIuaVmeiCsuaKgOacrzEyLTIgICAgICAgICIsMV0sWyIxMDQzMTciLCLmlZnogrLmioDmnK8xMy0xIiwxXSxbIjEwNDMxOCIsIuaVmeiCsuaKgOacrzEzLTIiLDFdLFsiMTA0NjI4Iiwi5pWZ6IKy5oqA5pyvMTQtMSIsMV0sWyIxMDQ2MjkiLCLmlZnogrLmioDmnK8xNC0yIiwxXSxbIjM5MTEiLCLmlbDlraYo5biIKTExLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwxXSxbIjUwODIiLCLmlbDlraYo5biIKTEyLTEgICAgICAiLDFdLFsiMTA0MzQzIiwi5pWw5a2mKOW4iCkxMy0xIiwxXSxbIjEwNDYyMSIsIuaVsOWtpijluIgpMTQtMSIsMV0sWyIzOTc5Iiwi5pWw5a2mMTEtMiIsMV0sWyI1MDgzIiwi5pWw5a2mMTItMiAgICAgICAgICAgICIsMV0sWyIxMDQ2NTkiLCLmlbDlraYxMi0zIiwxXSxbIjEwNDM0NCIsIuaVsOWtpjEzLTIiLDFdLFsiMTA0NjIyIiwi5pWw5a2mMTQtMiIsMV0sWyIzOTY1Iiwi54mp55CGKOW4iCkxMS0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsMV0sWyI1MTAzIiwi54mp55CGKOW4iCkxMi0xICAgICAgIiwxXSxbIjEwNDM1OSIsIueJqeeQhijluIgpMTMtMSIsMV0sWyIxMDQ2MjYiLCLniannkIYo5biIKTE0LTEiLDFdLFsiMzk4MiIsIueJqeeQhjExLTIiLDFdLFsiNTEwNCIsIueJqeeQhjEyLTIgICAgICAgICAgICAiLDFdLFsiMTA0MzU4Iiwi54mp55CGMTMtMiIsMV0sWyIxMDQ2MjciLCLniannkIYxNC0yIiwxXSxbIjM5ODAiLCLkv6Hmga8xMS0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLDFdLFsiMzk4MSIsIuS/oeaBrzExLTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsMV0sWyI1MTAwIiwi5L+h5oGvMTItMSAgICAgICAgICAgICIsMV0sWyI1MTAxIiwi5L+h5oGvMTItMiAgICAgICAgICAgICIsMV0sWyIxMDQzNjAiLCLkv6Hmga8xMy0xIiwxXSxbIjEwNDM2MSIsIuS/oeaBrzEzLTIiLDFdLFsiMTA0NjIzIiwi5L+h5oGvMTQtMSIsMV0sWyIxMDQ2MjQiLCLkv6Hmga8xNC0yIiwxXSxbIjMwNjUiLCLlnLDnkIYo5biIKTEwLTEiLDFdLFsiMzA2NiIsIuWcsOeQhijluIgpMTAtMiIsMV0sWyIzMDY5Iiwi5pWZ6IKy5oqA5pyvMTAtMSIsMV0sWyIzMDcwIiwi5pWZ6IKy5oqA5pyvMTAtMiIsMV0sWyIzMDU5Iiwi5pWw5a2mKOW4iCkxMC0xIiwxXSxbIjYwMDgiLCLmlbDlraYo5biIKTEwLTMgICAgICAiLDFdLFsiMzA2MCIsIuaVsOWtpjEwLTIiLDFdLFsiMzA2NyIsIueJqeeQhijluIgpMTAtMSIsMV0sWyIzMDY4Iiwi54mp55CGMTAtMiIsMV0sWyIzMDYxIiwi5L+h5oGvMTAtMSIsMV0sWyIzMDYyIiwi5L+h5oGvMTAtMiIsMV0sWyIzMDYzIiwi5L+h5oGvMTAtMyIsMV0sWyIzMDY0Iiwi5L+h5oGvMTAtNCIsMV1dLCJTZWxlY3RlZFZhbHVlIjoiNTEwMCJ9LCJHcmlkMSI6eyJUaXRsZSI6IuaVmeWtpuaOiOivvuS/oeaBr+ihqCA8c3BhbiBzdHlsZT0nY29sb3I6cmVkOyc+77yI5p+l6K+i54+t57qn77ya5L+h5oGvMTItMe+8iTwvc3Bhbj4iLCJSZWNvcmRDb3VudCI6MTUsIlhfUm93cyI6eyJWYWx1ZXMiOltbIuiuoeeul+acuue7hOaIkOamguiuuu+8iDMqMTbvvIkiLCLlkajkuIAgMeOAgTLoioIiLCLkuozmlZlCLTMwOCIsIuWtn+S6mui+iSAgICAgICAgICAgICAgICJdLFsiKui9r+S7tuW3peeoiyjlrp7pqowp77yIMTYo5LiK5py6Ke+8iSIsIuWRqOS4gCAz44CBNOiKgiIsIueQhuWtpumZouWunumqjOWupC4iLCLlrZ/kuprovokgICAgICAgICAgICAgICAiXSxbIuaVmeiCsui9r+S7tuW3peeoi++8iDIqMTUrMTgo5a6e6aqMKS/kv6Hmga8xNisxNijlrp7pqowp77yJIiwi5ZGo5LiAIDnjgIExMOiKgiIsIuS6jOaVmUItMzA4Iiwi5a2f5Lqa6L6JICAgICAgICAgICAgICAgIl0sWyIq6K6h6YeP57uP5rWO5a2m77yIMTYrMTbvvIjkuIrmnLrvvInvvJ0yKjE277yJIiwi5ZGo5LqMIDHjgIEy6IqCIiwi5LqM5pWZQi03MDIiLCLkvI3mgJ3mlY8gICAgICAgICAgICAgICAiXSxbIui/kOetueWtpu+8iDQqMTYs5pWw5a2mMTItMTozKjE277yJIiwi5ZGo5LqMIDPjgIE06IqCIiwi6KW/MTA0Iiwi546L5LiW5Y2OICAgICAgICAgICAgICAgIl0sWyLnjrDku6PorqHnrpfmlrnms5XvvIgyKjE2KzE2KOWunumqjCnvvIkiLCLlkajkuowgNeOAgTboioIiLCLkuozmlZlCLTMwOCIsIueOi+S4luWNjiAgICAgICAgICAgICAgICJdLFsiKui9r+S7tua1i+ivleaKgOacr++8iDE2KzE2KOWunumqjCnvvIkiLCLlkajkuIkgMeOAgTLoioIiLCLkuozmlZlCLTcwMiIsIuaigeWbveS4miAgICAgICAgICAgICAgICJdLFsiKirorqHph4/nu4/mtY7lrabvvIjkuIrmnLrvvInvvIgxNu+8iSIsIuWRqOS4iSAz44CBNOiKgiIsIueQhuWtpumZouWunumqjOWupC4iLCLkvI3mgJ3mlY8gICAgICAgICAgICAgICAiXSxbIioq6K6h566X5py657uE5oiQ5qaC6K6677yIMyoxNu+8iSIsIuWRqOS4iSA144CBNuiKgiIsIuS6jOaVmUItMzA4Iiwi5a2f5Lqa6L6JICAgICAgICAgICAgICAgIl0sWyLkv6Hmga/np5Hlrabln7rnoYDvvIgyKjE277yJIiwi5ZGo5LiJIDfjgIE46IqCIiwi5LqM5pWZQi0zMDgiLCLnjovkuJbljY4gICAgICAgICAgICAgICAiXSxbIuWkp+WtpueUn+WwseS4muaMh+WvvO+8iDIqMTDvvIkiLCLlkajlm5sgM+OAgTToioIiLCLkuJw2MDQiLCLkvZXlu7rkuJwgICAgICAgICAgICAgICAiXSxbIioq546w5Luj6K6h566X5pa55rOV77yI5a6e6aqM77yJ77yIMTYo5a6e6aqMKe+8iSIsIuWRqOWbmyA144CBNuiKgiIsIueQhuWtpumZouWunumqjOWupC4iLCLnjovkuJbljY4gICAgICAgICAgICAgICAiXSxbIui/kOetueWtpu+8iDQqMTYs5pWw5a2mMTItMTozKjE277yJIiwi5ZGo5ZubIDfjgIE46IqCIiwi6KW/MTA0Iiwi546L5LiW5Y2OICAgICAgICAgICAgICAgIl0sWyIqKui9r+S7tua1i+ivleaKgOacryjkuIrmnLop77yIMTYo5a6e6aqMKe+8iSIsIuWRqOWbmyA544CBMTDoioIiLCLnkIblrabpmaLlrp7pqozlrqQuIiwi5qKB5Zu95LiaICAgICAgICAgICAgICAgIl0sWyLmr5vms73kuJzmgJ3mg7PkuK3lm73nibnoibLmpoLorrrvvIgyKjE177yJIiwi5ZGo5LqUIDPjgIE06IqCIiwi5LqM5pWZQS0yMDUiLCLosKLlu7rkuK0gICAgICAgICAgICAgICAiXV0sIkRhdGFLZXlzIjpbW251bGxdLFtudWxsXSxbbnVsbF0sW251bGxdLFtudWxsXSxbbnVsbF0sW251bGxdLFtudWxsXSxbbnVsbF0sW251bGxdLFtudWxsXSxbbnVsbF0sW251bGxdLFtudWxsXSxbbnVsbF1dLCJTdGF0ZXMiOltbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXV19fSwiR3JpZDIiOnsiVGl0bGUiOiLmlZnlrablkajov5vnqIvooaggPHNwYW4gc3R5bGU9J2NvbG9yOnJlZDsnPijogIPor5Xnp5Hnm67vvJrov5DnrbnlraYg5q+b5rO95Lic5oCd5oOz5Lit5Zu954m56Imy5qaC6K66IOS/oeaBr+enkeWtpuWfuuehgO+8iTwvc3Bhbj4iLCJSZWNvcmRDb3VudCI6MSwiWF9Sb3dzIjp7IlZhbHVlcyI6W1si4piGICAiLCLimIYgICIsIuKAlCAgIiwi4oCUICAiLCLigJQgICIsIuKAlCAgIiwi4oCUICAiLCLigJQgICIsIuKAlCAgIiwi4oCUICAiLCLigJQgICIsIuKAlCAgIiwi4oCUICAiLCLigJQgICIsIuKAlCAgIiwi4oCUICAiLCLigJQgICIsIuKAlCAgIiwi77yaICAiLCLiiJogICJdXSwiRGF0YUtleXMiOltbbnVsbF1dLCJTdGF0ZXMiOltbXV19fX0=")); httppost.setEntity(new UrlEncodedFormEntity(params)); HttpResponse httpresponse=httpclient.execute(httppost); if(HttpStatus.SC_OK==httpresponse.getStatusLine().getStatusCode()){ HttpEntity entity=httpresponse.getEntity(); System.out.println("!!!!!!!!!!!getCourses:entity="+entity); if(null!=entity){ String courses=EntityUtils.toString(entity); int start=courses.indexOf("Values"); start=courses.indexOf("[[",start); int end=courses.indexOf("]]",start)+2; courses=courses.substring(start,end); System.out.println("*****courses="+courses); return courses; } } return null; } /** * 获取广石化教务系统里的个人成绩信息 * 这里使用Jsoup可以方便的获取到需要的数据,如果想了解更多Jsoup的内容,可以参考:http://www.open-open.com/jsoup/ * @param cookies * @return * @throws IOException * @throws JSONException */ public static String getScores(Map<String,String>cookies) throws IOException, JSONException{ Document doc=Jsoup.connect("http://218.15.22.136:3008/ChengJiChaXun.aspx") .cookies(cookies) .timeout(30000) .get(); //System.out.println("doc="+doc.); String scores=doc.toString(); int start=scores.indexOf("Values"); start=scores.indexOf("[[", start); int end=scores.indexOf("]]", start)+2; scores=scores.substring(start, end); // System.out.println("scores="+scores); // parseScores(scores); return scores; } /** * 解析以上获取到的成绩数据 * @param scores * @return * @throws JSONException */ public static List<JSONArray> parseScores(String scores) throws JSONException{ JSONArray jarr=new JSONArray(scores); // JSONArray jarr1=jarr.getJSONArray(0); // System.out.println("***"+jarr1.get(0)); List<JSONArray>scoresList=new ArrayList<JSONArray>(); for(int i=0;i<jarr.length();i++){ scoresList.add(jarr.getJSONArray(i)); } return scoresList; } /** * 获取茂名公交信息数据 * @return * @throws IOException */ public static ArrayList<HashMap<String,String>> getBusLines() throws IOException{ ArrayList<HashMap<String,String>>busList=new ArrayList<HashMap<String,String>>(); //使用Jsoup获取茂名公交网页的数据 Document doc=Jsoup.connect("http://www.mmbus.cn/xlcx.php").get(); //使用Jsoup对网页上的数据进行解析 Element eles=doc.select("table").get(7); eles.select(".fona010").remove(); Elements trs=eles.select("tr"); for(int i=0;i<trs.size();i+=2){ Element tr=trs.get(i); Elements tds=tr.select("td"); HashMap<String,String>item=new HashMap<String, String>(); item.put("busNo",tds.get(1).text()); StringBuffer buffer=new StringBuffer(); buffer.append(tds.get(2).text()) .append("----->") .append(tds.get(4).text()) .append("(") .append(tds.get(3).text()) .append("--") .append(tds.get(5).text()) .append(")"); item.put("time0",buffer.toString()); item.put("stops",tds.get(6).text()); item.put("price",tds.get(8).text()); tr=trs.get(i+1); tds=tr.select("td"); buffer=new StringBuffer(); buffer.append(tds.get(0).text()) .append("----->") .append(tds.get(2).text()) .append("(") .append(tds.get(1).text()) .append("--") .append(tds.get(3).text()) .append(")"); item.put("time1",buffer.toString()); busList.add(item); System.out.println("***busList="+busList); } return busList; } } </span>
MainActivity:
<span style="font-size:18px;">package com.example.schoolservice; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.text.method.ScrollingMovementMethod; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; /** * 请在fetchData()方法里的Utils.getCookies("xxxxx", "xxxx");处填入你的教务系统的账号和密码 * @author Administrator * */ public class MainActivity extends Activity { private Button getcourses,getscores,getbuses; private TextView txt; private String data; private Handler handler; private Map<String, String> cookies; private int flag=0; private static final int FLAG_COURSES=0; private static final int FLAG_SCORES=1; private static final int FLAG_BUSES=2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getcourses=(Button) findViewById(R.id.getcourses); getscores=(Button) findViewById(R.id.getscores); getbuses=(Button) findViewById(R.id.getbuses); txt = (TextView) findViewById(R.id.txt); txt.setMovementMethod(ScrollingMovementMethod.getInstance());//设置TextView可以滚动 OnClickListener clicker=new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub int vid=v.getId(); if(vid==R.id.getcourses)flag=FLAG_COURSES; else if(vid==R.id.getscores)flag=FLAG_SCORES; else flag=FLAG_BUSES; //不能在主线程上进行网络操作,所以新建一个线程进行操作 new Thread() { public void run() { fetchData(); } }.start(); } }; getcourses.setOnClickListener(clicker); getscores.setOnClickListener(clicker); getbuses.setOnClickListener(clicker); handler = new Handler(); } /** * 获取数据 */ private void fetchData(){ try { if(flag==FLAG_BUSES){//获取茂名公交数据 data=Utils.getBusLines().toString(); handler.post(updateView);//通知UI线程对界面进行更新 return; } if (null == cookies) {//获取网页cookie cookies = Utils.getCookies("xxxxx", "xxxx");//请在此处填入广石化教务系统的账号和密码 System.out.println("*******fetchData():cookies="+cookies); } if(flag==FLAG_COURSES){//获取课程数据 System.out.println("******fetchData():start to get the courses"); data=Utils.getCourses(cookies); } else if(flag==FLAG_SCORES){//获取成绩数据 data=Utils.getScores(cookies); System.out.println("******fetchData():start to get the scores"); } handler.post(updateView);//通知UI线程对界面进行更新 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //不能在子线程中刷新UI线程的界面,所以通过handler的post方法来提醒UI线程刷新界面 private Runnable updateView=new Runnable() { @Override public void run() { // TODO Auto-generated method stub if(null!=data)txt.setText(data); } }; }</span>
最后,送上demo的下载地址:http://download.csdn.net/download/gsh_android_bar/8737723
相关文章推荐
- HttpClient抓取网页内容简单介绍
- 使用jsoup进行网页内容抓取
- HTTPCLIENT抓取网页内容
- 网络爬虫WebCrawler(1)-Http网页内容抓取
- C#用HttpWebRequest通过代理服务器验证后抓取网页内容
- apache httpclient 客户端HTTP抓取网页内容工具
- 【转】C#用HttpWebRequest通过代理服务器验证后抓取网页内容
- Jsoup网页内容抓取分析
- HttpWebRequest抓取网页内容与直接输入URL得到的内容不一致!球大神帮忙!!
- C#用HttpWebRequest通过代理服务器验证后抓取网页内容
- Jsoup网页内容抓取分析(1)
- HttpClient+jsoup实现网页数据抓取和处理
- 利用httpclient抓取网页内容
- HttpClient抓取网页内容简单介绍
- 利用jsoup抓取指定网页的照片【也可以修改一下抓取其他内容】
- Jsoup网页内容抓取分析
- Jsoup网页内容抓取分析
- HttpClient+Jsoup 抓取网页信息(网易贵金属为例)
- 用HttpUrlConnection抓取网页内容