1. 程式人生 > >爬蟲分析之WebMagic框架篇:牛刀小試

爬蟲分析之WebMagic框架篇:牛刀小試

引用轉載請註明出處,Thanks!

1 本文適合群體:

a.剛接觸爬蟲還不知道如何下手的同學
b.學完爬蟲苦於沒有框架的同學
c.簡言之老少皆宜,共同進步

2 WebMagic介紹:

WebMagic一款簡單靈活的爬蟲框架。基於它你可以很容易的編寫一個爬蟲。[註釋1]
既然是牛刀小試,對於框架的具體結構和工作原理在這裡就不一一的介紹,只需瞭解該框架的四大元件:Downloader、PageProcessor、Scheduler、Pipeline,今天我們需要用到的是PageProcessor,因為針對不同的頁面,我們需要對PageProcessor做定製。

3 WebMagic環境整合

一款框架的使用,當然是需要我們獲得其類庫來進行呼叫,下面根據官方文件介紹兩種使用方法:

a. 直接下載Jar包使用

進入 http://webmagic.io/download.html 下載jar包,選擇版本號下載所有依賴jar包,並匯入到工程中,下面會進行演示。

這裡寫圖片描述
b. 通過Maven管理引用

在Maven下的pom.xml中新增如下依賴:
<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>
注意:WebMagic使用slf4j-log4j12作為slf4j的實現.如果你自己定製了slf4j的實現,請在專案中去掉此依賴。

4 WebMagic牛刀小試

a. 開啟eclipse

b. 新建Java Project :WebMagicTestDemo

這裡寫圖片描述

c. 新建原始檔夾(選中專案名右鍵:new Source Folder)

這裡寫圖片描述

d. 將解壓的jar包放入到lib目錄下,供呼叫

這裡寫圖片描述

e. 新增lib下的jar包新增到專案的環境中

這裡寫圖片描述
這裡寫圖片描述

f. 新建WebMagicTest類,並實現PageProcessor介面

這裡寫圖片描述

g. 具體實現程式碼如下:
package iceyung;

import java.util.List;

import us.codecraft.webmagic.Page;
import
us.codecraft.webmagic.Site; import us.codecraft.webmagic.Spider; import us.codecraft.webmagic.processor.PageProcessor; /** * @author yu * @date 建立時間:2017年11月8日 上午11:21:34 */ public class WebMagicTest implements PageProcessor { // 部分一:抓取網站的相關配置,包括編碼、抓取間隔、重試次數等 private Site site = Site.me() .setRetryTimes(3) .setSleepTime(100) //新增cookie之前一定要先設定主機地址,否則cookie資訊不生效 //.setDomain("lt.gdou.com") //新增抓包獲取的cookie資訊 //.addCookie("xx", "xx") //新增請求頭,有些網站會根據請求頭判斷該請求是由瀏覽器發起還是由爬蟲發起的 .addHeader("User-Agent", "ozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36 Core/1.47.516.400 QQBrowser/9.4.8188.400") .addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") .addHeader("Accept-Encoding", "gzip, deflate, sdch").addHeader("Accept-Language", "zh-CN,zh;q=0.8") .addHeader("Connection", "keep-alive"); //介面方法的實現,返回我們配置的site public Site getSite() { return site; } //PageProcessor最重要的部分,需要我們根據具體的頁面進行定製 public void process(Page page) { //直接從瀏覽器獲取的xpath資訊 // page.getHtml().xpath("//*[@id=\"article_list\"]/div[2]/div[1]/h1/span/a"); //不寫[2]時代表所有的標題,所有修改刪去[2],使用all()方法獲得全部的標題此時返回的是List<String>物件 List<String> list = page.getHtml().xpath("//*[@id=\"article_list\"]/div/div[1]/h1/span/a/text()").all(); for(String name : list){ System.out.println(name); } } public static void main(String[] args) { //加入待爬去的銜接 String[] urls = {"http://blog.csdn.net/iceyung"}; Spider.create(new WebMagicTest()) .addUrl(urls) //開啟5個執行緒抓取 .thread(1) //啟動爬蟲 .run(); System.out.println("爬取結束"); } }
h. 執行結果如下:

JAVA課程學習九:類訓練-學生管理實現
JAVA課程學習八:類訓練-家中的電視
JAVA課程學習七:帶格式字串反轉
JAVA課程學習六:簡易兩個數計算器
JAVA課程學習五:猜數字遊戲
JAVA課程學習四:遍歷與複製陣列
JAVA課程學習三:查詢日曆表
JAVA課程學習二:99乘法表的編寫
JAVA課程學習一:Hello World
androidstudio小知識記錄-那些年遇到的坑兒
Android個人學習筆記之實戰時間的獲取相關-DateUtils
我的物聯網之路-Android手機感測器概況(地磁為主)
androidstudio小知識記錄-Genymotion安裝與使用
Android個人學習筆記之ListView知識應用-仿IOS百度雲條目點選顯示選單模組實現
Android個人學習筆記-底部導航切換Fragment的實現
get page: http://blog.csdn.net/iceyung

i. 原始碼下載:
>詳細見碼雲   [https://gitee.com/iceyung/WebMagicTestDemo.git](https://gitee.com/iceyung/WebMagicTestDemo.git)

引用:

[註釋1]:http://webmagic.io/docs/zh/