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一些常用的語法快速的預覽,適合已經掌握一門編程語