
ajax
開(kāi)源JAVA單機爬蟲(chóng)框架簡(jiǎn)介,優(yōu)缺點(diǎn)剖析
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 277 次瀏覽 ? 2020-06-06 08:01
互聯(lián)網(wǎng)營(yíng)銷(xiāo)時(shí)代,獲取海量數據成為營(yíng)銷(xiāo)推廣的關(guān)鍵。而獲得數據的最佳方法就是借助爬蟲(chóng)去抓取。但是爬蟲(chóng)的使用少不了代理ip太陽(yáng)HTTP的支撐。當然網(wǎng)路上現今有很多開(kāi)源爬蟲(chóng),大大便捷了你們使用。但是開(kāi)源網(wǎng)路爬蟲(chóng)也是有優(yōu)點(diǎn)也有缺點(diǎn),清晰認知這一點(diǎn)能夠達成自己的目標。
對于爬蟲(chóng)的功能來(lái)說(shuō)。用戶(hù)比較關(guān)心的問(wèn)題常常是:
1)爬蟲(chóng)可以爬取ajax信息么?
網(wǎng)頁(yè)上有一些異步加載的數據,爬取那些數據有兩種方式:使用模擬瀏覽器(問(wèn)題1中描述過(guò)了),或者剖析ajax的http請求,自己生成ajax懇求的url,獲取返回的數據。如果是自己生成ajax懇求,使用開(kāi)源爬蟲(chóng)的意義在那里?其實(shí)是要用開(kāi)源爬蟲(chóng)的線(xiàn)程池和URL管理功能(比如斷點(diǎn)爬?。?。
如果我早已可以生成我所須要的ajax懇求(列表),如何用這種爬蟲(chóng)來(lái)對那些懇求進(jìn)行爬???
爬蟲(chóng)常常都是設計成廣度遍歷或則深度遍歷的模式爬蟲(chóng)框架,去遍歷靜態(tài)或則動(dòng)態(tài)頁(yè)面。爬取ajax信息屬于deep web(深網(wǎng))的范疇,雖然大多數爬蟲(chóng)都不直接支持。但是也可以通過(guò)一些方式來(lái)完成。比如WebCollector使用廣度遍歷來(lái)遍歷網(wǎng)站。爬蟲(chóng)的第一輪爬取就是爬取種子集合(seeds)中的所有url。簡(jiǎn)單來(lái)說(shuō),就是將生成的ajax懇求作為種子,放入爬蟲(chóng)。用爬蟲(chóng)對那些種子,進(jìn)行深度為1的廣度遍歷(默認就是廣度遍歷)。
2)爬蟲(chóng)支持多線(xiàn)程么、爬蟲(chóng)能用代理么、爬蟲(chóng)會(huì )爬取重復數據么、爬蟲(chóng)能爬取JS生成的信息么?
能不能爬js生成的信息和爬蟲(chóng)本身沒(méi)有很大關(guān)系。爬蟲(chóng)主要是負責遍歷網(wǎng)站和下載頁(yè)面。爬js生成的信息和網(wǎng)頁(yè)信息抽取模塊有關(guān),往往須要通過(guò)模擬瀏覽器(htmlunit,selenium)來(lái)完成。這些模擬瀏覽器,往往須要花費好多的時(shí)間來(lái)處理一個(gè)頁(yè)面。所以一種策略就是,使用這種爬蟲(chóng)來(lái)遍歷網(wǎng)站,遇到須要解析的頁(yè)面,就將網(wǎng)頁(yè)的相關(guān)信息遞交給模擬瀏覽器,來(lái)完成JS生成信息的抽取。
3)爬蟲(chóng)如何保存網(wǎng)頁(yè)的信息?
有一些爬蟲(chóng),自帶一個(gè)模塊負責持久化。比如webmagic,有一個(gè)模塊叫pipeline。通過(guò)簡(jiǎn)單地配置,可以將爬蟲(chóng)抽取到的信息,持久化到文件、數據庫等。還有一些爬蟲(chóng),并沒(méi)有直接給用戶(hù)提供數據持久化的模塊。比如crawler4j和webcollector。讓用戶(hù)自己在網(wǎng)頁(yè)處理模塊中添加遞交數據庫的操作。至于使用pipeline這些模塊好不好,就和操作數據庫使用ORM好不好這個(gè)問(wèn)題類(lèi)似,取決于你的業(yè)務(wù)。
4)爬蟲(chóng)如何爬取要登錄的網(wǎng)站?
這些開(kāi)源爬蟲(chóng)都支持在爬取時(shí)指定cookies,模擬登錄主要是靠cookies。至于cookies如何獲取,不是爬蟲(chóng)管的事情。你可以自動(dòng)獲取、用http請求模擬登錄或則用模擬瀏覽器手動(dòng)登入獲取cookie。
5)爬蟲(chóng)如何抽取網(wǎng)頁(yè)的信息?
開(kāi)源爬蟲(chóng)通常還會(huì )集成網(wǎng)頁(yè)抽取工具。主要支持兩種規范:CSS SELECTOR和XPATH。至于那個(gè)好,這里不評價(jià)。
6)明明代碼寫(xiě)對了,爬不到數據爬蟲(chóng)框架,是不是爬蟲(chóng)有問(wèn)題,換個(gè)爬蟲(chóng)能解決么?
如果代碼寫(xiě)對了,又爬不到數據,換其他爬蟲(chóng)也是一樣爬不到。遇到這些情況,要么是網(wǎng)站把你封了,要么是你爬的數據是javascript生成的。爬不到數據通過(guò)換爬蟲(chóng)是不能解決的。
7)哪個(gè)爬蟲(chóng)的設計模式和架構比較好?
設計模式對軟件開(kāi)發(fā)沒(méi)有指導性作用。用設計模式來(lái)設計爬蟲(chóng),只會(huì )促使爬蟲(chóng)的設計愈發(fā)臃腫。
至于架構,開(kāi)源爬蟲(chóng)目前主要是細節的數據結構的設計,比如爬取線(xiàn)程池、任務(wù)隊列,這些你們都能控制好。
8)哪個(gè)爬蟲(chóng)可以判定網(wǎng)站是否爬完、那個(gè)爬蟲(chóng)可以依照主題進(jìn)行爬???
爬蟲(chóng)難以判定網(wǎng)站是否爬完,只能盡可能覆蓋。
至于依照主題爬取,爬蟲(chóng)然后把內容爬出來(lái)才曉得是哪些主題。所以通常都是整個(gè)爬出來(lái),然后再去篩選內容。如果嫌爬的很泛,可以通過(guò)限制URL正則等方法,來(lái)縮小一下范圍。
9)爬蟲(chóng)速率怎么樣?
單機開(kāi)源爬蟲(chóng)的速率,基本都可以講本機的網(wǎng)速用到極限。爬蟲(chóng)的速率慢,往往是由于用戶(hù)把線(xiàn)程數開(kāi)少了、網(wǎng)速慢,或者在數據持久化時(shí),和數據庫的交互速率慢。而這種東西,往往都是用戶(hù)的機器和二次開(kāi)發(fā)的代碼決定的。
10)網(wǎng)頁(yè)可以調用爬蟲(chóng)么?
爬蟲(chóng)的調用是在Web的服務(wù)端調用的,平時(shí)如何用就如何用,這些爬蟲(chóng)都可以使用。
11)爬蟲(chóng)被網(wǎng)站封了如何辦?
爬蟲(chóng)被網(wǎng)站封了,一般用多代理(隨機代理)就可以解決。但是這種開(kāi)源爬蟲(chóng)通常沒(méi)有直接支持隨機代理ip的切換。 查看全部

