爬蟲可以做啥就不講了,這篇主要還是覺得這個技術很有意思,所以找了一篇文檔上手,記錄下自己的操作歷程!
順便分享出來!給大家一條入門的路徑,寫的不好請指教!官網:http://webmagic.io/
先介紹下Webmagic框架
webmagic是一個開源的java爬蟲框架,目標是簡化爬蟲的開發流程讓開發者專注於邏輯功能的開發。
Webmagic的特點:
1.完全模塊化的設計,強大的擴展性
2.核心簡單是涵蓋爬蟲的全部流程,靈活而強大,也是學習爬蟲入門的好東西。
3.提供豐富的抽取也去api.
4.無配置,但是可通過pojo+註解形式實現一個爬蟲。
5.支持多線程。
6.支持分佈式。
7.支持爬取js動態渲染的頁面。
8.無框架依賴,可以靈活的嵌入到項目中。
講講它的架構結構:(主要還是偏於學習這個框架)
WebMagic項目代碼分爲核心和擴展兩部分。核心部分(webmagic-core)是一個精簡的模塊化的爬蟲實現,
而擴展部分包括一些便利的,實用性的功能,擴展部分(webmagic-extension),提供一些便捷的功能,列如註解模式
編寫爬蟲等,而且內置了一些常用的組件,偏於爬蟲開發。
Webmagic的結構分爲:Downloader(下載),PageProcessor(業務處理器),Scheduler(調度程序),Pipeline(管道)四大組件,並由Spider(蜘蛛)將它們彼此組織起來,這
四大組件對應爬蟲生命週期,的下載,處理(也就是PageProcessor解析html),管理,持久化等功能。
而Spider則將這幾個組件組織起來,讓它們可以相互交互,流程化的執行,可以認爲Spider是一個大的容器,它也是WebMagic邏輯的核心。
下面講下四大組件的一個作用:
Downloader
Downloader負責從互聯網上下載頁面,以便後續處理,webMagic默認使用了ApachehttpClient作爲下載工具。
PageProcessor
pageprocessor負責解析頁面,抽取有用的信息,以及發現新的鏈接,webmagic使用Jsoup作爲HTML解析工具
並基於開發瞭解析XPath的工具Xsoup,在這組件中,Pagprocessor對於每個站點每個頁面都不一樣,是需要使用者定製的部分。
Scheduler
Schelude負責管理待抓取的URL,以及一些去重工作。WebMagic默認提供了JDK的內存隊列來管理URL,並yong集合來進行去重。也支持使用Redis進行分佈式管理。
Pipeline
pipeline負責抽取結果的處理,包括計算,持久化到文件,數據庫等。WebMagic默認提供了“輸出到控制檯”和保存到文件“兩種處理方案
下面就是簡單的操作下這個框架爬去頁面!
創建一個項目,環境需要jdk8,maven,idea,
導入下面這鏈兩個包,
<dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>0.7.3</version> </dependency> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-extension</artifactId> <version>0.7.3</version> </dependency>
第二步創建一個爬取類
public class Test1 implements PageProcessor { public void process(Page page) { System.out.println(page.getHtml().toString()); } public Site getSite() { //講下下面代碼的意思。me()作用是創建Site對象,setSleepTime()就是睡覺100毫秒 return Site.me().setSleepTime(100).setRetryTimes(3);//設置重複時間 } public static void main(String[] args) { //代碼的意思就是創建一個爬蟲,並且需要調用addurl(“你要爬取的網站”)。 Spider.create(new Test1()).addUrl("https://gitchat.csdn.net/activities?utm_source=csdn_toolbar").run(); } }
下面的幾張圖介紹下常用的api
設置Spider的其他組件(下載,業務處理,調度程序,管道)都是可以通set方法來進行設置。
page代表了從Downloader下載到的一個頁面-----可能是html,也可以使json或者其他文本格式的內容,pag是webMagic抽取過程的核心對象,它提供一些方法可提供抽取,結果保存等,
site主要用於定製站點本身的一些配置信息,例如編碼,HTTP頭,超時時間,重試策略,等,代理等,多可以通過設置Site對象來進行設置。看下圖
*爬取指定內容(XPath)
XPath,就是XML路徑語言,(XMLPathLanguage),它是一種用來確定XML文檔中
某部分位置的語言。XPath使用路徑表達式來選取XML文檔中的節點或者節點集。這些路徑表達式和我們在常規的電腦文件系統中看到的表達式非常相似。
簡單的看下它的語法:
1.選取結點。
2.謂語
主要用來查找某個結點或者包含某個指定的節點。
謂語被嵌套在方括號中
3.通配符
XPath可以用來選取位置的xml元素,通配指定的節點。
4.多路徑選擇
通過在路徑表達式使用 ”|“ 運算符,你可以選取若干了路徑。
5.XPath軸
軸可以相對於當前節點的節點集。
6.遠算符!
7.常用的功能函數
功能函數能夠更好的進行模糊搜索
之前講到了爬取指定的內容
System.out.println(page.getHtml().xpath("//*[@id=\"nav\"]/div/div/ul/li[5]/a").toString();
代碼的含義是id爲nav的節點下的div節點下的div節點下的url下的第5個節點li節點下的a節點
demo地址後期加上!