mysql git 获取 稳定版本 源码_webmagic新版文档(更新中)
WebMagic in Action
WebMagic是一個簡單靈活、便于二次開發(fā)的爬蟲框架。除了可以便捷的實現(xiàn)一個爬蟲,WebMagic還提供多線程功能,以及基本的分布式功能。
你可以直接使用WebMagic進(jìn)行爬蟲開發(fā),也可以定制WebMagic以適應(yīng)復(fù)雜項目的需要。
1. 在項目中使用WebMagic
WebMagic主要包含兩個jar包:webmagic-core-{version}.jar和webmagic-extension-{version}.jar。在項目中添加這兩個包的依賴,即可使用WebMagic。
1.1 使用Maven
WebMagic基于Maven進(jìn)行構(gòu)建,推薦使用Maven來安裝WebMagic。在項目中添加以下坐標(biāo)即可:
us.codecraft
webmagic-extension
0.4.3
WebMagic使用slf4j-log4j12作為slf4j的實現(xiàn).如果你自己定制了slf4j的實現(xiàn),請在項目中去掉此依賴。
us.codecraft
webmagic-extension
0.4.3
org.slf4j
slf4j-log4j12
1.2 不使用Maven
不使用maven的用戶,可以下載附帶二進(jìn)制jar包的版本(感謝oschina):
git clone http://git.oschina.net/flashsword20/webmagic.git
在lib目錄下,有項目依賴的所有jar包,直接在IDE里,將這些jar添加到Libraries即可。
1.3 第一個項目
在你的項目中添加了WebMagic的依賴之后,即可開始第一個爬蟲的開發(fā)了!我們這里拿一個抓取Github信息的例子:
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
public class GithubRepoPageProcessor implements PageProcessor {
private Site site = Site.me().setRetryTimes(3).setSleepTime(100);
@Override
public void process(Page page) {
page.addTargetRequests(page.getHtml().links().regex("(https://github\\.com/\\w+/\\w+)").all());
page.putField("author", page.getUrl().regex("https://github\\.com/(\\w+)/.*").toString());
page.putField("name", page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()").toString());
if (page.getResultItems().get("name")==null){
//skip this page
page.setSkip(true);
}
page.putField("readme", page.getHtml().xpath("//div[@id='readme']/tidyText()"));
}
@Override
public Site getSite() {
return site;
}
public static void main(String[] args) {
Spider.create(new GithubRepoPageProcessor()).addUrl("https://github.com/code4craft").thread(5).run();
}
}
點擊main方法,選擇“運行”,你會發(fā)現(xiàn)爬蟲已經(jīng)可以正常工作了!
2.下載和編譯源碼
WebMagic是一個純Java項目,如果你熟悉Maven,那么下載并編譯源碼是非常簡單的。如果不熟悉Maven也沒關(guān)系,這部分會介紹如何在Eclipse里導(dǎo)入這個項目。
2.1 下載源碼
WebMagic目前有兩個倉庫:
github上的倉庫保存最新版本,所有issue、pull request都在這里。大家覺得項目不錯的話別忘了去給個star哦!
此倉庫包含所有編譯好的依賴包,只保存項目的穩(wěn)定版本,最新版本仍在github上更新。oschina在國內(nèi)比較穩(wěn)定,主要作為鏡像。
無論在哪個倉庫,使用
git clone https://github.com/code4craft/webmagic.git
或者
git clone http://git.oschina.net/flashsword20/webmagic.git
即可下載最新代碼。
如果你對git本身使用也不熟悉,建議看看@黃勇的 從 Git@OSC 下載 Smart 源碼
2.2 導(dǎo)入項目
Intellij Idea默認(rèn)自帶Maven支持,import項目時選擇Maven項目即可。
2.2.1 使用m2e插件
安裝后,在File->Import中選擇Maven->Existing Maven Projects即可導(dǎo)入項目。
導(dǎo)入后看到項目選擇界面,點擊finish即可。
2.2.2 使用Maven Eclipse插件
如果沒有安裝m2e插件,只要你安裝了Maven,也是比較好辦的。在項目根目錄下使用命令:
mvn eclipse:eclipse
生成maven項目結(jié)構(gòu)的eclipse配置文件,然后在File->Import中選擇General->Existing Projects into Workspace即可導(dǎo)入項目。
導(dǎo)入后看到項目選擇界面,點擊finish即可。
2.3 編譯和執(zhí)行源碼
導(dǎo)入成功之后,應(yīng)該就沒有編譯錯誤了!此時你可以運行一下webmagic-core項目中自帶的exmaple:"us.codecraft.webmagic.processor.example.GithubRepoPageProcessor"。
同樣,看到控制臺輸出如下,則表示源碼編譯和執(zhí)行成功了!
3. 基本的爬蟲
3.1 實現(xiàn)PageProcessor
在WebMagic里,實現(xiàn)一個基本的爬蟲只需要編寫一個類,實現(xiàn)PageProcessor接口即可。這個類基本上包含了抓取一個網(wǎng)站,你需要寫的所有代碼。
以之前的GithubRepoPageProcessor為例,我將PageProcessor的定制分為三個部分:
public class GithubRepoPageProcessor implements PageProcessor {
// 部分一:抓取網(wǎng)站的相關(guān)配置,包括編碼、抓取間隔、重試次數(shù)等
private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
@Override
// process是定制爬蟲邏輯的核心接口,在這里編寫抽取邏輯
public void process(Page page) {
// 部分二:定義如何抽取頁面信息,并保存下來
page.putField("author", page.getUrl().regex("https://github\\.com/(\\w+)/.*").toString());
page.putField("name", page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()").toString());
if (page.getResultItems().get("name") == null) {
//skip this page
page.setSkip(true);
}
page.putField("readme", page.getHtml().xpath("//div[@id='readme']/tidyText()"));
// 部分三:從頁面發(fā)現(xiàn)后續(xù)的url地址來抓取
page.addTargetRequests(page.getHtml().links().regex("(https://github\\.com/\\w+/\\w+)").all());
}
@Override
public Site getSite() {
return site;
}
public static void main(String[] args) {
Spider.create(new GithubRepoPageProcessor())
//從"https://github.com/code4craft"開始抓
.addUrl("https://github.com/code4craft")
//開啟5個線程抓取
.thread(5)
//啟動爬蟲
.run();
}
}
3.1.1 爬蟲的配置
第一部分關(guān)于爬蟲的配置,包括編碼、抓取間隔、超時時間、重試次數(shù)等,也包括一些模擬的參數(shù),例如User Agent、cookie,以及代理的設(shè)置,我們會在第5章-“爬蟲的配置”里進(jìn)行介紹。在這里我們先簡單設(shè)置一下:重試次數(shù)為3次,抓取間隔為一秒。
3.1.2 頁面元素的抽取
第二部分是爬蟲的核心部分:對于下載到的Html頁面,你如何從中抽取到你想要的信息?WebMagic里主要使用了三種抽取技術(shù):XPath、正則表達(dá)式和CSS選擇器。
XPath本來是用于XML中獲取元素的一種查詢語言,但是用于Html也是比較方便的。例如:
page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()")
這段代碼使用了XPath,它的意思是“查找所有class屬性為'entry-title public'的h1元素,并找到他的strong子節(jié)點的a子節(jié)點,并提取a節(jié)點的文本信息”。
對應(yīng)的Html是這樣子的:
CSS選擇器是于XPath類似的語言。如果大家做過前端開發(fā),肯定知道$('h1.entry-title')這種寫法的含義。客觀的說,它比XPath寫起來要簡單一些,但是如果寫復(fù)雜一點的抽取規(guī)則,就相對要麻煩一點。
正則表達(dá)式則是一種通用的文本抽取語言。
page.addTargetRequests(page.getHtml().links().regex("(https://github\\.com/\\w+/\\w+)").all());
XPath、CSS選擇器和正則表達(dá)式的具體用法我會在第4章“抽取工具詳解”中講到。
3.1.3 鏈接的發(fā)現(xiàn)
3.2 保存結(jié)果
4. 抽取工具詳解
4.1 XPath
4.2 CSS選擇器
4.3 正則表達(dá)式
4.4 JsonPath
5. 配置爬蟲
5.1 抓取頻率
5.2 編碼
5.3 代理
5.4 設(shè)置cookie/UA等http頭信息
5.5 重試機制
5.6 多線程
6. 爬蟲的啟動和終止
6.1 啟動爬蟲
6.2 終止爬蟲
6.3 設(shè)置執(zhí)行時間
6.4 定期抓取
7. 抽取結(jié)果的處理
7.1 輸出到控制臺
7.2 保存到文件
7.3 JSON格式輸出
7.4 自定義持久化方式(mysql/mongodb…)
8. 管理URL
8.1 手動添加URL
8.2 在URL中保存信息
8.3 幾種URL管理方式
8.4 自己管理爬蟲的URL
9. 實例
9.1 基本的列表+詳情頁的抓取
9.2 抓取動態(tài)頁面
9.3 分頁抓取
9.4 定期抓取
總結(jié)
以上是生活随笔為你收集整理的mysql git 获取 稳定版本 源码_webmagic新版文档(更新中)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis与mysql的优点_MyB
- 下一篇: 十五个实用的mysql语句分享_分享My