超简单的java爬虫
生活随笔
收集整理的這篇文章主要介紹了
超简单的java爬虫
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最簡(jiǎn)單的爬蟲,不需要設(shè)定代理服務(wù)器,不需要設(shè)定cookie,不需要http連接池,使用httpget方法,只是為了獲取html代碼...
好吧,滿足這個(gè)要求的爬蟲應(yīng)該是最基本的爬蟲了。當(dāng)然這也是做復(fù)雜的爬蟲的基礎(chǔ)。
使用的是httpclient4的相關(guān)API。不要跟我講網(wǎng)上好多都是httpclient3的代碼該怎么兼容的問(wèn)題,它們差不太多,但是我們應(yīng)該選擇新的能用的接口!
當(dāng)然,還是有很多細(xì)節(jié)可以去關(guān)注一下,比如編碼問(wèn)題(我一般都是強(qiáng)制用UTF-8的)
放碼過(guò)來(lái):
?
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream;import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils;public class Easy {//輸入流轉(zhuǎn)為String類型public static String inputStream2String(InputStream is)throws IOException{ ByteArrayOutputStream baos=new ByteArrayOutputStream(); int i=-1; while((i=is.read())!=-1){ baos.write(i); } return baos.toString(); }//抓取網(wǎng)頁(yè)的核心函數(shù)public static void doGrab() throws Exception {//httpclient可以認(rèn)為是模擬的瀏覽器CloseableHttpClient httpclient = HttpClients.createDefault();try {//要訪問(wèn)的目標(biāo)頁(yè)面urlString targetUrl="http://chriszz.sinaapp.com";//使用get方式請(qǐng)求頁(yè)面。復(fù)雜一點(diǎn)也可以換成post方式的HttpGet httpGet = new HttpGet(targetUrl);CloseableHttpResponse response1 = httpclient.execute(httpGet);try {String status=response1.getStatusLine().toString();//通過(guò)狀態(tài)碼來(lái)判斷訪問(wèn)是否正常。200表示抓取成功if(!status.equals("HTTP/1.1 200 OK")){ System.out.println("此頁(yè)面可以正常獲取!");}else{response1 = httpclient.execute(httpGet);System.out.println(status);}//System.out.println(response1.getStatusLine());HttpEntity entity1 = response1.getEntity();// do something useful with the response body// and ensure it is fully consumedInputStream input=entity1.getContent();String rawHtml=inputStream2String(input);System.out.println(rawHtml);//有時(shí)候會(huì)有中文亂碼問(wèn)題,這取決于你的eclipse java工程設(shè)定的編碼格式、當(dāng)前java文件的編碼格式,以及抓取的網(wǎng)頁(yè)的編碼格式//比如,你可以用String的getBytes()轉(zhuǎn)換編碼//String html = new String(rawHtml.getBytes("ISO-8859-1"),"UTF-8");//轉(zhuǎn)換后的結(jié)果EntityUtils.consume(entity1);} finally {response1.close();//記得要關(guān)閉}} finally {httpclient.close();//這個(gè)也要關(guān)閉哦!}}/** 最簡(jiǎn)單的java爬蟲--抓取百度首頁(yè)* memo:* 0.抓取的是百度的首頁(yè),對(duì)應(yīng)一個(gè)html頁(yè)面。* (至于為啥我們?cè)L問(wèn)的是http://www.baidu.com而不是http://www.baidu.com/xxx.html,這個(gè)是百度那邊設(shè)定的,總之我們會(huì)訪問(wèn)到那個(gè)包含html的頁(yè)面) * 1.使用http協(xié)議的get方法就可以了(以后復(fù)雜了可以用post方法,設(shè)定cookie,甚至設(shè)定http連接池;或者抓取json格式的數(shù)據(jù)、抓取圖片等,也是類似的)* 2.通過(guò)httpclient的相關(guān)包(httpclient4版本)編寫,需要下載并添加相應(yīng)的jar包到build path中* 3.代碼主要參考了httpclient(http://hc.apache.org/)包里面的tutorial的pdf文件。*/public static void main(String[] args) throws Exception{Easy.doGrab();//為了簡(jiǎn)答這里把doGrab()方法定義為靜態(tài)方法了所以直接Easy.doGrab()就好了}}轉(zhuǎn)載于:https://www.cnblogs.com/zjutzz/p/3830140.html
總結(jié)
以上是生活随笔為你收集整理的超简单的java爬虫的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 类和对象:一些相关的BIF - 零基础入
- 下一篇: cocos2dx引用计数