可以使用HttpClient讀取網(wǎng)頁(yè)的內(nèi)容
創(chuàng)新互聯(lián)公司是專業(yè)的永平網(wǎng)站建設(shè)公司,永平接單;提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行永平網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
整個(gè)過(guò)程分為六步
創(chuàng)建 HttpClient 的實(shí)例
2. 創(chuàng)建某種連接方法的實(shí)例,在這里是 GetMethod。在 GetMethod 的構(gòu)造函數(shù)中傳入待連接的地址
3. 調(diào)用第一步中創(chuàng)建好的實(shí)例的 execute 方法來(lái)執(zhí)行第二步中創(chuàng)建好的 method 實(shí)例
4. 讀 response
5. 釋放連接。無(wú)論執(zhí)行方法是否成功,都必須釋放連接
6. 對(duì)得到后的內(nèi)容進(jìn)行處理
實(shí)現(xiàn)如下:
import java.io.IOException;
import org.apache點(diǎn)抗 mons.httpclient.*;
import org.apache點(diǎn)抗 mons.httpclient.methods.GetMethod;
import org.apache點(diǎn)抗 mons.httpclient.params.HttpMethodParams;
public class HttpClientTest...{
public static void main(String[] args) {
//構(gòu)造HttpClient的實(shí)例
HttpClient httpClient = new HttpClient();
//創(chuàng)建GET方法的實(shí)例
GetMethod getMethod = new GetMethod("");
//使用系統(tǒng)提供的默認(rèn)的恢復(fù)策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
try {
//執(zhí)行g(shù)etMethod
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: "
+ getMethod.getStatusLine());
}
//讀取內(nèi)容
byte[] responseBody = getMethod.getResponseBoy();
//處理內(nèi)容
System.out.println(new String(responseBody));
} catch (HttpException e) {
//發(fā)生異常,可能是協(xié)議不對(duì)或者返回的內(nèi)容有問(wèn)題
System.out.println("Please check your provided http address!");
e.printStackTrace();
} catch (IOException e) {
//發(fā)生網(wǎng)絡(luò)異常
e.printStackTrace();
} finally {
//釋放連接
getMethod.releaseConnection();
}
}
}
這樣得到的是頁(yè)面的源代碼,再進(jìn)行處理
下載一個(gè)jsoup包,并導(dǎo)入到項(xiàng)目里面。然后就可以很簡(jiǎn)便地編寫爬蟲了。
jsoup教程:
及jsoup中文版標(biāo)準(zhǔn)使用手冊(cè):、
網(wǎng)上還有大量jsoup教程,使用中可能涉及到 正則表達(dá)式,這里推薦一個(gè)講解正則表達(dá)式基本操作的:
除此之外,還要考慮數(shù)據(jù)保存。你需要建立一個(gè)數(shù)據(jù)庫(kù),比如MySQL,然后將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)里面。這個(gè)過(guò)程可能比較困難。推薦網(wǎng)址:,上面有4個(gè)相關(guān)鏈接很有用。(其實(shí)上面講解了抓取的全過(guò)程,含較完整的源代碼。作者似乎沒(méi)有使用jsoup,使用jsoup可以節(jié)省很多代碼,比如截取某個(gè)標(biāo)簽后面的內(nèi)容,使用jsoup包后一行代碼就可以搞定)
最后將數(shù)據(jù)導(dǎo)出到word或execl里,可以使用工具Navicat ,網(wǎng)上很多綠色版,不用安裝。
1.編寫useSourceViewer 類的基本框架,該類僅包括無(wú)返回值的main ()方法,該方法從參數(shù)中獲取URL,通過(guò)輸入緩沖和輸出緩沖將該URL 原碼輸出。
2.編寫useSourceViewer 類,代碼如下:
import java點(diǎn)虐 .*;
import java.io.*;
public class useSourceViewer
{
public static void main (String[] args)
{
if (args.length 0)
{
try
{
//讀入U(xiǎn)RL
URL u = new URL(args[0]);
InputStream in = u.openStream( );
// 為增加性能存儲(chǔ)輸入流
in = new BufferedInputStream(in);
// 將輸入流連接到閱讀器
Reader r = new InputStreamReader(in);
int c;
while ((c = r.read( )) != -1)
{
System.out.print((char) c);
}
Object o = u.getContent( );
System.out.println("I got a " + o.getClass().getName( ));
}
catch (MalformedURLException e)
{
System.err.println(args[0] + " is not a parseable URL");
}
catch (IOException e)
{
System.err.println(e);
}
} // end if
} // end main
} // end SourceViewer}