互聯(lián)網(wǎng)營(yíng)銷(xiāo)時(shí)代,獲取海量數據成為營(yíng)銷(xiāo)推廣的關(guān)鍵。而獲得數據的最佳方法就是借助爬蟲(chóng)去抓取。但是爬蟲(chóng)的使用少不了代理ip太陽(yáng)HTTP的支撐。當然網(wǎng)路上現今有很多開(kāi)源爬蟲(chóng),大大便捷了你們使用。但是開(kāi)源網(wǎng)路爬蟲(chóng)也是有優(yōu)點(diǎn)也有缺點(diǎn),清晰認知這一點(diǎn)能夠達成自己的目標。
對于爬蟲(chóng)的功能來(lái)說(shuō)。用戶(hù)比較關(guān)心的問(wèn)題常常是:
1)爬蟲(chóng)可以爬取ajax信息么?
網(wǎng)頁(yè)上有一些異步加載的數據,爬取那些數據有兩種方式:使用模擬瀏覽器(問(wèn)題1中描述過(guò)了),或者剖析ajax的http請求,自己生成ajax懇求的url,獲取返回的數據。如果是自己生成ajax懇求,使用開(kāi)源爬蟲(chóng)的意義在那里?其實(shí)是要用開(kāi)源爬蟲(chóng)的線(xiàn)程池和URL管理功能(比如斷點(diǎn)爬?。?。
如果我早已可以生成我所須要的ajax懇求(列表),如何用這種爬蟲(chóng)來(lái)對那些懇求進(jìn)行爬???
爬蟲(chóng)常常都是設計成廣度遍歷或則深度遍歷的模式爬蟲(chóng)框架,去遍歷靜態(tài)或則動(dòng)態(tài)頁(yè)面。爬取ajax信息屬于deep web(深網(wǎng))的范疇,雖然大多數爬蟲(chóng)都不直接支持。但是也可以通過(guò)一些方式來(lái)完成。比如WebCollector使用廣度遍歷來(lái)遍歷網(wǎng)站。爬蟲(chóng)的第一輪爬取就是爬取種子集合(seeds)中的所有url。簡(jiǎn)單來(lái)說(shuō),就是將生成的ajax懇求作為種子,放入爬蟲(chóng)。用爬蟲(chóng)對那些種子,進(jìn)行深度為1的廣度遍歷(默認就是廣度遍歷)。
2)爬蟲(chóng)支持多線(xiàn)程么、爬蟲(chóng)能用代理么、爬蟲(chóng)會(huì )爬取重復數據么、爬蟲(chóng)能爬取JS生成的信息么?
能不能爬js生成的信息和爬蟲(chóng)本身沒(méi)有很大關(guān)系。爬蟲(chóng)主要是負責遍歷網(wǎng)站和下載頁(yè)面。爬js生成的信息和網(wǎng)頁(yè)信息抽取模塊有關(guān),往往須要通過(guò)模擬瀏覽器(htmlunit,selenium)來(lái)完成。這些模擬瀏覽器,往往須要花費好多的時(shí)間來(lái)處理一個(gè)頁(yè)面。所以一種策略就是,使用這種爬蟲(chóng)來(lái)遍歷網(wǎng)站,遇到須要解析的頁(yè)面,就將網(wǎng)頁(yè)的相關(guān)信息遞交給模擬瀏覽器,來(lái)完成JS生成信息的抽取。
3)爬蟲(chóng)如何保存網(wǎng)頁(yè)的信息?
有一些爬蟲(chóng),自帶一個(gè)模塊負責持久化。比如webmagic,有一個(gè)模塊叫pipeline。通過(guò)簡(jiǎn)單地配置,可以將爬蟲(chóng)抽取到的信息,持久化到文件、數據庫等。還有一些爬蟲(chóng),并沒(méi)有直接給用戶(hù)提供數據持久化的模塊。比如crawler4j和webcollector。讓用戶(hù)自己在網(wǎng)頁(yè)處理模塊中添加遞交數據庫的操作。至于使用pipeline這些模塊好不好,就和操作數據庫使用ORM好不好這個(gè)問(wèn)題類(lèi)似,取決于你的業(yè)務(wù)。
4)爬蟲(chóng)如何爬取要登錄的網(wǎng)站?
這些開(kāi)源爬蟲(chóng)都支持在爬取時(shí)指定cookies,模擬登錄主要是靠cookies。至于cookies如何獲取,不是爬蟲(chóng)管的事情。你可以自動(dòng)獲取、用http請求模擬登錄或則用模擬瀏覽器手動(dòng)登入獲取cookie。
5)爬蟲(chóng)如何抽取網(wǎng)頁(yè)的信息?
開(kāi)源爬蟲(chóng)通常還會(huì )集成網(wǎng)頁(yè)抽取工具。主要支持兩種規范:CSS SELECTOR和XPATH。至于那個(gè)好,這里不評價(jià)。
6)明明代碼寫(xiě)對了,爬不到數據爬蟲(chóng)框架,是不是爬蟲(chóng)有問(wèn)題,換個(gè)爬蟲(chóng)能解決么?
如果代碼寫(xiě)對了,又爬不到數據,換其他爬蟲(chóng)也是一樣爬不到。遇到這些情況,要么是網(wǎng)站把你封了,要么是你爬的數據是javascript生成的。爬不到數據通過(guò)換爬蟲(chóng)是不能解決的。
7)哪個(gè)爬蟲(chóng)的設計模式和架構比較好?
設計模式對軟件開(kāi)發(fā)沒(méi)有指導性作用。用設計模式來(lái)設計爬蟲(chóng),只會(huì )促使爬蟲(chóng)的設計愈發(fā)臃腫。
至于架構,開(kāi)源爬蟲(chóng)目前主要是細節的數據結構的設計,比如爬取線(xiàn)程池、任務(wù)隊列,這些你們都能控制好。
8)哪個(gè)爬蟲(chóng)可以判定網(wǎng)站是否爬完、那個(gè)爬蟲(chóng)可以依照主題進(jìn)行爬???
爬蟲(chóng)難以判定網(wǎng)站是否爬完,只能盡可能覆蓋。
至于依照主題爬取,爬蟲(chóng)然后把內容爬出來(lái)才曉得是哪些主題。所以通常都是整個(gè)爬出來(lái),然后再去篩選內容。如果嫌爬的很泛,可以通過(guò)限制URL正則等方法,來(lái)縮小一下范圍。
9)爬蟲(chóng)速率怎么樣?
單機開(kāi)源爬蟲(chóng)的速率,基本都可以講本機的網(wǎng)速用到極限。爬蟲(chóng)的速率慢,往往是由于用戶(hù)把線(xiàn)程數開(kāi)少了、網(wǎng)速慢,或者在數據持久化時(shí),和數據庫的交互速率慢。而這種東西,往往都是用戶(hù)的機器和二次開(kāi)發(fā)的代碼決定的。
10)網(wǎng)頁(yè)可以調用爬蟲(chóng)么?
爬蟲(chóng)的調用是在Web的服務(wù)端調用的,平時(shí)如何用就如何用,這些爬蟲(chóng)都可以使用。
11)爬蟲(chóng)被網(wǎng)站封了如何辦?
爬蟲(chóng)被網(wǎng)站封了,一般用多代理(隨機代理)就可以解決。但是這種開(kāi)源爬蟲(chóng)通常沒(méi)有直接支持隨機代理ip的切換。
開(kāi)源JAVA單機爬蟲(chóng)框架簡(jiǎn)介,優(yōu)缺點(diǎn)剖析
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 277 次瀏覽 ? 2020-06-06 08:01
互聯(lián)網(wǎng)營(yíng)銷(xiāo)時(shí)代,獲取海量數據成為營(yíng)銷(xiāo)推廣的關(guān)鍵。而獲得數據的最佳方法就是借助爬蟲(chóng)去抓取。但是爬蟲(chóng)的使用少不了代理ip太陽(yáng)HTTP的支撐。當然網(wǎng)路上現今有很多開(kāi)源爬蟲(chóng),大大便捷了你們使用。但是開(kāi)源網(wǎng)路爬蟲(chóng)也是有優(yōu)點(diǎn)也有缺點(diǎn),清晰認知這一點(diǎn)能夠達成自己的目標。
對于爬蟲(chóng)的功能來(lái)說(shuō)。用戶(hù)比較關(guān)心的問(wèn)題常常是:
1)爬蟲(chóng)可以爬取ajax信息么?
網(wǎng)頁(yè)上有一些異步加載的數據,爬取那些數據有兩種方式:使用模擬瀏覽器(問(wèn)題1中描述過(guò)了),或者剖析ajax的http請求,自己生成ajax懇求的url,獲取返回的數據。如果是自己生成ajax懇求,使用開(kāi)源爬蟲(chóng)的意義在那里?其實(shí)是要用開(kāi)源爬蟲(chóng)的線(xiàn)程池和URL管理功能(比如斷點(diǎn)爬?。?。
如果我早已可以生成我所須要的ajax懇求(列表),如何用這種爬蟲(chóng)來(lái)對那些懇求進(jìn)行爬???
爬蟲(chóng)常常都是設計成廣度遍歷或則深度遍歷的模式爬蟲(chóng)框架,去遍歷靜態(tài)或則動(dòng)態(tài)頁(yè)面。爬取ajax信息屬于deep web(深網(wǎng))的范疇,雖然大多數爬蟲(chóng)都不直接支持。但是也可以通過(guò)一些方式來(lái)完成。比如WebCollector使用廣度遍歷來(lái)遍歷網(wǎng)站。爬蟲(chóng)的第一輪爬取就是爬取種子集合(seeds)中的所有url。簡(jiǎn)單來(lái)說(shuō),就是將生成的ajax懇求作為種子,放入爬蟲(chóng)。用爬蟲(chóng)對那些種子,進(jìn)行深度為1的廣度遍歷(默認就是廣度遍歷)。
2)爬蟲(chóng)支持多線(xiàn)程么、爬蟲(chóng)能用代理么、爬蟲(chóng)會(huì )爬取重復數據么、爬蟲(chóng)能爬取JS生成的信息么?
能不能爬js生成的信息和爬蟲(chóng)本身沒(méi)有很大關(guān)系。爬蟲(chóng)主要是負責遍歷網(wǎng)站和下載頁(yè)面。爬js生成的信息和網(wǎng)頁(yè)信息抽取模塊有關(guān),往往須要通過(guò)模擬瀏覽器(htmlunit,selenium)來(lái)完成。這些模擬瀏覽器,往往須要花費好多的時(shí)間來(lái)處理一個(gè)頁(yè)面。所以一種策略就是,使用這種爬蟲(chóng)來(lái)遍歷網(wǎng)站,遇到須要解析的頁(yè)面,就將網(wǎng)頁(yè)的相關(guān)信息遞交給模擬瀏覽器,來(lái)完成JS生成信息的抽取。
3)爬蟲(chóng)如何保存網(wǎng)頁(yè)的信息?
有一些爬蟲(chóng),自帶一個(gè)模塊負責持久化。比如webmagic,有一個(gè)模塊叫pipeline。通過(guò)簡(jiǎn)單地配置,可以將爬蟲(chóng)抽取到的信息,持久化到文件、數據庫等。還有一些爬蟲(chóng),并沒(méi)有直接給用戶(hù)提供數據持久化的模塊。比如crawler4j和webcollector。讓用戶(hù)自己在網(wǎng)頁(yè)處理模塊中添加遞交數據庫的操作。至于使用pipeline這些模塊好不好,就和操作數據庫使用ORM好不好這個(gè)問(wèn)題類(lèi)似,取決于你的業(yè)務(wù)。
4)爬蟲(chóng)如何爬取要登錄的網(wǎng)站?
這些開(kāi)源爬蟲(chóng)都支持在爬取時(shí)指定cookies,模擬登錄主要是靠cookies。至于cookies如何獲取,不是爬蟲(chóng)管的事情。你可以自動(dòng)獲取、用http請求模擬登錄或則用模擬瀏覽器手動(dòng)登入獲取cookie。
5)爬蟲(chóng)如何抽取網(wǎng)頁(yè)的信息?
開(kāi)源爬蟲(chóng)通常還會(huì )集成網(wǎng)頁(yè)抽取工具。主要支持兩種規范:CSS SELECTOR和XPATH。至于那個(gè)好,這里不評價(jià)。
6)明明代碼寫(xiě)對了,爬不到數據爬蟲(chóng)框架,是不是爬蟲(chóng)有問(wèn)題,換個(gè)爬蟲(chóng)能解決么?
如果代碼寫(xiě)對了,又爬不到數據,換其他爬蟲(chóng)也是一樣爬不到。遇到這些情況,要么是網(wǎng)站把你封了,要么是你爬的數據是javascript生成的。爬不到數據通過(guò)換爬蟲(chóng)是不能解決的。
7)哪個(gè)爬蟲(chóng)的設計模式和架構比較好?
設計模式對軟件開(kāi)發(fā)沒(méi)有指導性作用。用設計模式來(lái)設計爬蟲(chóng),只會(huì )促使爬蟲(chóng)的設計愈發(fā)臃腫。
至于架構,開(kāi)源爬蟲(chóng)目前主要是細節的數據結構的設計,比如爬取線(xiàn)程池、任務(wù)隊列,這些你們都能控制好。
8)哪個(gè)爬蟲(chóng)可以判定網(wǎng)站是否爬完、那個(gè)爬蟲(chóng)可以依照主題進(jìn)行爬???
爬蟲(chóng)難以判定網(wǎng)站是否爬完,只能盡可能覆蓋。
至于依照主題爬取,爬蟲(chóng)然后把內容爬出來(lái)才曉得是哪些主題。所以通常都是整個(gè)爬出來(lái),然后再去篩選內容。如果嫌爬的很泛,可以通過(guò)限制URL正則等方法,來(lái)縮小一下范圍。
9)爬蟲(chóng)速率怎么樣?
單機開(kāi)源爬蟲(chóng)的速率,基本都可以講本機的網(wǎng)速用到極限。爬蟲(chóng)的速率慢,往往是由于用戶(hù)把線(xiàn)程數開(kāi)少了、網(wǎng)速慢,或者在數據持久化時(shí),和數據庫的交互速率慢。而這種東西,往往都是用戶(hù)的機器和二次開(kāi)發(fā)的代碼決定的。
10)網(wǎng)頁(yè)可以調用爬蟲(chóng)么?
爬蟲(chóng)的調用是在Web的服務(wù)端調用的,平時(shí)如何用就如何用,這些爬蟲(chóng)都可以使用。
11)爬蟲(chóng)被網(wǎng)站封了如何辦?
爬蟲(chóng)被網(wǎng)站封了,一般用多代理(隨機代理)就可以解決。但是這種開(kāi)源爬蟲(chóng)通常沒(méi)有直接支持隨機代理ip的切換。 查看全部

