android 的模拟网页登录获取信息和JSOUP解析xml

         很多时候我们安卓端需要去网站上提交数据和获取数据,由于是别人的网站我们只好在安卓上模拟网页的登录,并将登陆后的网页信息抓回安卓,但是,我们抓回来的东西是个xml文件,我们需要解析才能获得我们需要的东西。今天我总结了一下以前写的关于扫条码从别人数据库获得信息,并提取信息的代码。

(需要一个jsoup解析的JAR包哦!!如图)

         一、首先是访问网页并模拟登录。。我们需要在浏览器上选择工具进入开发者模式,然后看这个网页的提交方式是GET还是post和提交需要的数据,双击返回的网站,看看模拟登录需要的数据都是什么,需要的数据一般都在From Data 里面写着,截图如下

这是网页android 的模拟网页登录获取信息和JSOUP解析xml_第1张图片

这是所需数据:(这里的gbsbtn没有值,不过这个值是需要的,只是我选的这个网站刚好不显示值而已。)

android 的模拟网页登录获取信息和JSOUP解析xml_第2张图片

这写看完了,就该看安卓的模拟登录代码了:

                                     String path ="http://search.anccnet.com/searchResult2.aspx";

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(path);
HttpResponse httpResponse = null;
List nvps = new ArrayList();

//所需参数,
nvps.add(new BasicNameValuePair("keyword",scanResult));
nvps.add(new BasicNameValuePair("__VIEWSTATE",
"/wEPDwULLTEzODQxNzY5NjNkZEc4gDy0wp5ERjILg2b7lTTH3F+w"));
nvps.add(new BasicNameValuePair("__EVENTVALIDATION",
"/wEWAwKK7u6vCQLd5eLQCQLmjL2EBxmZU7jWYoh9371phOcBPCjfgdVD"));
nvps.add(new BasicNameValuePair("gdsBtn","ÉÌÆ·ËÑË÷"));

try {
httpPost.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));// 发出HTTP请求
httpResponse = httpClient.execute(httpPost);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
int http = httpResponse.getStatusLine().getStatusCode();
if (http == 200) {
Log.i("BarCodeTestActivity", "连接成功");
try { 
string = EntityUtils.toString(httpResponse.getEntity());//返回的xml

Log.i("SaoResultActivity",string );
System.out.println(string+"返回的xml");
//jsoup 解析
Document html = Jsoup.parse(string); 

String   shangbiao=html.select("dl.p-supplier>dd").first().text();
String   tiaoma=html.select("dl.p-info dd").get(0).text();
String  changjia=html.select("dl.p-supplier>dd>a").text();

/*以 mingcheng例子简单的讲一下解析,解析的是标签为 

的下边的第二个
标签的内容,

解析为500ml芬达橙味汽水  .text()*/
String   mingcheng=html.select("dl.p-info dd").get(1).text();


String   guige=html.select("dl.p-info dd").get(2).text();    
String   miaoshu=html.select("dl.p-info dd").get(3).text();
      // Element qq=html.select("dl.p-info dd").first();
      // Elements tt=html.select("dl.p-info dd").after("2");       
       System.out.println("shangbiao : " + shangbiao); 
       System.out.println("tiaoma : " + tiaoma); 
       System.out.println("changjia :" + changjia); 
       System.out.println("mingcheng: " + mingcheng); 
   System.out.println("guige : " + guige);  
   System.out.println("miaoshu : " + miaoshu);  
   
   Message message=saohandler.obtainMessage();
   message.obj="名称:"+mingcheng+"\n"+"商标:"+shangbiao+"\n"+"厂家:"+changjia+"\n"+"规格:"+guige+"\n"+"描述:"+miaoshu;
   saohandler.sendMessage(message);

System.out.println(string);
} catch (ParseException e) {
// txt_state.setText("扫描失败!");
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}

}
}).start();


这是解析网页对应的表单:

 


                           
商标:

                           
芬达

                           
发布厂家:

                           

                              太古中萃发展有限公司
                           

                         

                         

                           
商品条码:

                           
06928804011326

                           
名称:

                           
500ml芬达橙味汽水

                           
规格型号:

                           
PET 500ml/瓶

                           
描述:

                           
,

                         

                         

                       

                     
                    
               
             

           

关于解析的很简单,大家对比着代码应该都能看懂,需要源码联系[email protected]

你可能感兴趣的:(1.android)