wind-bell輕量級(jí)的爬蟲工具
wind-bell 風(fēng)鈴蟲是一款輕量級(jí)的爬蟲工具,似風(fēng)鈴一樣靈敏,如蜘蛛一般敏捷,能感知任何細(xì)小的風(fēng)吹草動(dòng),輕松抓取互聯(lián)網(wǎng)上的內(nèi)容。它是一款對(duì)目標(biāo)服務(wù)器相對(duì)友好的蜘蛛程序,內(nèi)置了二十余種常見或不常見的瀏覽器標(biāo)識(shí),能夠自動(dòng)處理cookie和網(wǎng)頁來源信息,輕松繞過服務(wù)器限制,智能調(diào)整請(qǐng)求間隔時(shí)間,動(dòng)態(tài)調(diào)整請(qǐng)求頻率,防止對(duì)目標(biāo)服務(wù)器造成干擾。此外,風(fēng)鈴蟲還是一款對(duì)普通用戶十分友好的工具,它提供的大量鏈接提取器和內(nèi)容提取器讓用戶可以隨心所欲地快速配置,甚至于只要提供一個(gè)開始請(qǐng)求地址就能配置出自己爬蟲程序。同時(shí),風(fēng)鈴蟲也開放了許多自定義接口,讓高級(jí)用戶能夠根據(jù)需要自定義爬蟲功能。最后,風(fēng)鈴蟲還天然支持分布式和集群功能,讓你突破單機(jī)環(huán)境的束縛,釋放出你的爬蟲能力??梢哉f,風(fēng)鈴蟲幾乎能抓取目前所有的網(wǎng)站里的絕大部分內(nèi)容。
【聲明】 請(qǐng)勿將風(fēng)鈴蟲應(yīng)用到任何可能會(huì)違反法律規(guī)定和道德約束的工作中,請(qǐng)友善使用風(fēng)鈴蟲,遵守蜘蛛?yún)f(xié)議,不要將風(fēng)鈴蟲用于任何非法用途。如您選擇使用風(fēng)鈴蟲即代表您遵守此協(xié)議,作者不承擔(dān)任何由于您違反此協(xié)議帶來任何的法律風(fēng)險(xiǎn)和損失,一切后果由您承擔(dān)。
快速使用
<dependency>
<groupId>com.yishuifengxiao.common</groupId>
<artifactId>crawler</artifactId>
<version>替換為最新的版本號(hào)</version>
</dependency>
簡(jiǎn)單使用
提取雅虎財(cái)經(jīng)的內(nèi)容頁的電子貨幣的名字
//創(chuàng)建一個(gè)提取規(guī)則
//該提取規(guī)則標(biāo)識(shí)使用 XPATH提取器進(jìn)行提取,
//該XPATH提取器的XPATH表達(dá)式為 //h1/text() , 該提取提取器的作用順序是0
FieldExtractRule extractRule = new FieldExtractRule(Rule.XPATH, "http://h1/text()", "", 0);
//創(chuàng)建一個(gè)提取項(xiàng)
ContentItem contentItem = new ContentItem();
contentItem
.setFiledName("name") //提取項(xiàng)代碼,不能為空
.setName("加密電子貨幣名字") //提取項(xiàng)名字,可以不設(shè)置
.setRules(Arrays.asList(extractRule)); //設(shè)置提取規(guī)則
//創(chuàng)建一個(gè)風(fēng)鈴蟲實(shí)例
Crawler crawler = CrawlerBuilder.create()
.startUrl("https://hk.finance.yahoo.com/cryptocurrencies") //風(fēng)鈴蟲的起始鏈接
// 風(fēng)鈴蟲會(huì)將每次請(qǐng)求的網(wǎng)頁的內(nèi)容中的URL先全部提取出來,然后將完全匹配此規(guī)則的鏈接放入鏈接池
// 如果不設(shè)置則表示提取鏈接中所有包含域名關(guān)鍵字(例如此例中的ifeng)的鏈接放入鏈接池
//鏈接池里的鏈接會(huì)作為下次抓取請(qǐng)求的種子鏈接
.addLinkRule("https://hk.finance.yahoo.com/quote/.+")//鏈接提取規(guī)則,多以添加多個(gè)鏈接提取規(guī)則,
//可以設(shè)置多個(gè)內(nèi)容頁的規(guī)則,多個(gè)內(nèi)容頁規(guī)則之間用半角逗號(hào)隔開
//只要內(nèi)容頁URL中完全匹配此規(guī)則就進(jìn)行內(nèi)容提取,如果不設(shè)置標(biāo)識(shí)提取域名下所有的鏈接
.extractUrl("https://hk.finance.yahoo.com/quote/.+") //內(nèi)容頁的規(guī)則,
//風(fēng)鈴蟲可以設(shè)置多個(gè)提取項(xiàng),這里為了演示只設(shè)置了一個(gè)提取項(xiàng)
.addExtractItem(contentItem) //增加一個(gè)提取項(xiàng)
//如果不設(shè)置則使用默認(rèn)時(shí)間10秒,此值是為了防止抓取頻率太高被服務(wù)器封殺
.interval(3)//每次進(jìn)行爬取時(shí)的平均間隔時(shí)間,單位為秒,
.creatCrawler();
//啟動(dòng)爬蟲實(shí)例
crawler.start();
// 這里沒有設(shè)置信息輸出器,表示使用默認(rèn)的信息輸出器
//默認(rèn)的信息輸出器使用的logback日志輸出方法,因此需要看控制臺(tái)信息
//由于風(fēng)鈴蟲時(shí)異步運(yùn)行的,所以演示時(shí)這里加入循環(huán)
while (Statu.STOP != crawler.getStatu()) {
try {
Thread.sleep(1000 * 20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
上述例子的作用提取雅虎財(cái)經(jīng)的內(nèi)容頁的電子貨幣的名字,如果用戶想要提取其他信息,只需要按照規(guī)則配置好其他的提取規(guī)則即可。
注意 上述示例僅供學(xué)習(xí)演示所用,風(fēng)鈴蟲使用者在抓取網(wǎng)頁內(nèi)容請(qǐng)嚴(yán)格遵守相關(guān)的法律規(guī)定和目標(biāo)網(wǎng)站的蜘蛛?yún)f(xié)議
風(fēng)鈴蟲原理
風(fēng)鈴蟲的原理極為簡(jiǎn)單,主要由 資源調(diào)度器、網(wǎng)頁下載器、鏈接解析器、內(nèi)容解析器、信息輸出器 這極大部分組成。
他們的作用與功能如下所示:
- 資源調(diào)度器:負(fù)責(zé)風(fēng)鈴蟲資源的調(diào)度過程,例如進(jìn)行任務(wù)的儲(chǔ)存、任務(wù)的調(diào)度和任務(wù)的管理
- 網(wǎng)頁下載器:負(fù)責(zé)根據(jù)調(diào)度器調(diào)度的任務(wù)下載網(wǎng)頁資源
- 鏈接解析器:負(fù)責(zé)解析網(wǎng)頁下載器下載的網(wǎng)頁內(nèi)容,從網(wǎng)頁內(nèi)容中提取出所有符合要求的鏈接
- 內(nèi)容解析器:負(fù)責(zé)對(duì)網(wǎng)頁下載器下載的網(wǎng)頁內(nèi)容進(jìn)行內(nèi)容解析
- 信息輸出器:輸出內(nèi)容解析器解析出來的數(shù)據(jù)
其中的鏈接解析器是由一系列的鏈接提取器組合而成,目前鏈接提取器主要是支持正則提取。
內(nèi)容解析器由一系列的內(nèi)容提取器組合而成,不同的內(nèi)容提取器功能不同,適用于不同的解析場(chǎng)景,支持多個(gè)提取器的重復(fù)、循環(huán)等多種組合形式。
上述個(gè)組件均提供了自定義配置接口,使用戶可以根據(jù)實(shí)際需要進(jìn)行自定義配置,滿足各種復(fù)雜乃至異常場(chǎng)景的要求。
風(fēng)鈴蟲內(nèi)置的內(nèi)容提取器有:
- 原文提取器
- 中文提取器
- 常量提取器
- CSS內(nèi)容提取器
- CSS文本提取器
- 郵箱提取器
- 數(shù)字提取器
- 正則提取器
- 字符刪除提取器
- 字符替換提取器
- 字符串截取提取器
- XPATH提取器
- 數(shù)組截取
- ...
在進(jìn)行文本內(nèi)容提取時(shí),用戶可以將這些提取器自由組合以提取出自己需要的內(nèi)容,更多提取器的具體用法請(qǐng)參見 內(nèi)容提取器用法。
風(fēng)鈴蟲內(nèi)置的瀏覽器標(biāo)識(shí)有:
- 谷歌瀏覽器(windows版、linux版)
- Opera瀏覽器 (windows版、MAC版)
- 火狐瀏覽器(windows版、linux版、MAC版)
- IE瀏覽器(IE9、IE11)
- EDAG瀏覽器
- safari瀏覽器(windows版、MAC版)
- ...
分布式支持
核心代碼如下:
....
//省略其他代碼
....
//創(chuàng)建redis資源調(diào)度器
Scheduler scheduler=new RedisScheduler("唯一的名字",redisTemplate)
//創(chuàng)建一個(gè)redis資源緩存器
RequestCache requestCache = new RedisRequestCache(redisTemplate);
crawler
.setRequestCache(requestCache) //設(shè)置使用redis資源緩存器
.setScheduler(scheduler); //設(shè)置使用redis資源調(diào)度器
....
//省略其他代碼
....
//啟動(dòng)爬蟲實(shí)例
crawler.start();
狀態(tài)監(jiān)控
風(fēng)鈴蟲還提供了強(qiáng)大的狀態(tài)監(jiān)控和事件監(jiān)控能力,通過 狀態(tài)監(jiān)聽器和事件監(jiān)聽器,風(fēng)鈴蟲讓你對(duì)任務(wù)的運(yùn)行情況了如指掌,實(shí)時(shí)掌控實(shí)例運(yùn)行過程中遇到的各種問題,真正做到對(duì)任務(wù)的運(yùn)行情況洞若觀火,方便運(yùn)維。
解析模擬器
由于風(fēng)鈴蟲的解析功能十分強(qiáng)大,規(guī)定定義十分靈活,為了直觀地了解已配置的規(guī)則定義的作用,風(fēng)鈴蟲提供了解析模擬器,讓使用者能夠快速了解自己設(shè)置的規(guī)則定義的效果是否符合預(yù)期目標(biāo),及時(shí)調(diào)整規(guī)則定義,方便風(fēng)鈴蟲實(shí)例的配置。
風(fēng)鈴蟲平臺(tái)效果演示
- 配置基本信息
配置爬蟲的名字、使用的線程數(shù)量和超時(shí)停止時(shí)間
2. 配置鏈接爬取信息
配置爬蟲的起始種子鏈接和從網(wǎng)頁里提取下一次抓取時(shí)的鏈接的提取規(guī)則
3. 配置站點(diǎn)信息
此步驟一般可以省略,但是對(duì)于某些會(huì)校驗(yàn)cookie和請(qǐng)求頭參數(shù)的網(wǎng)站,此配置非常有用
4 提取項(xiàng)配置
配置需要從網(wǎng)站里提取出來的數(shù)據(jù),例如新聞標(biāo)題和網(wǎng)頁正文等信息
5 屬性提取配置
調(diào)用內(nèi)容提取器進(jìn)行任意組合,以根據(jù)需要提取出需要的數(shù)據(jù)
6 屬性提取測(cè)試
提前檢驗(yàn)提取項(xiàng)的配置是否正確,提取出來的數(shù)據(jù)是否符合預(yù)期目標(biāo)
相關(guān)資源鏈接
