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

来源:互联网 发布:mysql如何登陆 编辑:程序博客网 时间:2024/06/05 15:32

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

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

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

这是网页

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


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

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

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

//所需参数,
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例子简单的讲一下解析,解析的是标签为 <dl class="p-info"> 的下边的第二个<dd> 标签的内容,

解析为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();


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

  <dl class="p-supplier">
                            <dt>商标:</dt>
                            <dd>芬达</dd>
                            <dt>发布厂家:</dt>
                            <dd>
                              <a id="repList_ctl00_firmLink" href="http://www.anccnet.com/info_search/factory/Detail.aspx?id=F25F56A9F703ED744E6F00219D64A75290CAA6BD4F57B270FB22765578155E46&amp;temp=0" target="_blank" style="text-decoration:none;">太古中萃发展有限公司</a>
                            </dd>
                          </dl>
                          <dl class="p-info">
                            <dt>商品条码:</dt>
                            <dd> <a href="http://www.anccnet.com/goods.aspx?base_id=F25F56A9F703ED745F870296F5B92F6B9310C94C048AF62C628EC65F62E8AF58A4EBA80262A3AF42" target="_blank"> 06928804011326</a></dd>
                            <dt>名称:</dt>
                            <dd> 500ml芬达橙味汽水</dd>
                            <dt>规格型号:</dt>
                            <dd> PET 500ml/瓶</dd>
                            <dt>描述:</dt>
                            <dd> ,</dd>
                          </dl>
                          <br clear="all">
                        </div>
                      </li>
                    
                </ol>
              </div>
            </div>

关于解析的很简单,大家对比着代码应该都能看懂,需要源码联系527515025@qq.com

0 0