Java 通過gecco快速搭建一個爬蟲框架
阿新 • • 發佈:2018-12-27
Java gecco 爬蟲Demo
Gecco是一款用java語言開發的輕量化的易用的網路爬蟲框架。
官網:http://www.geccocrawler.com/
1.匯入依賴
<dependency>
<groupId>com.geccocrawler</groupId>
<artifactId>gecco</artifactId>
<version>1.0.8</version>
</dependency>
2.建立爬蟲類
- 介面HtmlBean說明該爬蟲是一個解析html頁面的爬蟲(gecco還支援json格式的解析)
- 註解@Gecco告知該爬蟲匹配的url格式(matchUrl)和內容抽取後的bean處理類(pipelines處理類採用管道過濾器模式,可以定義多個處理類)。
import com.geccocrawler.gecco.GeccoEngine; import com.geccocrawler.gecco.annotation.Gecco; import com.geccocrawler.gecco.annotation.HtmlField; import com.geccocrawler.gecco.annotation.Request; import com.geccocrawler.gecco.annotation.Text; import com.geccocrawler.gecco.request.HttpRequest; import com.geccocrawler.gecco.spider.HtmlBean; import java.util.List; /** * @Auther: lianjc * @Date: 2018/11/19 0019 09:54 * @Description: */ @Gecco(matchUrl = "https://blog.csdn.net/u013396133/article/details/84255590",pipelines = "testPipelines") public class Test implements HtmlBean { @Request private HttpRequest request; @Text @HtmlField(cssPath = "#mainBox > main > div.blog-content-box > div > div > div.article-title-box > h1") private String title; @HtmlField(cssPath = "#content_views > p:nth-child(5)") private String content; @HtmlField(cssPath = "#mainBox > main > div.blog-content-box > article") private List<String> contents; public List<String> getContents() { return contents; } public void setContents(List<String> contents) { this.contents = contents; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public HttpRequest getRequest() { return request; } public void setRequest(HttpRequest request) { this.request = request; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
2.建立一個Pipelines(通道),用來接收爬來的資料
import com.geccocrawler.gecco.annotation.PipelineName; import com.geccocrawler.gecco.pipeline.Pipeline; /** * @Auther: lianjc * @Date: 2018/11/22 0022 11:29 * @Description: */ @PipelineName(value="testPipelines") public class TestPipelines implements Pipeline<Test> { @Override public void process(Test test) { System.out.println("獲取到的標題:"+test.getTitle()); System.out.println(test.getContent()); for (int i = 0; i <test.getContents().size() ; i++) { System.out.println(test.getContents().get(i)); } } }
3.main方法測試
public static void main(String[] args) {
GeccoEngine.create()
//Gecco搜尋的包路徑
.classpath("com.higo.model")
//開始抓取的頁面地址
.start("https://blog.csdn.net/u013396133/article/details/84255590")
//開啟幾個爬蟲執行緒
.thread(1)
//單個爬蟲每次抓取完一個請求後的間隔時間
.interval(2000)
.run();
}
4.效果圖
5.程式碼解讀
- 介面HtmlBean說明該爬蟲是一個解析html頁面的爬蟲(gecco還支援json格式的解析)
- 註解@Gecco告知該爬蟲匹配的url格式(matchUrl)和內容抽取後的bean處理類
(例如:http://www.123.com?id={id}&user={user} ) 定義url的格式通過 @RequestParameter傳遞引數 - @Gecco中pipelines屬性來定義輸出通道可以自己來定義通道也可以輸出到控制檯
如:pipelines=“consolePipeline” - 註解@RequestParameter可以注入url中的請求引數,如@RequestParameter(“user”)表示匹配url中的{user}
- 註解@Request 發起一個request請求
- 註解@Text表示獲取@HtmlField抽取出來的元素的text內容
- 註解@Html表示獲取@HtmlField抽取出來的元素的html內容(如果不指定預設為@Html)
- GeccoEngine表示爬蟲引擎,通過create()初始化,通過start()/run()執行。可以配置一些啟動引數如:掃描@Gecco註解的包名classpath;開始抓取的url地址star;抓取執行緒數thread;抓取完一個頁面後的間隔時間interval(ms)等
6.注意
- GeccoEngine.classpath()指定的必須是爬蟲類的目錄否則會報 can’t match url錯誤
- 以上註解都是來自gecoo包的 比如 @Request,@RequestParameter
[email protected]的cssPath 是什麼?
指定掃描的路徑吧,類似於Jquery的選擇器
獲取技巧 可以開啟瀏覽器除錯臺
右鍵選單的Copy - Copy selector