程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 用Java從網上抓取指定URL源碼的方案

用Java從網上抓取指定URL源碼的方案

編輯:關於JAVA
引言:
  在做無線項目的時候,與通訊公司的數據通訊有一部分是通過XML交互的,所以必須要動態抓取通訊公司提供的固定的Internet上的數據,便研究了一下如何抓取固定url上的數據,現與大家分享一下。 

  類名GetPageCode,有一個方法GetSource,通過屬性傳遞參數,入參控制的是要取得URL的地址,代理服務器的設置及輸出方式的控制,這裡大家可以再擴展自己的需要,我這裡只提供了兩種方式,一種是直接寫到本地的某個文件中,另外一種就是返回字符串的。類裡已經作了比較詳細的注釋,我想大家很容易就看明白了。 

調用方式: 
#region 測試獲取遠程網頁 
GetPageCode gpc = new GetPageCode(); 
gpc.Url="http://ppcode.com"; 
gpc.ProxyState=1;//使用代理服務器,0為不使用,設置為1後下面的代理設置才起作用
gpc.ProxyAddress="http://proxyName.com";//代理服務器地址 
gpc.ProxyPort="80";//代理服務器的端口 
gpc.ProxyAccount="proxy";//代理服務器賬號 
gpc.ProxyPassword="passWord";//代理服務器密碼 
gpc.ProxyDomain="bqc";//代理服務器域 
gpc.OutFilePath=filePath;//設置輸出文件路徑的地方,如果不設置,則返回字符串 
gpc.GetSource();//處理 
string tempErr=gpc.NoteMessage;//如果出錯,這裡會提示 
string tempCode=gpc.OutString;//返回的字符串 
#endregion 
類代碼: 
using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.IO; 
using System.Net; 
using System.Text; 
using System.Web; 
namespace Test.Com 

/// &lt summary &gt 
/// 功能:取得Internet上的URL頁的源碼 
/// 創建:2004-03-22 
/// 作者:Rexsp MSN:[email protected] 
/// &lt /summary &gt 
public class GetPageCode 

#region 私有變量 
/// &lt summary &gt 
/// 網頁URL地址 
/// &lt /summary &gt 
private string url=null; 
/// &lt summary &gt 
/// 是否使用代碼服務器:0 不使用 1 使用代理服務器 
/// &lt /summary &gt 
private int proxyState=0; 
/// &lt summary &gt 
/// 代理服務器地址 
/// &lt /summary &gt 
private string proxyAddress=null; 
/// &lt summary &gt 
/// 代理服務器端口 
/// &lt /summary &gt 
private string proxyPort=null; 
/// &lt summary &gt 
/// 代理服務器用戶名 
/// &lt /summary &gt 
private string proxyAccount=null; 
/// &lt summary &gt 
/// 代理服務器密碼 
/// &lt /summary &gt 
private string proxyPassWord=null; 
/// &lt summary &gt 
/// 代理服務器域 
/// &lt /summary &gt 
private string proxyDomain=null; 
/// &lt summary &gt 
/// 輸出文件路徑 
/// &lt /summary &gt 
private string outFilePath=null; 
/// &lt summary &gt 
/// 輸出的字符串 
/// &lt /summary &gt 
private string outString=null; 
/// &lt summary &gt 
/// 提示信息 
/// &lt /summary &gt 
private string noteMessage; 

#endregion 

#region 公共屬性 
/// &lt summary &gt 
/// 欲讀取的URL地址 
/// &lt /summary &gt 
public string Url 

get{return url;} 
set{url=value;} 

/// &lt summary &gt 
/// 是否使用代理服務器標志 
/// &lt /summary &gt 
public int ProxyState 

get{return proxyState;} 
set{proxyState=value;} 

/// &lt summary &gt 
/// 代理服務器地址 
/// &lt /summary &gt 
public string ProxyAddress 

get{return proxyAddress;} 
set{proxyAddress=value;} 

/// &lt summary &gt 


/// 代理服務器端口 
/// &lt /summary &gt 
public string ProxyPort 

get{return proxyPort;} 
set{proxyPort=value;} 

/// &lt summary &gt 
/// 代理服務器賬號 
/// &lt /summary &gt 
public string ProxyAccount 

get{return proxyAccount;} 
set{proxyAccount=value;} 

/// &lt summary &gt 
/// 代理服務器密碼 
/// &lt /summary &gt 
public string ProxyPassWord 

get{return proxyPassWord;} 
set{proxyPassWord=value;} 

/// &lt summary &gt 
/// 代理服務器域 
/// &lt /summary &gt 
public string ProxyDomain 

get{return proxyDomain;} 
set{proxyDomain=value;} 

/// &lt summary &gt 
/// 輸出文件路徑 
/// &lt /summary &gt 
public string OutFilePath 

get{return outFilePath;} 
set{outFilePath=value;} 

/// &lt summary &gt 
/// 返回的字符串 
/// &lt /summary &gt 
public string OutString 

get{return outString;} 


/// &lt summary &gt 
/// 返回提示信息 
/// &lt /summary &gt 
public string NoteMessage 

get{return noteMessage;} 



#endregion 

#region 構造函數 
public GetPageCode() 


#endregion 

#region 公共方法 
/// &lt summary &gt 
/// 讀取指定URL地址,存到指定文件中 
/// &lt /summary &gt 
public void GetSource() 

WebRequest request = WebRequest.Create(this.url); 
//使用代理服務器的處理 
if(this.proxyState==1) 

//默認讀取80端口的數據 

if(this.proxyPort==null) 
this.ProxyPort="80"; 
WebProxy myProxy=new WebProxy(); 
myProxy = (WebProxy)request.Proxy; 
myProxy.Address = new Uri(this.ProxyAddress+":"+this.ProxyPort); 
myProxy.Credentials = new NetworkCredential(this.proxyAccount, this.proxyPassWord, this.ProxyDomain); 
request.Proxy = myProxy; 

try 


//請求服務 
WebResponse response = request.GetResponse(); 
//返回信息 
Stream resStream = response.GetResponseStream(); 
StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default); 
string tempCode= sr.ReadToEnd(); 
resStream.Close(); 
sr.Close(); 

//如果輸出文件路徑為空,便將得到的內容賦給OutString屬性 
if(this.outFilePath==null) 

this.outString=tempCode; 

else 


FileInfo fi = new FileInfo(this.outFilePath); 
//如果存在文件則先干掉 
if(fi.Exists) 
fi.Delete(); 
StreamWriter sw = new StreamWriter(this.outFilePath,true,Encoding.Default); 
sw.Write(tempCode); 
sw.Flush(); 
sw.Close(); 


catch 

this.noteMessage="出錯了,請檢查網絡是否連通;"; 



#endregion

}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved