1. 程式人生 > >Crawler4j快速入門例項

Crawler4j快速入門例項

crawler4j是Java實現的開源網路爬蟲。提供了簡單易用的介面,可以在幾分鐘內建立一個多執行緒網路爬蟲。

<dependency>
      <groupId>edu.uci.ics</groupId>
      <artifactId>crawler4j</artifactId>
      <version>4.2</version>
 </dependency>

編寫自定義爬蟲類MyCrawler

package com.hbk.test;

import java.util.Set;
import
java.util.regex.Pattern; import edu.uci.ics.crawler4j.crawler.Page; import edu.uci.ics.crawler4j.crawler.WebCrawler; import edu.uci.ics.crawler4j.parser.HtmlParseData; import edu.uci.ics.crawler4j.url.WebURL; /** * 自定義爬蟲類需要繼承WebCrawler類,決定哪些url可以被爬以及處理爬取的頁面資訊 * * @author 黃寶康 2017年8月29日 下午2:24:06 */
public class MyCrawler extends WebCrawler { /** * 正則匹配指定的字尾檔案 */ private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|gif|jpg|png|mp3|mp3|zip|gz))$"); /** * 這個方法主要是決定哪些url我們需要抓取,返回true表示是我們需要的,返回false表示不是我們需要的Url * 第一個引數referringPage封裝了當前爬取的頁面資訊 第二個引數url封裝了當前爬取的頁面url資訊 */
@Override public boolean shouldVisit(Page referringPage, WebURL url) { String href = url.getURL().toLowerCase(); // 得到小寫的url return !FILTERS.matcher(href).matches() // 正則匹配,過濾掉我們不需要的字尾檔案 && href.startsWith("http://zhdw.71zhihui.com"); // url必須是http://zhdw.71zhihui.com開頭,規定站點 } /** * 當我們爬到我們需要的頁面,這個方法會被呼叫,我們可以盡情的處理這個頁面 page引數封裝了所有頁面資訊 */ @Override public void visit(Page page) { String url = page.getWebURL().getURL(); // 獲取url System.out.println("URL: " + url); if (page.getParseData() instanceof HtmlParseData) {// 判斷是否是html資料 HtmlParseData htmlParseData = (HtmlParseData) page.getParseData(); // 強制型別轉換,獲取html資料物件 String text = htmlParseData.getText(); // 獲取頁面純文字(無html標籤) String html = htmlParseData.getHtml(); // 獲取頁面Html Set<WebURL> links = htmlParseData.getOutgoingUrls(); // 獲取頁面輸出連結 System.out.println("純文字: " + text); System.out.println("html: " + html); System.out.println("輸出連結個數: " + links.size()); } } }

編寫爬蟲控制器類Controller

package com.hbk.test;

import edu.uci.ics.crawler4j.crawler.CrawlConfig;
import edu.uci.ics.crawler4j.crawler.CrawlController;
import edu.uci.ics.crawler4j.fetcher.PageFetcher;
import edu.uci.ics.crawler4j.robotstxt.RobotstxtConfig;
import edu.uci.ics.crawler4j.robotstxt.RobotstxtServer;

/**
 * 爬蟲控制器
 * @author 黃寶康
 * 2017年8月29日 下午2:36:33
 */
public class Controller {

    public static void main(String[] args) throws Exception {
        String crawlStorageFolder = "c:/crawl"; // 定義爬蟲資料儲存位置
        int numberOfCrawlers = 7; // 定義7個爬蟲,也就是7個執行緒

        CrawlConfig config = new CrawlConfig(); // 定義爬蟲配置
        config.setCrawlStorageFolder(crawlStorageFolder); // 設定爬蟲檔案儲存位置

        /*
         * 例項化爬蟲控制器
         */
        PageFetcher pageFetcher = new PageFetcher(config); // 例項化頁面獲取器
        RobotstxtConfig robotstxtConfig = new RobotstxtConfig(); // 例項化爬蟲機器人配置 比如可以設定 user-agent

        // 例項化爬蟲機器人對目標伺服器的配置,每個網站都有一個robots.txt檔案 規定了該網站哪些頁面可以爬,哪些頁面禁止爬,該類是對robots.txt規範的實現
        RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher); 
        // 例項化爬蟲控制器
        CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);

        /**
         * 配置爬蟲種子頁面,就是規定的從哪裡開始爬,可以配置多個種子頁面
         */
        controller.addSeed("http://zhdw.71zhihui.com");
        /**
         * 啟動爬蟲,爬蟲從此刻開始執行爬蟲任務,根據以上配置
         */
        controller.start(MyCrawler.class, numberOfCrawlers);
    }

}

執行Controller的main方法,爬起頁面結果在控制檯中輸出了html程式碼資料等。

這裡寫圖片描述

專案中只用到了兩個類,一個pom.xml配置jar檔案依賴,適合初學者學習Crawler4j入門。

這裡寫圖片描述

並且在磁碟上自動生成了以下檔案:
這裡寫圖片描述

推廣連結

新款廚房臥室櫥櫃貼紙,大量有貨,支援分銷代銷,分享此內容到朋友圈,憑截圖找賣家免費領取保溫杯一個(包郵),活動真實有效,每天只有前60個名額,發貨領取獎品請掃碼聯絡店主。這裡寫圖片描述

相關推薦

Crawler4j快速入門例項

crawler4j是Java實現的開源網路爬蟲。提供了簡單易用的介面,可以在幾分鐘內建立一個多執行緒網路爬蟲。 <dependency> <groupId>edu.uci.ics</groupId>

Python字串格式化快速入門例項(自3.7官方文件)

Python字串格式化例子 Shawn python3.7 文件: https://docs.python.org/3/library/string.html#formatstrings 完整功能介紹見官方文件. 本文可用於快速查詢Python字串格

