通過JAVA的API可以順利的抓取網路上的大部分指定的網頁內容

悠悠隱於市發表於2011-03-18
JAVA 抓取網頁內容2011-01-06 16:43通過JAVA的API可以順利的抓取網路上的大部分指定的網頁內容,現與大家分享一下這方法理解與心得。最簡單的一種抓取方法就是:

URL url = new URL(myurl);

BufferedReader br = new BufferedReader(newInputStreamReader(url.openStream()));

String s = "";

StringBuffer sb = new StringBuffer("");

while ((s = br.readLine()) != null) {

i++;

sb.append(s+"\r\n");

}

這種方法抓取一般的網頁應該沒有問題,但當有些網頁中存在一些巢狀的redirect連線時,它就會報Server redirected too many times這樣的錯誤,這是因為此網頁內部又有一些程式碼是轉向其它網頁的,迴圈過多導致程式出錯。如果只想抓取本URL中的網頁內容,而不願意讓它有其它的網頁跳轉,可以用以下的程式碼。

URL urlmy = new URL(myurl);

HttpURLConnection con = (HttpURLConnection) urlmy.openConnection();

con.setFollowRedirects(true);

con.setInstanceFollowRedirects(false);

con.connect();

BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));

String s = "";

StringBuffer sb = new StringBuffer("");

while ((s = br.readLine()) != null) {


sb.append(s+"\r\n");

}

這樣的話,抓取的時候程式就不會跳換其它頁面去抓取其它的內容了,這就達到我們的目的了。

如果是我們是處於內部網的話,還需要專門給它加上代理, Java以特殊的系統屬性為代理伺服器提供支援,只要在上面的程式加上以下程式就可以了。

System.getProperties().setProperty( "http.proxyHost", proxyName );

System.getProperties().setProperty( "http.proxyPort", port );

這樣的話就可以實現處於內部網中而向網際網路抓取自己想要的東西了。

上面的程式抓取回來的全部內容都存放在sb這個字串,我們就可以通過正規表示式對它進行分析,提取出自己想要的具體的內容,為我所用,呵呵,這是多麼美妙的一件事情啊!
 

 

相關文章