很多时候我们安卓端需要去网站上提交数据和获取数据,由于是别人的网站我们只好在安卓上模拟网页的登录,并将登陆后的网页信息抓回安卓,但是,我们抓回来的东西是个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&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