Crawler4j 快速入門

crawler4j是Java實現的開源網路爬蟲。提供了簡單易用的介面,可以在幾分鐘內建立一個多執行緒網路爬蟲 crawler4j中用了slf4j來記錄專案執行日誌資訊。我們使用slf4j具體實現類log4j 建立一個maven專案。在pom.xml貼上所需jar

HTML5快速入門例項(三)Canvas自定義畫筆樣式

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <t

快速入門(完整):Python例項100個(基於最新Python3.7版本)

Python3 100例 原題地址: http://www.runoob.com/python/python-100-examples.html git地址: https://github.com/RichardFu123/Python100Cases 轉載請標註: https:

【必看】認識Vue,Vue快速入門,Vue如何建立一個例項?Vue的生命週期,什麼是鉤子函式?

認識Vue Vue (讀音 /vjuː/,類似於 view) 是一套用於構建使用者介面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。Vue 的核心庫只關注檢視層,不僅易於上手,還便於與第三方庫或既有專案整合。另一方面,當與現代化的工具鏈以及各種支援類庫結合使

SciKit-learn快速入門教程和例項(二)

一,sklearn的常用屬性和功能 繼續上次對波士頓房價預測的討論,瞭解模型的屬性和功能。 #首先匯入庫,使用的是線性迴歸 from sklearn import datasets from sklearn.linear_model import LinearRegr

Java快速入門-05-陣列迴圈條件 例項《延禧攻略》

《延禧攻略》如此火爆,蹭蹭熱度,用 JAVA 最基礎的陣列,迴圈,條件,輸入/輸出,做了一個簡單的小遊戲,幫助初學者鞏固 JAVA 基礎,註釋非常詳細 動態圖展示: xuanfei.java 原始碼: //包名根據自己包修改,可以沒有 package xuan

Java快速入門本地呼叫哈工大LTP例項

因為檔案較大,開始閱讀文章之前先下載完整的ltp_data的model,連結,本文下載的是ltp_data_v3.4.0,.zip和.tar.gz二者擇一 使用Eclipse,生成ltp4j的jar包,以便在我們自己的java專案中使用。 從git

Scikit-learn快速入門教程和例項(一)

一,什麼是SKlearn SciKit learn的簡稱是SKlearn,是一個python庫,專門用於機器學習的模組。 以下是它的官方網站,文件等資源都可以在裡面找到http://scikit-learn.org/stable/#。

Scikit-learn快速入門教程和例項

轉自:https://blog.csdn.net/linxid/article/details/79104130   Github主頁:https://linxid.github.io/ 知乎:https://www.zhihu.com/people/dong-wen-hui-90

netty快速入門3個例項

是一個netty快速入門的例子,也是我的學習筆記,比較簡單,翻譯於官方的文件整理後把所有程式碼註釋放在每一行程式碼中間,簡單明瞭地介紹一些基礎的用法。    首頁這是基於netty5的例子,如果需要使用請依賴netty5的包。maven引用方式 1 <depe

(多核DSP快速入門)4.編譯測試多核DSP例項Vlfft

原創文章       Vlfft是由TI官網提供的一個大尺寸快速傅立葉變換的多核DSP例項,其下載地址如下:       這個例項是許多同學多核DSP的入門例項,例項內也提供了簡單的安裝編譯教程,不過並沒有講得很清楚,在編譯的過程中還是會出現很多問題,本節主要提供一

vue2+vuex+vue-router 快速入門(三) vue 例項介紹

vue 例項介紹   vue 例項分兩種,一種為元件例項,另外一種為根例項。元件例項負責建立個性化元件、而根例項負責把元件渲染到指定的真實的 DOM 結構中。並且 vue 為我們提供了一種特殊的檔案格式 .vue 來建立 元件例項。.vue 檔案格式如下:

day39-Spring 12-Spring的JDBC模板:快速入門

pri 哪些 困難 ces 5.0 使用 只需要 common commons Spring AOP的關鍵是它的底層的原理和思想,配置和使用並不是十分困難.AOP本身就是一個思想,是面向對象的延伸,不是用來替換面向對象的,而是用來解決面向對象中的一些問題的.在最初的時候提出

vuex2快速入門

for nbsp mar lin ext mac os cnblogs value san #建立store.jsimport Vue from ‘vue‘; import Vuex from ‘vuex‘; Vue.use(Vuex) export d

快速入門系列--WCF--07傳輸安全、授權與審核

最大的 緩存 ims cut 常見 曾經 strong 這一 set 這部分主要涉及企業級應用的安全問題,一般來說安全框架主要提供3個典型的安全行為:認證、授權和審核。除了典型的安全問題,對於一個以消息作為通信手段的分布式應用,還需要考慮消息保護(Message Prote

快速入門系列

body 現在 安全 behavior 需求 discovery 中心 驗證 溝通 最後一章將進行WCF擴展和新特性的學習,這部分內容有一定深度,有一個基本的了解即可,當需要自定義一個完整的SOA框架時,可以再進行細致的學習和實踐。 服務端架構體系的構建主要包含接下來

快速入門系列--WCF--02消息、會話與服務寄宿

abc align bsp 不同的 cpu .org 程序 伸縮 網絡 經過WCF基礎的ABC學習,已經可以構建簡單的WCF的服務,使用不同的服務地址和綁定類型,根據業務提供所需的服務契約。但不禁想問,服務所使用的消息報文是什麽樣的形式麽?蘊含什麽樣內容呢?WCF服務是否支

python 基本語法速覽,快速入門

我們 method adding ger monk use gre 數據類型 struct https://zhuanlan.zhihu.com/p/24536868 學習參考於這個博文。 我做一個筆記。 關於python一些常用的語法快速的預覽,適合已經掌握一門編程語