互聯(lián)網(wǎng)營(yíng)銷(xiāo)時(shí)代,獲取海量數據成為營(yíng)銷(xiāo)推廣的關(guān)鍵。而獲得數據的最佳方法就是借助爬蟲(chóng)去抓取。但是爬蟲(chóng)的使用少不了代理ip太陽(yáng)HTTP的支撐。當然網(wǎng)路上現今有很多開(kāi)源爬蟲(chóng),大大便捷了你們使用。但是開(kāi)源網(wǎng)路爬蟲(chóng)也是有優(yōu)點(diǎn)也有缺點(diǎn),清晰認知這一點(diǎn)能夠達成自己的目標。
對于爬蟲(chóng)的功能來(lái)說(shuō)。用戶(hù)比較關(guān)心的問(wèn)題常常是:
1)爬蟲(chóng)可以爬取ajax信息么?
網(wǎng)頁(yè)上有一些異步加載的數據,爬取那些數據有兩種方式:使用模擬瀏覽器(問(wèn)題1中描述過(guò)了),或者剖析ajax的http請求,自己生成ajax懇求的url,獲取返回的數據。如果是自己生成ajax懇求,使用開(kāi)源爬蟲(chóng)的意義在那里?其實(shí)是要用開(kāi)源爬蟲(chóng)的線(xiàn)程池和URL管理功能(比如斷點(diǎn)爬?。?。
如果我早已可以生成我所須要的ajax懇求(列表),如何用這種爬蟲(chóng)來(lái)對那些懇求進(jìn)行爬???
爬蟲(chóng)常常都是設計成廣度遍歷或則深度遍歷的模式爬蟲(chóng)框架,去遍歷靜態(tài)或則動(dòng)態(tài)頁(yè)面。爬取ajax信息屬于deep web(深網(wǎng))的范疇,雖然大多數爬蟲(chóng)都不直接支持。但是也可以通過(guò)一些方式來(lái)完成。比如WebCollector使用廣度遍歷來(lái)遍歷網(wǎng)站。爬蟲(chóng)的第一輪爬取就是爬取種子集合(seeds)中的所有url。簡(jiǎn)單來(lái)說(shuō),就是將生成的ajax懇求作為種子,放入爬蟲(chóng)。用爬蟲(chóng)對那些種子,進(jìn)行深度為1的廣度遍歷(默認就是廣度遍歷)。
2)爬蟲(chóng)支持多線(xiàn)程么、爬蟲(chóng)能用代理么、爬蟲(chóng)會(huì )爬取重復數據么、爬蟲(chóng)能爬取JS生成的信息么?
能不能爬js生成的信息和爬蟲(chóng)本身沒(méi)有很大關(guān)系。爬蟲(chóng)主要是負責遍歷網(wǎng)站和下載頁(yè)面。爬js生成的信息和網(wǎng)頁(yè)信息抽取模塊有關(guān),往往須要通過(guò)模擬瀏覽器(htmlunit,selenium)來(lái)完成。這些模擬瀏覽器,往往須要花費好多的時(shí)間來(lái)處理一個(gè)頁(yè)面。所以一種策略就是,使用這種爬蟲(chóng)來(lái)遍歷網(wǎng)站,遇到須要解析的頁(yè)面,就將網(wǎng)頁(yè)的相關(guān)信息遞交給模擬瀏覽器,來(lái)完成JS生成信息的抽取。
3)爬蟲(chóng)如何保存網(wǎng)頁(yè)的信息?
有一些爬蟲(chóng),自帶一個(gè)模塊負責持久化。比如webmagic,有一個(gè)模塊叫pipeline。通過(guò)簡(jiǎn)單地配置,可以將爬蟲(chóng)抽取到的信息,持久化到文件、數據庫等。還有一些爬蟲(chóng),并沒(méi)有直接給用戶(hù)提供數據持久化的模塊。比如crawler4j和webcollector。讓用戶(hù)自己在網(wǎng)頁(yè)處理模塊中添加遞交數據庫的操作。至于使用pipeline這些模塊好不好,就和操作數據庫使用ORM好不好這個(gè)問(wèn)題類(lèi)似,取決于你的業(yè)務(wù)。
4)爬蟲(chóng)如何爬取要登錄的網(wǎng)站?
這些開(kāi)源爬蟲(chóng)都支持在爬取時(shí)指定cookies,模擬登錄主要是靠cookies。至于cookies如何獲取,不是爬蟲(chóng)管的事情。你可以自動(dòng)獲取、用http請求模擬登錄或則用模擬瀏覽器手動(dòng)登入獲取cookie。
5)爬蟲(chóng)如何抽取網(wǎng)頁(yè)的信息?
開(kāi)源爬蟲(chóng)通常還會(huì )集成網(wǎng)頁(yè)抽取工具。主要支持兩種規范:CSS SELECTOR和XPATH。至于那個(gè)好,這里不評價(jià)。
6)明明代碼寫(xiě)對了,爬不到數據爬蟲(chóng)框架,是不是爬蟲(chóng)有問(wèn)題,換個(gè)爬蟲(chóng)能解決么?
如果代碼寫(xiě)對了,又爬不到數據,換其他爬蟲(chóng)也是一樣爬不到。遇到這些情況,要么是網(wǎng)站把你封了,要么是你爬的數據是javascript生成的。爬不到數據通過(guò)換爬蟲(chóng)是不能解決的。
7)哪個(gè)爬蟲(chóng)的設計模式和架構比較好?
設計模式對軟件開(kāi)發(fā)沒(méi)有指導性作用。用設計模式來(lái)設計爬蟲(chóng),只會(huì )促使爬蟲(chóng)的設計愈發(fā)臃腫。
至于架構,開(kāi)源爬蟲(chóng)目前主要是細節的數據結構的設計,比如爬取線(xiàn)程池、任務(wù)隊列,這些你們都能控制好。
8)哪個(gè)爬蟲(chóng)可以判定網(wǎng)站是否爬完、那個(gè)爬蟲(chóng)可以依照主題進(jìn)行爬???
爬蟲(chóng)難以判定網(wǎng)站是否爬完,只能盡可能覆蓋。
至于依照主題爬取,爬蟲(chóng)然后把內容爬出來(lái)才曉得是哪些主題。所以通常都是整個(gè)爬出來(lái),然后再去篩選內容。如果嫌爬的很泛,可以通過(guò)限制URL正則等方法,來(lái)縮小一下范圍。
9)爬蟲(chóng)速率怎么樣?
單機開(kāi)源爬蟲(chóng)的速率,基本都可以講本機的網(wǎng)速用到極限。爬蟲(chóng)的速率慢,往往是由于用戶(hù)把線(xiàn)程數開(kāi)少了、網(wǎng)速慢,或者在數據持久化時(shí),和數據庫的交互速率慢。而這種東西,往往都是用戶(hù)的機器和二次開(kāi)發(fā)的代碼決定的。
10)網(wǎng)頁(yè)可以調用爬蟲(chóng)么?
爬蟲(chóng)的調用是在Web的服務(wù)端調用的,平時(shí)如何用就如何用,這些爬蟲(chóng)都可以使用。
11)爬蟲(chóng)被網(wǎng)站封了如何辦?
爬蟲(chóng)被網(wǎng)站封了,一般用多代理(隨機代理)就可以解決。但是這種開(kāi)源爬蟲(chóng)通常沒(méi)有直接支持隨機代理ip的切換。