Android解析網頁
1. android怎麼獲取網頁數據
下面介紹三種獲取網頁數據的代碼
例子來自於android學習手冊,android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼
//第一種
/**獲取參數(ArrayList<NameValuePair> nameValuePairs,String url)後post給遠程伺服器
* 將獲得的返回結果(String)返回給調用者
* 本函數適用於查詢數量較少的時候
*/
public String posturl(ArrayList<NameValuePair> nameValuePairs,String url){
String result = "";
String tmp= "";
InputStream is = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
return "Fail to establish http connection!";
}
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
tmp=sb.toString();
}catch(Exception e){
return "Fail to convert net stream!";
}
try{
JSONArray jArray = new JSONArray(tmp);
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
Iterator<?> keys=json_data.keys();
while(keys.hasNext()){
result += json_data.getString(keys.next().toString());
}
}
}catch(JSONException e){
return "The URL you post is wrong!";
}
return result;
}
//第二種
/**獲取參數指定的網頁代碼,將其返回給調用者,由調用者對其解析
* 返回String
*/
public String posturl(String url){
InputStream is = null;
String result = "";
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
return "Fail to establish http connection!"+e.toString();
}
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
return "Fail to convert net stream!";
}
return result;
}
//第三種
/**獲取指定地址的網頁數據
* 返回數據流
*/
public InputStream streampost(String remote_addr){
URL infoUrl = null;
InputStream inStream = null;
try {
infoUrl = new URL(remote_addr);
URLConnection connection = infoUrl.openConnection();
HttpURLConnection httpConnection = (HttpURLConnection)connection;
int responseCode = httpConnection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK){
inStream = httpConnection.getInputStream();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return inStream;
2. URL scheme啟動Android應用,原生Android瀏覽器解析不正確
1、自定義URL Scheme:
創建一個activity並加上一個<intent-filter>(如果該activity是包含其他<intent-filter>,則需新建一個<intenf-filter>,不能在原有filter上添加),內容為:
<action android:name="android.intent.action.VIEW"/><!-- 若刪除,使用startActivity啟動android.content.ActivityNotFoundException,使用HTMLViewer啟動找不到網頁-->
<category android:name="android.intent.category.BROWSABLE"/><!-- 若刪除,使用startActivity啟動ok,使用HTMLViewer啟動找不到網頁 -->
<category android:name="android.intent.category.DEFAULT"/><!-- 若刪除,使用startActivity啟動android.content.ActivityNotFoundException,使用HTMLViewer啟動找不到網頁-->
<data android:scheme="myapp"/><!-- scheme的值可自定義 -->
2、通過URL Scheme啟動Android應用
方式一:通過代碼訪問:Intent intent = new Intent();
/**parse的參數值說明如下
* 只寫myapp,啟動android.content.ActivityNotFoundException
* 寫myapp://12,成功
* 寫myapp://da?sd=ad,成功
*/
intent.setData(Uri.parse("myapp://12"));
startActivity(intent);
方式二:通過網頁訪問:
/**href的值說明如下
* 只寫myapp,找不到網頁
* 寫myapp://12,成功
* 寫myapp://da?sd=ad,成功
*/
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>通過URL Scheme啟動Android應用</title>
</head>
<body>
<form>
<a href="myapp://12">啟動</a>
</form>
</body>
</html>
創建完成後發送到手機,再點擊html選擇使用HTMLViewer打開,再點擊鏈接即可啟動應用。
3、總結:第二種方式實現有點繁瑣,最好的實現方式是直接在瀏覽器中輸入url以啟動應用。在網上搜索找到應如下操作:在瀏覽器的搜索欄輸入如下url:content://com.android.htmlfileprovider/storage/emulated/0/myapp://12,經測試無法成功。不知道是哪裡的問題,還請知道的指點一二。
3. android中用jsoup解析HTML得到NULL,代碼在jsoup的官方網頁上是可以的。代碼如下:
你好:
話說有報錯提示么?應該聲明Internet許可權了吧?沒提示的話 就只能斷點跟一遍了``
4. android怎麼解析html
通過網頁解析得到自己想要的數據,也就是一個簡單的爬蟲。將使用第三方庫jsoup實現,通過第三方庫,能夠快速方便的解析html。在開始之前,需要具備以下能力:
首先,需要對網頁編程有一點了解,知道一個頁面的結構,標簽的含義,知道html網頁其實是一種xml格式的文件。如果對這些都了解的話,就可以很方便的進行網頁解析了,如果不太熟悉,建議先了解一下網頁編程。
然後,在使用第三方庫之前,最好是先看一下官方文檔:Jsoup官方文檔,Jsoup文檔中文版。
5. Android的webview里怎麼用HttpResponseCache
WebView的緩存可以分為頁面緩存和數據緩存。
頁面緩存是指載入一個網頁時的html、JS、CSS等頁面或者資源數據。這些緩存資源是由於瀏覽器的行為而產生,開發者只能通過配置HTTP響應頭影響瀏覽器的行為才能間接地影響到這些緩存數據。
他們的索引存放在/data/data/package_name/databases下。他們的文件存放在/data/data/package_name/cache/xxxwebviewcachexxx下。文件夾的名字在2.x和4.x上有所不同,但都文件夾名字中都包含webviewcache。
數據緩存分為兩種:AppCache和DOM Storage(Web Storage)。他們是因為頁面開發者的直接行為而產生。所有的緩存數據都由開發者直接完全地掌控。
AppCache使我們能夠有選擇的緩沖web瀏覽器中所有的東西,從頁面、圖片到腳本、css等等。尤其在涉及到應用於網站的多個頁面上的CSS和javaScript文件的時候非常有用。其大小目前通常是5M。
在Android上需要手動開啟(setAppCacheEnabled),並設置路徑(setAppCachePath)和容量(setAppCacheMaxSize)
Android中Webkit使用一個db文件來保存AppCache數據(my_path/ApplicationCache.db)
如果需要存儲一些簡單的用key/value對即可解決的數據,DOM Storage是非常完美的方案。根據作用范圍的不同,有Session Storage和Local Storage兩種,分別用於會話級別的存儲(頁面關閉即消失)和本地化存儲(除非主動刪除,否則數據永遠不會過期)。
在Android中可以手動開啟DOM Storage(setDomStorageEnabled),設置存儲路徑(setDatabasePath)
Android中Webkit會為DOM Storage產生兩個文件(my_path/localstorage/http_h5.m.taobao.com_0.localstorage和my_path/localstorage/Databases.db)
另外,在Android中清除緩存時,如果需要清除Local Storage的話,僅僅刪除Local Storage的本地存儲文件是不夠的,內存裡面有緩存數據。如果再次進入頁面,Local Storage中的緩存數據同樣存在。需要殺死程序運行的當前進程再重新啟動才可以。
HTML5的離線應用功能可以使得WebApp即使在網路斷開的情況下仍能正常使用,這是個非常有用的功能。近來工作中也要用到HTML5離線應用功能,由於是在Android平台上做,所以自然而然的選擇Webview來解析網頁。但如何使Webivew支持HTML5離線應用功能呢,經過反復摸索和上網查找資料,反復做試驗終於成功了。
6. android 獲取網頁指定內容
android也是用的java語言,使用java中的字元串方法就能實現想要的功能
7. android如何從網頁中獲取一個json數組並解析出來,顯示在textview裡面
1,先要建立一個線程獲取json數據
2接著解析json數據
3,設置textview
例如:json數據,strjson= {"key": ["a","b"]}
JSONObject object = new JSONObject (strjson)
JSONArray arr= object.getJSONArray("key") ;
String text=arr.getString(0);
8. android,新建線程 用jsoup解析網頁,獲取的文本可以在Sysout.out.println上輸出,在TextView上顯示不出
Android開發中在代碼中通過System.out.println的輸出內容不知道去哪了,在console視圖中看不到。而通過Log.i之類的要在Logcat視圖中看到,夾雜了太多的其它App及底層的信息,看起來並不明朗。其實也是可以看到的。可以在Logcat視圖中新建一個Message Filter。
操作如下:在Logcat窗口下單擊綠色「+」;
Filter Name:sysout
by Log Tag:System.out
其他都為空,單擊OK,就可以看到你所列印的信息.如果你想修改過濾器,點擊筆狀的圖形,就可修改。
這樣就可在sysout選項卡中看到System.out.println的輸出內容了。
9. android中jsoup解析html的幾個例子
超文本標記語言或超文本鏈接標示語言(標准通用標記語言下的一個應用)HTML(HyperText Mark-up Language)是一種製作萬維網頁面的標准語言,是萬維網瀏覽器使用的一種語言,
它消除了不同計算機之間信息交流的障礙。
它是目前網路上應用最為廣泛的語言,也是構成網頁文檔的主要語言。
HTML文件是由HTML命令組成的描述性文本,HTML命令可以說明文字、圖形、動畫、聲音、表格、鏈接等。HTML文件的結構包括頭部(Head)、主體(Body)兩大部分,其中頭部描述瀏覽器所需的信息,而主體則包含所要說明的具體內容。
10. Android中如何獲取網頁中的指定內容
問題
由於android的WebView等相關類沒有提供解析html網頁內容的介面,想要獲取網頁的內容並解析出想要的元素內容,用android的固有API是沒辦法了。
解決思路
第一種,使用第三方解析html庫,和android提供的庫有沖突的。
第二種,使用JAVA與JS回調,通過JS解析html;
開源工具
適合android的HTML解析庫的jsoup。
jsoup作用
可直接解析某個URL地址、HTML文本內容。
提供了一套非常省力的API,可通過DOM,CSS以及類似於JQuery的操作方法來取出和操作數據。
支持 HTML5 的解析器分支,可確保跟現在的瀏覽器一樣解析 HTML 的方法,同時降低了解析的時間和內存的佔用。
獲取指定網頁中的title的代碼例子演示