1. 我想用c編寫一個爬蟲程序,可是看完一本c語言教程後,還是覺得只會編寫一些計算類的小代碼,要學會編寫
想做爬蟲程序不是學完語言就行了,是要學很多東西的,你可以查一查大學計算機專業有哪些課程。
做爬蟲可以學學java語言。
《網路機器人Java編程指南》
開源的爬蟲產品
http://www.oschina.net/project/tag/64/spider?lang=19&os=0&sort=view&p=1
2. 網路爬蟲採用的是哪種演算法策略
在爬蟲系統中,待抓取URL隊列是很重要的一部分。待抓取URL隊列中的URL以什麼樣的順序排列也是一個很重要的問題,因為這涉及到先抓取那個頁面,後抓取哪個頁面。而決定這些URL排列順序的方法,叫做抓取策略。下面重點介紹幾種常見的抓取策略:
1.深度優先遍歷策略
深度優先遍歷策略是指網路爬蟲會從起始頁開始,一個鏈接一個鏈接跟蹤下去,處理完這條線路之後再轉入下一個起始頁,繼續跟蹤鏈接。我們以下面的圖為例: 遍歷的路徑:A-F-G E-H-I B C D 2.寬度優先遍歷策略 寬度優先遍歷策略的基本思路是,將新下載網頁中發現的鏈接直接插入待抓取URL隊列的末尾。也就是指網路爬蟲會先抓取起始網頁中鏈接的所有網頁,然後再選擇其中的一個鏈接網頁,繼續抓取在此網頁中鏈接的所有網頁。還是以上面的圖為例: 遍歷路徑:A-B-C-D-E-F G H I 3.反向鏈接數策略 反向鏈接數是指一個網頁被其他網頁鏈接指向的數量。反向鏈接數表示的是一個網頁的內容受到其他人的推薦的程度。因此,很多時候搜索引擎的抓取系統會使用這個指標來評價網頁的重要程度,從而決定不同網頁的抓取先後順序。 在真實的網路環境中,由於廣告鏈接、作弊鏈接的存在,反向鏈接數不能完全等他我那個也的重要程度。因此,搜索引擎往往考慮一些可靠的反向鏈接數。 4.Partial PageRank策略 Partial PageRank演算法借鑒了PageRank演算法的思想:對於已經下載的網頁,連同待抓取URL隊列中的URL,形成網頁集合,計算每個頁面的PageRank值,計算完之後,將待抓取URL隊列中的URL按照PageRank值的大小排列,並按照該順序抓取頁面。 如果每次抓取一個頁面,就重新計算PageRank值,一種折中方案是:每抓取K個頁面後,重新計算一次PageRank值。但是這種情況還會有一個問題:對於已經下載下來的頁面中分析出的鏈接,也就是我們之前提到的未知網頁那一部分,暫時是沒有PageRank值的。為了解決這個問題,會給這些頁面一個臨時的PageRank值:將這個網頁所有入鏈傳遞進來的PageRank值進行匯總,這樣就形成了該未知頁面的PageRank值,從而參與排序。下面舉例說明: 5.OPIC策略策略 該演算法實際上也是對頁面進行一個重要性打分。在演算法開始前,給所有頁面一個相同的初始現金(cash)。當下載了某個頁面P之後,將P的現金分攤給所有從P中分析出的鏈接,並且將P的現金清空。對於待抓取URL隊列中的所有頁面按照現金數進行排序。 6.大站優先策略 對於待抓取URL隊列中的所有網頁,根據所屬的網站進行分類。對於待下載頁面數多的網站,優先下載。這個策略也因此叫做大站優先策略。
3. 網路爬蟲論文
1、爬蟲技術概述
網路爬蟲(Web crawler),是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本,它們被廣泛用於互聯網搜索引擎或其他類似網站,可以自動採集所有其能夠訪問到的頁面內容,以獲取或更新這些網站的內容和檢索方式。從功能上來講,爬蟲一般分為數據採集,處理,儲存三個部分。傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。聚焦爬蟲的工作流程較為復雜,需要根據一定的網頁分析演算法過濾與主題無關的鏈接,保留有用的鏈接並將其放入等待抓取的URL隊列。然後,它將根據一定的搜索策略從隊列中選擇下一步要抓取的網頁URL,並重復上述過程,直到達到系統的某一條件時停止。另外,所有被爬蟲抓取的網頁將會被系統存貯,進行一定的分析、過濾,並建立索引,以便之後的查詢和檢索;對於聚焦爬蟲來說,這一過程所得到的分析結果還可能對以後的抓取過程給出反饋和指導。
相對於通用網路爬蟲,聚焦爬蟲還需要解決三個主要問題:
(1) 對抓取目標的描述或定義;
(2) 對網頁或數據的分析與過濾;
(3) 對URL的搜索策略。
2、爬蟲原理
2.1 網路爬蟲原理
Web網路爬蟲系統的功能是下載網頁數據,為搜索引擎系統提供數據來源。很多大型的網路搜索引擎系統都被稱為基於 Web數據採集的搜索引擎系統,比如 Google、Bai。由此可見Web 網路爬蟲系統在搜索引擎中的重要性。網頁中除了包含供用戶閱讀的文字信息外,還包含一些超鏈接信息。Web網路爬蟲系統正是通過網頁中的超連接信息不斷獲得網路上的其它網頁。正是因為這種採集過程像一個爬蟲或者蜘蛛在網路上漫遊,所以它才被稱為網路爬蟲系統或者網路蜘蛛系統,在英文中稱為Spider或者Crawler。
2.3.2寬度優先遍歷策略
寬度優先遍歷策略的基本思路是,將新下載網頁中發現的鏈接直接插入待抓取URL隊列的末尾。也就是指網路爬蟲會先抓取起始網頁中鏈接的所有網頁,然後再選擇其中的一個鏈接網頁,繼續抓取在此網頁中鏈接的所有網頁。還是以上面的圖為例:
遍歷路徑:A-B-C-D-E-F G H I
2.3.3反向鏈接數策略
反向鏈接數是指一個網頁被其他網頁鏈接指向的數量。反向鏈接數表示的是一個網頁的內容受到其他人的推薦的程度。因此,很多時候搜索引擎的抓取系統會使用這個指標來評價網頁的重要程度,從而決定不同網頁的抓取先後順序。
在真實的網路環境中,由於廣告鏈接、作弊鏈接的存在,反向鏈接數不能完全等他我那個也的重要程度。因此,搜索引擎往往考慮一些可靠的反向鏈接數。
2.3.4Partial PageRank策略
Partial PageRank演算法借鑒了PageRank演算法的思想:對於已經下載的網頁,連同待抓取URL隊列中的URL,形成網頁集合,計算每個頁面的PageRank值,計算完之後,將待抓取URL隊列中的URL按照PageRank值的大小排列,並按照該順序抓取頁面。
如果每次抓取一個頁面,就重新計算PageRank值,一種折中方案是:每抓取K個頁面後,重新計算一次PageRank值。但是這種情況還會有一個問題:對於已經下載下來的頁面中分析出的鏈接,也就是我們之前提到的未知網頁那一部分,暫時是沒有PageRank值的。為了解決這個問題,會給這些頁面一個臨時的PageRank值:將這個網頁所有入鏈傳遞進來的PageRank值進行匯總,這樣就形成了該未知頁面的PageRank值,從而參與排序。下面舉例說明:
2.3.5OPIC策略策略
該演算法實際上也是對頁面進行一個重要性打分。在演算法開始前,給所有頁面一個相同的初始現金(cash)。當下載了某個頁面P之後,將P的現金分攤給所有從P中分析出的鏈接,並且將P的現金清空。對於待抓取URL隊列中的所有頁面按照現金數進行排序。
2.3.6大站優先策略
對於待抓取URL隊列中的所有網頁,根據所屬的網站進行分類。對於待下載頁面數多的網站,優先下載。這個策略也因此叫做大站優先策略。
3、爬蟲分類
開發網路爬蟲應該選擇Nutch、Crawler4j、WebMagic、scrapy、WebCollector還是其他的?上面說的爬蟲,基本可以分3類:
(1)分布式爬蟲:Nutch
(2)JAVA爬蟲:Crawler4j、WebMagic、WebCollector
(3)非JAVA爬蟲:scrapy(基於python語言開發)
3.1 分布式爬蟲
爬蟲使用分布式,主要是解決兩個問題:
1)海量URL管理
2)網速
現在比較流行的分布式爬蟲,是Apache的Nutch。但是對於大多數用戶來說,Nutch是這幾類爬蟲里,最不好的選擇,理由如下:
1)Nutch是為搜索引擎設計的爬蟲,大多數用戶是需要一個做精準數據爬取(精抽取)的爬蟲。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒有太大的意義。也就是說,用Nutch做數據抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發,來使得它適用於精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新寫一個分布式爬蟲框架了。
2)Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機器數量較少,爬取速度反而不如單機爬蟲快。
3)Nutch雖然有一套插件機制,而且作為亮點宣傳。可以看到一些開源的Nutch插件,提供精抽取的功能。但是開發過Nutch插件的人都知道,Nutch的插件系統有多蹩腳。利用反射的機制來載入和調用插件,使得程序的編寫和調試都變得異常困難,更別說在上面開發一套復雜的精抽取系統了。而且Nutch並沒有為精抽取提供相應的插件掛載點。Nutch的插件有隻有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務的,並沒有為精抽取提供掛載點。大多數Nutch的精抽取插件,都是掛載在「頁面解析」(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為後續爬取提供URL),以及為搜索引擎提供一些易抽取的網頁信息(網頁的meta信息、text文本)。
4)用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。了解Nutch源碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch源碼。調試過程中會出現除程序本身之外的各種問題(hadoop的問題、hbase的問題)。
5)很多人說Nutch2有gora,可以持久化數據到avro文件、hbase、mysql等。很多人其實理解錯了,這里說的持久化數據,是指將URL信息(URL管理所需要的數據)存放到avro、hbase、mysql。並不是你要抽取的結構化數據。其實對大多數人來說,URL信息存在哪裡無所謂。
6)Nutch2的版本目前並不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。如果想用hbase配合nutch(大多數人用nutch2就是為了用hbase),只能使用0.90版本左右的hbase,相應的就要將hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比較有誤導作用,Nutch2的教程有兩個,分別是Nutch1.x和Nutch2.x,這個Nutch2.x官網上寫的是可以支持到hbase 0.94。但是實際上,這個Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之後的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。
所以,如果你不是要做搜索引擎,盡量不要選擇Nutch作為爬蟲。有些團隊就喜歡跟風,非要選擇Nutch來開發精抽取的爬蟲,其實是沖著Nutch的名氣(Nutch作者是Doug Cutting),當然最後的結果往往是項目延期完成。
如果你是要做搜索引擎,Nutch1.x是一個非常好的選擇。Nutch1.x和solr或者es配合,就可以構成一套非常強大的搜索引擎了。如果非要用Nutch2的話,建議等到Nutch2.3發布再看。目前的Nutch2是一個非常不穩定的版本。
4. 求哪位大神給一個c++編寫的網路爬蟲的代碼~~~~
ivspider 一個C語言開發、封裝為dll的爬蟲引擎,支持多線程。
http://yiivon.com/ivspider/
tt 是使用該引擎寫的一個爬蟲小工具,也使用C(VC6環境)。有源碼與發布版本。
引用官方說法:
」
tt 是一個使用 ivspider 爬蟲引擎的網站信息採集小工具,運行在windows 的控制台上。它可以通過指定一系列的參數進行高效靈活地抓取自己感興趣的網頁信息以進行處理。
1、可選擇性。如指定標簽抓取、下載或排除等;
2、數量可控性。如指定爬取深度、抓取最大鏈接數等;
3、時限保證性。如解析DNS超時、連接超時、讀取數超時等;
4、可實時性。如指定DNS不使用緩存、頁面不緩存等;
5、人性化。如可指定連接失敗時自動重試、選擇是否跨站抓取等;
6、可永久性存儲。如把網頁或圖片等數據保存到本地磁碟等;
7、適用於幾乎所有的windows 版本。如windows 98/xp/2003/vista/7等。
"
地址 http://yiivon.com/download/tt/
5. 各種語言寫網路爬蟲有什麼優點缺點
我用 PHP 和 Python 都寫過爬蟲和正文提取程序。
最開始使用 PHP 所以先說說 PHP 的優點:
1.語言比較簡單,PHP 是非常隨意的一種語言。寫起來容易讓你把精力放在你要做的事情上,而不是各種語法規則等等。
2.各種功能模塊齊全,這里分兩部分:
1.網頁下載:curl 等擴展庫;
2.文檔解析:dom、xpath、tidy、各種轉碼工具,可能跟題主的問題不太一樣,我的爬蟲需要提取正文,所以需要很復雜的文本處理,所以各種方便的文本處理工具是我的大愛。;
總之容易上手。
缺點:
1.並發處理能力較弱:由於當時 PHP 沒有線程、進程功能,要想實現並發需要借用多路服用模型,PHP 使用的是 select 模型。實現其來比較麻煩,可能是因為水平問題我的程序經常出現一些錯誤,導致漏抓。
再說說 Python:
優點:
1.各種爬蟲框架,方便高效的下載網頁;
2.多線程、進程模型成熟穩定,爬蟲是一個典型的多任務處理場景,請求頁面時會有較長的延遲,總體來說更多的是等待。多線程或進程會更優化程序效率,提升整個系統下載和分析能力。
3.GAE 的支持,當初寫爬蟲的時候剛剛有 GAE,而且只支持 Python ,利用 GAE 創建的爬蟲幾乎免費,最多的時候我有近千個應用實例在工作。
缺點:
1.對不規范 HTML 適應能力差:舉個例子,如果一個頁面裡面同時有 GB18030 字元集的中文和 UTF-8 字元集的中文,Python 處理起來就沒有 PHP 那麼簡單,你自己需要做很多的判斷工作。當然這是提取正文時的麻煩。
Java 和 C++ 當時也考察過,相對腳本語言比較麻煩,所以放棄。
總之,如果開發一個小規模的爬蟲腳本語言是個各方面比較有優勢的語言。如果要開發一個復雜的爬蟲系統可能 Java 是個增加選項, C++ 我感覺寫個模塊之類的更加適合。對於一個爬蟲系統來說,下載和內文解析只是基本的兩個功能。真正好的系統還包括完善的任務調度、監控、存儲、頁面數據保存和更新邏輯、排重等等。爬蟲是一個耗費帶寬的應用,好的設計會節約大量的帶寬和伺服器資源,並且好壞差距很大。
6. 怎麼在DOS下用C語言寫網路爬蟲
獲取cspider_t。
自定義user agent,cookie,timeout,proxy以及抓取線程和解析線程的最大數量。
添加初始要抓取的url到任務隊列。
編寫解析函數和數據持久化函數。
啟動爬蟲。
例子
先來看下簡單的爬蟲例子,會在後面詳細講解例子。
7. Linux/Nginx如何查看搜索引擎蜘蛛爬蟲的行
1. 網路蜘蛛爬行的次數
cat access.log | grep Baispider | wc
最左面的數值顯示的就是爬行次數。
2. 網路蜘蛛的詳細記錄(Ctrl C可以終止)
cat access.log | grep Baispider
也可以用下面的命令:
cat access.log | grep Baispider | tail -n 10
cat access.log | grep Baispider | head -n 10
只看最後10條或最前10條,這用就能知道這個日誌文件的開始記錄的時間和日期。
3. 網路蜘蛛抓取首頁的詳細記錄
cat access.log | grep Baispider | grep 「GET / HTTP」
網路蜘蛛好像對首頁非常熱愛每個鍾頭都來光顧,而谷歌和雅虎蜘蛛更喜歡內頁。
4. 網路蜘蛛派性記錄時間點分布
cat access.log | grep 「Baispider 」 | awk 『{print $4}'
5. 網路蜘蛛爬行頁面按次數降序列表
cat access.log | grep 「Baispider 」 | awk 『{print $7}' | sort | uniq -c | sort -r
文中的Baispider 改成Googlebot都可以查看谷歌的數據,鑒於大陸的特殊性,大家應該對網路的log更為關注。
附:(Mediapartners-Google)Google adsense蜘蛛的詳細爬行記錄
cat access.log | grep Mediapartners
8. 除了python可以爬蟲還有哪些編程語言可以爬蟲
能夠做網路爬蟲的編程語言很多,包括PHP、Java、C/C++、Python等都能做爬蟲,都能達到抓取想要的數據資源。針對不同的環境,我們需要了解他們做爬蟲的優缺點,才能選出合適的開發環境。
(一)PHP
網路爬蟲需要快速的從伺服器中抓取需要的數據,有時數據量較大時需要進行多線程抓取。PHP雖然是世界上最好的語言,但是PHP對多線程、非同步支持不足,並發不足,而爬蟲程序對速度和效率要求極高,所以說PHP天生不是做爬蟲的。
(二)C/C++
C語言是一門面向過程、抽象化的通用程序設計語言,廣泛應用於底層開發,運行效率和性能是最強大的,但是它的學習成本非常高,需要有很好地編程知識基礎,對於初學者或者編程知識不是很好地程序員來說,不是一個很好的選擇。當然,能夠用C/C++編寫爬蟲程序,足以說明能力很強,但是絕不是最正確的選擇。
(三)Java
在網路爬蟲方面,作為Python最大的對手Java,擁有強大的生態圈。但是Java本身很笨重,代碼量大。由於爬蟲與反爬蟲的較量是持久的,也是頻繁的,剛寫好的爬蟲程序很可能就不能用了。爬蟲程序需要經常性的修改部分代碼。而Java的重構成本比較高,任何修改都會導致大量代碼的變動。
(四)Python
Python在設計上堅持了清晰劃一的風格,易讀、易維護,語法優美、代碼簡潔、開發效率高、第三方模塊多。並且擁有強大的爬蟲Scrapy,以及成熟高效的scrapy-redis分布式策略。實現同樣的爬蟲功能,代碼量少,而且維護方便,開發效率高。