新聞中心
隨著互聯(lián)網(wǎng)的高速發(fā)展,數(shù)據(jù)量越來越龐大,傳統(tǒng)的手動采集數(shù)據(jù)已經(jīng)無法滿足需求,因此,數(shù)據(jù)爬蟲成為了一種重要的自動化采集數(shù)據(jù)工具。而WebMagic是一款開源的Java爬蟲框架,擁有強(qiáng)大的爬取、解析和存儲功能。本文將介紹如何的具體實現(xiàn)方式。

濠江ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
一、概述
WebMagic是一款功能強(qiáng)大的Java爬蟲框架,它提供了強(qiáng)大的爬取、解析和存儲功能,可以方便地進(jìn)行數(shù)據(jù)采集、數(shù)據(jù)清洗和數(shù)據(jù)分析。WebMagic采用了面向?qū)ο蟮木幊趟枷?,提供了方便的API和靈活的擴(kuò)展機(jī)制,使得爬蟲的編寫變得更加簡單和快速。同時,WebMagic支持多線程、分布式部署和大規(guī)模數(shù)據(jù)處理,可以滿足各種不同的需求。
二、準(zhǔn)備工作
在編寫爬蟲之前,需要進(jìn)行一些準(zhǔn)備工作:
1. 相應(yīng)的開發(fā)環(huán)境
WebMagic是一個基于Java的爬蟲框架,因此需要安裝Java環(huán)境。此外,還需要安裝Maven管理工具。具體安裝方法可以參考官方文檔。
2. 確定數(shù)據(jù)來源
在進(jìn)行數(shù)據(jù)采集之前,需要確定所需數(shù)據(jù)的來源。可以在瀏覽器中打開相應(yīng)的網(wǎng)頁,通過查看源代碼獲得所需數(shù)據(jù)所在的位置和格式。
3. 選擇適當(dāng)?shù)臄?shù)據(jù)庫
爬取到的數(shù)據(jù)需要進(jìn)行存儲,因此需要選擇適當(dāng)?shù)臄?shù)據(jù)庫。WebMagic支持多種數(shù)據(jù)庫的操作,比如MySQL、Oracle、MongoDB等。
4. 導(dǎo)入所需的依賴包
在編寫爬蟲代碼時,需要使用一些開源的庫,比如Jsoup、HttpClient等。這些庫可以通過Maven進(jìn)行管理,需要在pom.xml文件中添加相應(yīng)的依賴包。
三、編寫爬蟲代碼
在進(jìn)行了上述準(zhǔn)備工作之后,就可以開始編寫爬蟲代碼了。WebMagic提供了豐富的接口和方法,可以根據(jù)不同的需求進(jìn)行自由組合。下面以一個簡單的爬取豆瓣電影Top250的例子來介紹WebMagic的基本用法。
1.創(chuàng)建一個Java項目,并添加pom.xml文件
在剛創(chuàng)建的Java項目中,需要添加pom.xml文件,并導(dǎo)入相關(guān)的依賴包。
2.創(chuàng)建一個Spider類
在Java項目中創(chuàng)建一個Spider類,并繼承自WebMagic中的Spider類。在Spider類中實現(xiàn)自己的業(yè)務(wù)邏輯。
“`java
public class MovieSpider extends Spider {
private Site site = Site.me().setRetryTimes(3).setSleepTime(1000).setTimeOut(10000);
public MovieSpider() {
this.site = site;
}
public MovieSpider(Site site) {
this.site = site;
}
public void crawler(String url) {
this.addUrl(url)
.setScheduler(new QueueScheduler().setDuplicateRemover(new HashSetDuplicateRemover()))
.thread(5)
.addPipeline(new ConsolePipeline())
.run();
}
}
“`
在這個類中,我們創(chuàng)建了一個Site對象,用于設(shè)置爬蟲的一些參數(shù),比如重試次數(shù)、休眠時間、超時時間等。
3.解析網(wǎng)頁
在Spider類中,我們需要實現(xiàn)process方法,用于解析網(wǎng)頁。
“`java
@Override
public void process(Page page) {
List links = page.getHtml().links().regex(“https://movie.douban.com/top250\\?start=\\d+&filter=”).all();
page.addTargetRequests(links);
if (page.getUrl().regex(“https://movie\\.douban\\.com/subject/.*”).match()) {
String title = page.getHtml().xpath(“//*[@id=\”content\”]/h1/span[1]/text()”)
.replace(” “, “”)
.replace(“\n”, “”)
.get();
String rating = page.getHtml().xpath(“//*[@id=\”interest_sectl\”]/div[1]/div[2]/strong/text()”)
.get();
MovieInfo movieInfo = new MovieInfo();
movieInfo.setTitle(title);
movieInfo.setRating(rating);
page.putField(“movieInfo”, movieInfo);
} else {
page.setSkip(true);
}
}
“`
在這個方法中,我們使用了Page類提供的一些方法來對網(wǎng)頁進(jìn)行解析,比如getHtml、links、regex等。在獲取到相應(yīng)的數(shù)據(jù)之后,我們可以將其放在MovieInfo類中,并使用putField方法進(jìn)行存儲。同時,我們可以使用setSkip方法來控制是否需要對該網(wǎng)頁進(jìn)行存儲。
4.存儲數(shù)據(jù)
在Spider類中,我們需要使用Pipeline來存儲數(shù)據(jù)。WebMagic提供了多種Pipeline的實現(xiàn),比如ConsolePipeline、FilePipeline、JsonFilePipeline等。這里我們使用自定義的MySQLPipeline來將數(shù)據(jù)存儲到MySQL數(shù)據(jù)庫中。
“`java
public class MySQLPipeline implements Pipeline {
private final Logger logger = LoggerFactory.getLogger(getClass());
private String url = “jdbc:mysql://localhost:3306/movies?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8”;
private String username = “root”;
private String password = “123456”;
private String driverClassName = “com.mysql.cj.jdbc.Driver”;
private DataSource dataSource;
public MySQLPipeline() {
this.dataSource = getDataSource();
}
public MySQLPipeline(String url, String username, String password, String driverClassName) {
this.url = url;
this.username = username;
this.password = password;
this.driverClassName = driverClassName;
this.dataSource = getDataSource();
}
@Override
public void process(ResultItems resultItems, Task task) {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = dataSource.getConnection();
String sql = “insert into movie_info(title, rating) values(?, ?)”;
preparedStatement = connection.prepareStatement(sql);
MovieInfo movieInfo = resultItems.get(“movieInfo”);
preparedStatement.setString(1, movieInfo.getTitle());
preparedStatement.setString(2, movieInfo.getRating());
preparedStatement.executeUpdate();
} catch (SQLException e) {
logger.error(“保存數(shù)據(jù)失敗:”, e);
} finally {
close(connection, preparedStatement);
}
}
public void close(Connection connection, PreparedStatement preparedStatement) {
try {
preparedStatement.close();
connection.close();
} catch (SQLException e) {
logger.error(“釋放資源失?。骸? e);
}
}
public DataSource getDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setDriverClassName(driverClassName);
return dataSource;
}
}
“`
在這個類中,我們首先使用DataSource來獲取數(shù)據(jù)庫連接,然后在process方法中使用JDBC的方式將數(shù)據(jù)存儲到數(shù)據(jù)庫中。在獲取到連接之后,我們需要編寫相應(yīng)的SQL語句,并使用preparedStatement對象將數(shù)據(jù)存儲到數(shù)據(jù)庫中。在釋放資源之前,我們需要關(guān)閉連接和preparedStatement對象。
五、啟動爬蟲
在完成了Spider類的編寫之后,我們就可以啟動爬蟲了。在mn方法中,我們創(chuàng)建一個Spider類實例,并調(diào)用crawler方法來啟動爬蟲。crawler方法需要傳入一個url參數(shù),用于指定爬蟲的起始頁面。
“`java
public class App {
public static void mn(String[] args) {
MovieSpider spider = new MovieSpider();
spider.crawler(“https://movie.douban.com/top250”);
}
}
“`
在啟動爬蟲之后,可以通過控制臺輸出來查看爬取到的數(shù)據(jù)。
六、
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù)!
大數(shù)據(jù)爬蟲技術(shù)有什么功能
大數(shù)據(jù)爬蟲,我之一次聽說!剛剛閱讀,還是不太明白!
網(wǎng)絡(luò)爬蟲是Spider(或Robots、Crawler)等詞的意譯,是一種蠢灶高效的信息抓取工具,它集成了搜索引擎技術(shù),并通過技術(shù)手段進(jìn)行帶廳扮優(yōu)化,用以從互聯(lián)網(wǎng)搜索、抓取并保存任何通過HTML(超文本標(biāo)記語言)進(jìn)行標(biāo)準(zhǔn)化的網(wǎng)頁信息。其作用機(jī)理是:發(fā)送請求給互聯(lián)定站點,在建立連接后與該站點交互,獲取HTML格式的信息,隨后轉(zhuǎn)移到下一個站點,并重復(fù)以上流程。通過這種自動化的工作機(jī)制,將目標(biāo)數(shù)據(jù)保存在本地數(shù)據(jù)中,以供使用。伏搏網(wǎng)絡(luò)爬蟲在訪問一個超文本鏈接時,可以從HTML標(biāo)簽中自動獲取指向其他網(wǎng)頁的地址信息,因而可以自動實現(xiàn)高效、標(biāo)準(zhǔn)化的信息獲取?!‰S著互聯(lián)網(wǎng)在人類經(jīng)濟(jì)社會中的應(yīng)用日益廣泛,其所涵蓋的信息規(guī)模呈指數(shù)增長,信息的形式和分布具有多樣化、全球化特征,傳統(tǒng)搜索引擎技術(shù)已經(jīng)無法滿足日益精細(xì)化、專業(yè)化的信息獲取和加工需求,正面臨著巨大的挑戰(zhàn)。網(wǎng)絡(luò)爬蟲自誕生以來,就發(fā)展迅猛,并成為信息技術(shù)領(lǐng)域的主要研究熱點。當(dāng)前,主流的網(wǎng)絡(luò)爬蟲搜索策略有如下幾種。
爬蟲就是爬取網(wǎng)絡(luò)數(shù)據(jù),網(wǎng)絡(luò)爬蟲(網(wǎng)絡(luò)爬蟲又被稱為網(wǎng)頁蜘蛛、網(wǎng)神消襪絡(luò)機(jī)器人,在FOAF社區(qū)中間,更經(jīng)常的稱為網(wǎng)頁追逐者,是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本。夢蝶數(shù)據(jù)就是應(yīng)用爬蟲游激數(shù)據(jù)采集 ,不斷完橋手善多維度平臺爬蟲采集規(guī)則,輕松運行,自主采集
大數(shù)據(jù)的用途有哪些?
要說大數(shù)據(jù)的用途,那可就相當(dāng)廣泛了,基本各行各業(yè)都可以運用到大數(shù)據(jù)的知識。如果沒氏簡單枯哪散理解的話,可分為以下四類:
用途一:業(yè)務(wù)流程優(yōu)化
大數(shù)據(jù)更多的是協(xié)助業(yè)務(wù)流程效率的提升。能夠根據(jù)并運用社交網(wǎng)絡(luò)數(shù)據(jù)信息 、網(wǎng)站搜索及其天氣預(yù)告找出有使用價值的數(shù)據(jù)信息,這其中大數(shù)據(jù)的運用普遍的便是供應(yīng)鏈管理及其派送線路的提升。在這兩個層面,自然地理精準(zhǔn)定位和無線通信頻率的鑒別跟蹤貨物和送大貨車,運用交通實時路況線路數(shù)據(jù)信息來選擇更好的線路。人力資源管理業(yè)務(wù)流程也根據(jù)大數(shù)據(jù)的剖析來開展改善,這這其中就包含了職位招聘的調(diào)整。
用途二:提高醫(yī)療和研發(fā)
大型數(shù)據(jù)分析應(yīng)用程序的計算能力允許我們在幾分鐘內(nèi)解碼整個dna??梢詣?chuàng)造新的治療方法。它還能更好地掌握和預(yù)測疾病。如同大家配戴智能手表和別的能夠轉(zhuǎn)化成的數(shù)據(jù)信息一樣,互聯(lián)網(wǎng)大數(shù)據(jù)還可以協(xié)助病人盡快醫(yī)治疾患?,F(xiàn)在大數(shù)據(jù)技術(shù)已經(jīng)被用于醫(yī)院監(jiān)測早產(chǎn)兒和生病嬰兒的狀況。通過記錄和分析嬰兒的心跳,醫(yī)生預(yù)測可能的不適癥狀。這有助于醫(yī)生更好地幫助寶寶。
用途三:改善我們的城市
大數(shù)據(jù)也被用于改進(jìn)我們在城市的生活起居。比如,依據(jù)城市的交通實時路況信息,運用社交媒體季節(jié)變化數(shù)據(jù)信息,增加新的交通線路?,F(xiàn)階段,很多城市已經(jīng)開展數(shù)據(jù)分析和示范點新項目。
用途四:理解客戶、滿足客戶服務(wù)需求
互聯(lián)網(wǎng)大數(shù)據(jù)的運用在這個行業(yè)早已廣為人知。重點是如何使用大數(shù)據(jù)來更好地掌握客戶及其興趣和行為。緩困企業(yè)非常喜歡收集社交數(shù)據(jù)、瀏覽器日志、分析文本和傳感器數(shù)據(jù),以更全面地掌握客戶。一般來說,建立數(shù)據(jù)模型是為了預(yù)測。
1、提升訪問速度
2、防火墻作用
3、突破訪問限制
開源爬蟲框架各有什么優(yōu)缺點
開發(fā)網(wǎng)絡(luò)爬盯模蟲應(yīng)該選擇Nutch、Crawler4j、WebMagic、scrapy、WebCollector還是其他的?凱賀緩這里按照我的經(jīng)驗隨便扯淡一下:
上面說的爬蟲,基本可以分3類:
1.分布式爬蟲:Nutch
2.JAVA單機(jī)爬蟲:Crawler4j、WebMagic、WebCollector
3. 非JAVA單機(jī)爬蟲:scrapy
全國獨享高端優(yōu)質(zhì)拍衡ip,高匿穩(wěn)定來了解下
開發(fā)網(wǎng)絡(luò)爬蟲應(yīng)該選擇Nutch、Crawler4j、WebMagic、scrapy、WebCollector還是其他的?這里按照我的經(jīng)驗隨便扯淡一下:上面說的爬蟲,基本可以分3類:1.分布式爬蟲:Nutch
2.JAVA單機(jī)爬蟲:Crawler4j、WebMagic、WebCollector
3. 非JAVA單機(jī)爬蟲:scrapy
之一類:分布式爬蟲
爬蟲使用分布式,主要是解決兩個問題:
1)海量URL管理
2)網(wǎng)速
現(xiàn)在比較流行的分布式爬蟲,是Apache的Nutch。但是對于大多數(shù)用戶來說,Nutch是這幾類爬蟲里,最不好的選擇,理由如下:
1)Nutch是為搜索引擎設(shè)計的爬蟲,大多數(shù)用戶是需要一個做精準(zhǔn)數(shù)據(jù)爬取(精抽?。┑呐老x。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設(shè)計的。對精抽取沒有太大的意義。也就是說,用Nutch做數(shù)據(jù)抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進(jìn)行二次開發(fā),來使得它適用于精抽取的業(yè)務(wù),基本上就要破壞Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新寫一個分布式爬蟲框架塌埋羨了。
2)Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機(jī)器數(shù)量較少,爬取速度反而不如單機(jī)爬蟲快。
3)Nutch雖然有一套插件機(jī)制,而且作為亮點宣傳??梢钥吹揭恍╅_源的Nutch插件,提供精抽取的功能。但是開發(fā)過Nutch插件的人都知道,Nutch的插件系統(tǒng)有多蹩腳。利用反射的機(jī)制來加載和調(diào)用插件,使得程序的編寫和調(diào)試都變得異常困難,更別說在上面開發(fā)一套復(fù)雜的精抽取系統(tǒng)了。而且Nutch并沒有為精抽取提供相應(yīng)的插件掛載點。Nutch的插件有只有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務(wù)的,并沒有為精抽取提供掛載點。大多數(shù)Nutch的精抽取插件,都是掛載在“頁面解析”(parser)這個掛載點的,這個掛載點其實是為了解析鏈接團(tuán)拍(為后續(xù)爬取提供URL),以及為搜索引擎提供一些易抽取的網(wǎng)頁信息(網(wǎng)頁的meta信息、text文本)。
4)用Nutch進(jìn)行爬蟲的二次開發(fā),爬蟲的編寫和調(diào)試所需的時間,往往是單機(jī)爬蟲所需的十倍時間不止。了解Nutch源碼的學(xué)習(xí)成本很高,何況是要讓一個團(tuán)隊的人都讀懂Nutch源碼。調(diào)試過程中會出現(xiàn)除程序本身之外的各種問題(hadoop的問題、hbase的問題)。
5)很多人說Nutch2有g(shù)ora,可以持久化數(shù)據(jù)到avro文件、hbase、mysql等。很多人其實理解錯了,這里說的持久化數(shù)據(jù),是指將URL信息(URL管理所需要的數(shù)據(jù))存放到avro、hbase、mysql。并不是你要抽取的結(jié)構(gòu)化數(shù)據(jù)。其實對大多數(shù)人來說,URL信息存在哪里無所謂。
6)Nutch2的版本目前并不適合開發(fā)。官方現(xiàn)在穩(wěn)定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。如果想用hbase配合nutch(大多數(shù)人用nutch2就是為了用hbase),只能使用0.90版本左右的hbase,相應(yīng)的就要將hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比較有誤導(dǎo)作用,Nutch2的教程有兩個,分別是Nutch1.x和Nutch2.x,這個Nutch2.x官網(wǎng)上寫的是可以支持到hbase 0.94。但是實際上,這個Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之后的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩(wěn)定(一直在修改)。
所以,如果你不是要做搜索引擎,盡量不要選擇Nutch作為爬蟲。有些團(tuán)隊就喜歡跟風(fēng),非要選擇Nutch來開發(fā)精抽取的爬蟲,其實是沖著Nutch的名氣(Nutch作者是Doug Cutting),當(dāng)然最后的結(jié)果往往是項目延期完成。
如果你是要做搜索引擎,Nutch1.x是一個非常好的選擇。Nutch1.x和solr或者es配合,就可以構(gòu)成一套非常強(qiáng)大液察的搜索引擎了。如果非要用Nutch2的話,建議等到Nutch2.3發(fā)布再看。目前的Nutch2是一個非常不穩(wěn)定的版本。
第二類:JAVA單機(jī)爬蟲
這里把JAVA爬蟲單獨分為一類,是因為JAVA在網(wǎng)絡(luò)爬蟲這塊的生態(tài)圈是非常完善的。相關(guān)的資料也是最全的。這里可能有爭議,我只是隨便扯淡。
其實開源網(wǎng)絡(luò)爬蟲(框架)的開發(fā)非常簡單,難問題和復(fù)雜的問題都被以前的人解決了(比如DOM樹解析和定位、字符集檢測、海量URL去重),可以說是毫無技術(shù)含量。包括Nutch,其實Nutch的技術(shù)難點是開發(fā)hadoop,本身代碼非常簡單。網(wǎng)絡(luò)爬蟲從某種意義來說,類似遍歷本機(jī)的文件,查找文件中的信息。沒有任何難度可言。之所以選擇開源爬蟲框架,就是為了省事。比如爬蟲的URL管理、線程池之類的模塊,誰都能做,但是要做穩(wěn)定也是需要一段時間的調(diào)試和修改的。
對于爬蟲的功能來說。用戶比較關(guān)心的問題往往是:
1)爬蟲支持多線程么、爬蟲能用代理么、爬蟲會爬取重復(fù)數(shù)據(jù)么、爬蟲能爬取生成的信息么?
不支持多線程、不支持代理、不能過濾重復(fù)URL的,那都不叫開源爬蟲,那叫循環(huán)執(zhí)行http請求。
能不能爬js生成的信息和爬蟲本身沒有太大關(guān)系。爬蟲主要是負(fù)責(zé)遍歷網(wǎng)站和下載頁面。爬js生成的信息和網(wǎng)頁信息抽取模塊有關(guān),往往需要通過模擬瀏覽器(htmlunit,selenium)來完成。這些模擬瀏覽器,往往需要耗費很多的時間來處理一個頁面。所以一種策略就是,使用這些爬蟲來遍歷網(wǎng)站,遇到需要解析的頁面,就將網(wǎng)頁的相關(guān)信息提交給模擬瀏覽器,來完成生成信息的抽取。
2)爬蟲可以爬取ajax信息么?
網(wǎng)頁上有一些異步加載的數(shù)據(jù),爬取這些數(shù)據(jù)有兩種方法:使用模擬瀏覽器(問題1中描述過了),或者分析ajax的http請求,自己生成ajax請求的url,獲取返回的數(shù)據(jù)。如果是自己生成ajax請求,使用開源爬蟲的意義在哪里?其實是要用開源爬蟲的線程池和URL管理功能(比如斷點爬取)。
如果我已經(jīng)可以生成我所需要的ajax請求(列表),如何用這些爬蟲來對這些請求進(jìn)行爬?。?/p>
爬蟲往往都是設(shè)計成廣度遍歷或者深度遍歷的模式,去遍歷靜態(tài)或者動態(tài)頁面。爬取ajax信息屬于deep web(深網(wǎng))的范疇,雖然大多數(shù)爬蟲都不直接支持。但是也可以通過一些方法來完成。比如WebCollector使用廣度遍歷來遍歷網(wǎng)站。爬蟲的之一輪爬取就是爬取種子(seeds)中的所有url。簡單來說,就是將生成的ajax請求作為種子,放入爬蟲。用爬蟲對這些種子,進(jìn)行深度為1的廣度遍歷(默認(rèn)就是廣度遍歷)。
3)爬蟲怎么爬取要登陸的網(wǎng)站?
這些開源爬蟲都支持在爬取時指定cookies,模擬登陸主要是靠cookies。至于cookies怎么獲取,不是爬蟲管的事情。你可以手動獲取、用http請求模擬登陸或者用模擬瀏覽器自動登陸獲取cookie。
4)爬蟲怎么抽取網(wǎng)頁的信息?
開源爬蟲一般都會集成網(wǎng)頁抽取工具。主要支持兩種規(guī)范:CSS SELECTOR和XPATH。至于哪個好,這里不評價。
5)爬蟲怎么保存網(wǎng)頁的信息?
有一些爬蟲,自帶一個模塊負(fù)責(zé)持久化。比如webmagic,有一個模塊叫pipeline。通過簡單地配置,可以將爬蟲抽取到的信息,持久化到文件、數(shù)據(jù)庫等。還有一些爬蟲,并沒有直接給用戶提供數(shù)據(jù)持久化的模塊。比如crawler4j和webcollector。讓用戶自己在網(wǎng)頁處理模塊中添加提交數(shù)據(jù)庫的操作。至于使用pipeline這種模塊好不好,就和操作數(shù)據(jù)庫使用ORM好不好這個問題類似,取決于你的業(yè)務(wù)。
6)爬蟲被網(wǎng)站封了怎么辦?
爬蟲被網(wǎng)站封了,一般用多代理(隨機(jī)代理)就可以解決。但是這些開源爬蟲一般沒有直接支持隨機(jī)代理的切換。所以用戶往往都需要自己將獲取的代理,放到一個全局?jǐn)?shù)組中,自己寫一個代理隨機(jī)獲取(從數(shù)組中)的代碼。
7)網(wǎng)頁可以調(diào)用爬蟲么?
爬蟲的調(diào)用是在Web的服務(wù)端調(diào)用的,平時怎么用就怎么用,這些爬蟲都可以使用。
8)爬蟲速度怎么樣?
單機(jī)開源爬蟲的速度,基本都可以講本機(jī)的網(wǎng)速用到極限。爬蟲的速度慢,往往是因為用戶把線程數(shù)開少了、網(wǎng)速慢,或者在數(shù)據(jù)持久化時,和數(shù)據(jù)庫的交互速度慢。而這些東西,往往都是用戶的機(jī)器和二次開發(fā)的代碼決定的。這些開源爬蟲的速度,都很可以。
9)明明代碼寫對了,爬不到數(shù)據(jù),是不是爬蟲有問題,換個爬蟲能解決么?
如果代碼寫對了,又爬不到數(shù)據(jù),換其他爬蟲也是一樣爬不到。遇到這種情況,要么是網(wǎng)站把你封了,要么是你爬的數(shù)據(jù)是javascript生成的。爬不到數(shù)據(jù)通過換爬蟲是不能解決的。
10)哪個爬蟲可以判斷網(wǎng)站是否爬完、那個爬蟲可以根據(jù)主題進(jìn)行爬?。?/p>
爬蟲無法判斷網(wǎng)站是否爬完,只能盡可能覆蓋。
至于根據(jù)主題爬取,爬蟲之后把內(nèi)容爬下來才知道是什么主題。所以一般都是整個爬下來,然后再去篩選內(nèi)容。如果嫌爬的太泛,可以通過限制URL正則等方式,來縮小一下范圍。
11)哪個爬蟲的設(shè)計模式和構(gòu)架比較好?
設(shè)計模式純屬扯淡。說軟件設(shè)計模式好的,都是軟件開發(fā)完,然后總結(jié)出幾個設(shè)計模式。設(shè)計模式對軟件開發(fā)沒有指導(dǎo)性作用。用設(shè)計模式來設(shè)計爬蟲,只會使得爬蟲的設(shè)計更加臃腫。
至于構(gòu)架,開源爬蟲目前主要是細(xì)節(jié)的數(shù)據(jù)結(jié)構(gòu)的設(shè)計,比如爬取線程池、任務(wù)隊列,這些大家都能控制好。爬蟲的業(yè)務(wù)太簡單,談不上什么構(gòu)架。
所以對于JAVA開源爬蟲,我覺得,隨便找一個用的順手的就可以。如果業(yè)務(wù)復(fù)雜,拿哪個爬蟲來,都是要經(jīng)過復(fù)雜的二次開發(fā),才可以滿足需求。
第三類:非JAVA單機(jī)爬蟲
在非JAVA語言編寫的爬蟲中,有很多優(yōu)秀的爬蟲。這里單獨提取出來作為一類,并不是針對爬蟲本身的質(zhì)量進(jìn)行討論,而是針對larbin、scrapy這類爬蟲,對開發(fā)成本的影響。
先說python爬蟲,python可以用30行代碼,完成JAVA 50行代碼干的任務(wù)。python寫代碼的確快,但是在調(diào)試代碼的階段,python代碼的調(diào)試往往會耗費遠(yuǎn)遠(yuǎn)多于編碼階段省下的時間。使用python開發(fā),要保證程序的正確性和穩(wěn)定性,就需要寫更多的測試模塊。當(dāng)然如果爬取規(guī)模不大、爬取業(yè)務(wù)不復(fù)雜,使用scrapy這種爬蟲也是蠻不錯的,可以輕松完成爬取任務(wù)。
對于C++爬蟲來說,學(xué)習(xí)成本會比較大。而且不能只計算一個人的學(xué)習(xí)成本,如果軟件需要團(tuán)隊開發(fā)或者交接,那就是很多人的學(xué)習(xí)成本了。軟件的調(diào)試也不是那么容易。
還有一些ruby、php的爬蟲,這里不多評價。的確有一些非常小型的數(shù)據(jù)采集任務(wù),用ruby或者php很方便。但是選擇這些語言的開源爬蟲,一方面要調(diào)研一下相關(guān)的生態(tài)圈,還有就是,這些開源爬蟲可能會出一些你搜不到的BUG(用的人少、資料也少)
End.
首先爬蟲框架有三種
分布式爬蟲:Nutch
JAVA單機(jī)爬蟲:Crawler4j,WebMagic,WebCollector
非JAVA單機(jī)爬蟲:scrapy
之一類:分布式爬蟲
優(yōu)點:
海量URL管理
網(wǎng)速快
缺點:
Nutch是為搜索引擎設(shè)計的爬蟲,大多數(shù)用戶是需要一個做精準(zhǔn)數(shù)據(jù)爬取(精抽?。┑呐老x。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設(shè)計的。對精抽取沒有太大的意義。
用Nutch做數(shù)據(jù)抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進(jìn)行二次開發(fā),來使得它適用于精抽取的業(yè)務(wù),基本上就要破壞Nutch的框架,把Nutch改的面目全非。
Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機(jī)器數(shù)量較少,爬取速度反而不如單機(jī)爬蟲。
Nutch雖然有一套插件機(jī)制,而且作為亮點宣傳??梢钥吹揭恍╅_源的Nutch插件,提供精抽取的功能。但是開發(fā)過Nutch插件的人都知道,Nutch的插件系統(tǒng)有多蹩腳。利用反射的機(jī)制來加載和調(diào)用插件,使得程序的編寫和調(diào)試都變得異常困難,更別說在上面開發(fā)一套復(fù)雜的精抽取系統(tǒng)了。
Nutch并沒有為精抽取提供相應(yīng)的插件掛載點。Nutch的插件有只有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務(wù)的,并沒有為精抽取提供掛載點。大多數(shù)Nutch的精抽取插件,都是掛載在“頁面解析”(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為后續(xù)爬取提供URL),以及為搜索引擎提供一些易抽取的網(wǎng)頁信息(網(wǎng)頁的meta信息、text)
用Nutch進(jìn)行爬蟲的二次開發(fā),爬蟲的編寫和調(diào)試所需的時間,往往是單機(jī)爬蟲所需的十倍時間不止。了解Nutch源碼的學(xué)習(xí)成本很高,何況是要讓一個團(tuán)隊的人都讀懂Nutch源碼。調(diào)試過程中會出現(xiàn)除程序本身之外的各種問題(hadoop的問題、hbase的問題)。
Nutch2的版本目前并不適合開發(fā)。官方現(xiàn)在穩(wěn)定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。Nutch2.3之前、Nutch2.2.1之后的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩(wěn)定(一直在修改)。
第二類:JAVA單機(jī)爬蟲
優(yōu)點:
支持多線程。
支持代理。
能過濾重復(fù)URL的。
負(fù)責(zé)遍歷網(wǎng)站和下載頁面。爬js生成的信息和網(wǎng)頁信息抽取模塊有關(guān),往往需御配要通過模擬瀏覽器(htmlunit,selenium)來完成。
缺點:
設(shè)計模式對軟件開發(fā)沒有指導(dǎo)性作用。用設(shè)計模式來設(shè)計爬蟲,只會使得爬蟲的設(shè)計更加臃腫。
第三類:非JAVA單機(jī)爬蟲
優(yōu)點:
先說python爬蟲,python可以用30行代碼,完成JAVA
50行代碼干的任務(wù)。python寫代碼的確快,但是在調(diào)試代碼的階段,python代碼的調(diào)試往往會耗費遠(yuǎn)遠(yuǎn)多于編碼階段省下的時間。
使用python開發(fā),要保證程序的正確性和穩(wěn)定性,就需要寫更多的測試模塊。當(dāng)然如果爬取規(guī)模不行攔大、爬取業(yè)務(wù)不復(fù)雜,使用scrapy這種爬蟲也是蠻不錯的,可以輕松完成爬取任務(wù)。
缺點:
bug較多,不穩(wěn)定。
爬蟲可以爬取ajax信息么?
網(wǎng)頁上有一些異步加載的數(shù)據(jù),爬取這些數(shù)據(jù)有兩檔拆胡種方法:使用模擬瀏覽器(問題1中描述過了),或者分析ajax的http請求,自己生成ajax請求的url,獲取返回的數(shù)據(jù)。如果是自己生成ajax請求,使用開源爬蟲的意義在哪里?其實是要用開源爬蟲的線程池和URL管理功能(比如斷點爬?。?/p>
如果我已經(jīng)可以生成我所需要的ajax請求(列表),如何用這些爬蟲來對這些請求進(jìn)行爬?。?
爬蟲往往都是設(shè)計成廣度遍歷或者深度遍歷的模式,去遍歷靜態(tài)或者動態(tài)頁面。爬取ajax信息屬于deepweb(深網(wǎng))的范疇,雖然大多數(shù)爬蟲都不直接支持。但是也可以通過一些方法來完成。比如WebCollector使用廣度遍歷來遍歷網(wǎng)站。爬蟲的之一輪爬取就是爬取種子(seeds)中的所有url。簡單來說,就是將生成的ajax請求作為種子,放入爬蟲。用爬蟲對這些種子,進(jìn)行深度為1的廣度遍歷(默認(rèn)就是廣度遍歷)。
爬蟲怎么爬取要登陸的網(wǎng)站?
這些開源爬蟲都支持在爬取時指定cookies,模擬登陸主要是靠cookies。至于cookies怎么獲取,不是爬蟲管的事情。你可以手動獲取、用http請求模擬登陸或者用模擬瀏覽器自動登陸獲取cookie。
爬蟲怎么抽取網(wǎng)頁的信息?
開源爬蟲一般都會集成網(wǎng)頁抽取工具。主要支持兩種規(guī)范:CSSSELECTOR和XPATH。
網(wǎng)頁可以調(diào)用爬蟲么?
爬蟲的調(diào)用是在Web的服務(wù)端調(diào)用的,平時怎么用就怎么用,這些爬蟲都可以使用。
爬蟲速度怎么樣?
單機(jī)開源爬蟲的速度,基本都可以講本機(jī)的網(wǎng)速用到極限。爬蟲的速度慢,往往是因為用戶把線程數(shù)開少了、網(wǎng)速慢,或者在數(shù)據(jù)持久化時,和數(shù)據(jù)庫的交互速度慢。而這些東西,往往都是用戶的機(jī)器和二次開發(fā)的代碼決定的。這些開源爬蟲的速度,都很可以。
關(guān)于webmagic 保存到數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)(cdcxhl.com)提供穩(wěn)定的云服務(wù)器,香港云服務(wù)器,BGP云服務(wù)器,雙線云服務(wù)器,高防云服務(wù)器,成都云服務(wù)器,服務(wù)器托管。精選鉅惠,歡迎咨詢:028-86922220。
文章標(biāo)題:利用WebMagic實現(xiàn)數(shù)據(jù)爬蟲并保存到數(shù)據(jù)庫(webmagic保存到數(shù)據(jù)庫)
URL網(wǎng)址:http://fisionsoft.com.cn/article/dpchiih.html


咨詢
建站咨詢
