网络爬虫(2)-- Java爬虫框架
2019獨角獸企業重金招聘Python工程師標準>>>
Nutch
Nutch屬于分布式爬蟲,爬蟲使用分布式,主要是解決兩個問題:1)海量URL管理;2)網速。如果要做搜索引擎,Nutch1.x是一個非常好的選擇。Nutch1.x和solr或者es配合,就可以構成一套非常強大的搜索引擎,否則盡量不要選擇Nutch作為爬蟲。用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。
?
Heritrix
Heritrix?是個“Archival?Crawler”——來獲取完整的、精確的、站點內容的深度復制。包括獲取圖像以及其他非文本內容。抓取并存儲相關的內容。對內容來者不拒,不對頁面進行內容上的修改。重新爬行對相同的URL不針對先前的進行替換。爬蟲主要通過Web用戶界面啟動、監控和調整,允許彈性的定義要獲取的url。
?
crawler4j
crawler4j是Java實現的開源網絡爬蟲。提供了簡單易用的接口,可以在幾分鐘內創建一個多線程網絡爬蟲。
?
WebCollector
WebCollector使用了Nutch的爬取邏輯(分層廣度遍歷),Crawler4j的的用戶接口(覆蓋visit方法,定義用戶操作),以及一套自己的插件機制,設計了一套爬蟲內核。?
?
WebMagic
WebMagic項目代碼分為核心和擴展兩部分。核心部分(webmagic-core)是一個精簡的、模塊化的爬蟲實現,而擴展部分則包括一些便利的、實用性的功能。WebMagic的架構設計參照了Scrapy,目標是盡量的模塊化,并體現爬蟲的功能特點。
?
1.?HttpClient&Jsoup
爬蟲實現的技術有很多,對于java語言來說,有很多的選擇,可以是很多開源的爬蟲框架,也可以使用基本httpClient,Jsoup來爬取網頁
1.1?HttpClient簡介
HttpClient 是 apache 組織下面的一個用于處理 HTTP 請求和響應的開源工具。它不是一個瀏覽器,也不處理客戶端緩存等瀏覽器的功能。它只是一個類庫!它在 JDK 的基本類庫基礎上做了更好的封裝。
HttpClient 項目依賴于 HttpCore(處理核心的 HTTP 協議)、commons-codec(處理與編碼有關的問題的項目)和 commons-logging(處理與日志記錄有關問題的項目)。如果你希望能夠通過 HttpClient 向服務器上傳文件等與 multipart 編碼類型有關的請求,以及其它復雜的MIME 類型,那么,你需要另外一個依賴包:HttpMime(它是專門處理與 MIME 類型有關問題的項目),在下載的 HttpClient 包中(下載地址為:http://hc.apache.org/downloads.cgi)已經包含了 HttpMime
項目中使用的 HttpClient 版本為:4.0.1GA,httpClient需要有以下依賴包:
httpclient-4.0.1.jar
httpcore-4.0.1.jar
httpmime-4.0.1.jar
又依賴于 mime4j(apache-mime4j-0.6.jar)
commons-codec-1.4.jar
commons-logging-1.1.1.jar
commons-io-1.4.jar – 為了更方便處理與 IO 有關的需求
1.1.1?HttpClient抓取網頁流程
使用HttpClient發送請求、接收響應很簡單,一般需要如下幾步:
1.?創建HttpClient對象。
2.?創建請求方法的實例,并指定請求URL。如果需要發送GET請求,創建HttpGet對象;如果需要發送POST請求,創建HttpPost對象。
3.?如果需要發送請求參數,可調用HttpGet、HttpPost共同的setParams(HetpParams params)方法來添加請求參數;對于HttpPost對象而言,也可調用setEntity(HttpEntity entity)方法來設置請求參數。
4.?調用HttpClient對象的execute(HttpUriRequest request)發送請求,該方法返回一個HttpResponse。
5.?調用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取服務器的響應頭;調用HttpResponse的getEntity()方法可獲取HttpEntity對象,該對象包裝了服務器的響應內容。程序可通過該對象獲取服務器的響應內容。
6.?釋放連接。無論執行方法是否成功,都必須釋放連接。
1.1.2?簡單抓取代碼
//使用httpClient發送請求,使用Jsoup分析網頁public?static?void?main(String[] args) throws?Exception {//創建httpClient客戶端HttpClient hClient = new?DefaultHttpClient();//創建http發送請求對象,HttpgetHttpGet hget = new?HttpGet("http://www.itcast.cn");//設置請求頭hget.setHeader("Cookie", "login_sid_t=f39c57f474a4fbffeeac8b0d727c7310; YF-Ugrow-G0=169004153682ef91866609488943c77f; YF-V5-G0=cd5d86283b86b0d506628aedd6f8896e; WBStorage=7754ff192036c629|undefined; _s_tentry=-; YF-Page-G0=074bd03ae4e08433ef66c71c2777fd84; Apache=1025338456965.9829.1478277156276; SINAGLOBAL=1025338456965.9829.1478277156276; ULV=1478277156293:1:1:1:1025338456965.9829.1478277156276:; SUB=_2AkMvQDcef8NhqwJRmP4Uzm7mbYxwzA_EieLBAH7sJRMxHRl-yj9jqmwNtRBn0SIxPIgzk6P4Umq_twX_A70bVg..; SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9W5J2ZDKK_Q-h8ni.aX3E1Ci");hget.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36");//設置連接超時,傳遞響應超時hClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000).setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000).setParameter(ConnRouteParams.DEFAULT_PROXY, new?HttpHost("121.31.71.63", 80));//發送請求HttpResponse response = hClient.execute(hget);//獲取網頁內容String content = EntityUtils.toString(response.getEntity(), "utf-8");System.out.println(content);}1.2?Jsoup簡介
jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數據
通常在寫爬蟲程序時,httpClient集合Jsoup共同使用即可實現完美的爬蟲系統。
httpClient負責模擬瀏覽器發送請求,Jsoup負責解析httpClient請求返回的HTML頁面,解析獲取需要的數據
1.2.1?Jsoup獲取網頁流程
1.?從一個?URL,文件或字符串中解析?HTML;
2.?使用?DOM?或?CSS?選擇器來查找、取出數據;
3.?可操作?HTML?元素、屬性、文本;
1.2.2?Jsoup獲取網頁代碼
//使用jsoup加載遠程連接數據@Testpublic?void?myJsouptest() throws?Exception{String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36";//準備cookie信息Map<String, String> maps = new?HashMap<String, String>();maps.put("TC-Ugrow-G0", "968b70b7bcdc28ac97c8130dd353b55e");maps.put("SUB", "2AkMvfeeDf8NhqwJRmP0dzGvhZY5yywvEieLBAH7sJRMxHRl-yT9jqmAHtRAgR4BQZgBIE-Xz-jsqjVftcUdtrA..");maps.put("SUBP", "0033WrSXqPxfM72-Ws9jqgMF55529P9D9WhBu3bohh6dYkXbY_GUs5d8");//獲取網頁dom對象Document doc = Jsoup.connect("http://www.itcast.cn/").userAgent(userAgent).cookies(maps).get();//獲取文檔標簽String title = doc.title();System.out.println(title);//獲取網頁元素Elements elements = doc.select("div.qrcode-text");System.out.println(elements.text());}?
2.?綜合應用
?
3.?爬蟲在電商網站應用
?
?
轉載于:https://my.oschina.net/bigdataer/blog/888493
總結
以上是生活随笔為你收集整理的网络爬虫(2)-- Java爬虫框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用快嘉框架开发项目示例
- 下一篇: windows新建或者重命名文件及目录必