導航:首頁 > 編程語言 > python爬蟲穩定性

python爬蟲穩定性

發布時間:2022-08-21 09:16:10

A. python爬蟲和測試的區別

爬蟲的基本流程

發起請求

通過HTTP庫向目標站點發起請求,也就是發送一個Request,請求可以包含額外的header等信息,等待伺服器響應

獲取響應內容

如果伺服器能正常響應,會得到一個Response,Response的內容便是所要獲取的頁面內容,類型可能是HTML,Json字元串,二進制數據(圖片或者視頻)等類型

解析內容

得到的內容可能是HTML,可以用正則表達式,頁面解析庫進行解析,可能是Json,可以直接轉換為Json對象解析,可能是二進制數據,可以做保存或者進一步的處理

保存數據

保存形式多樣,可以存為文本,也可以保存到資料庫,或者保存特定格式的文件

B. 開源爬蟲框架各有什麼優缺點

首先爬蟲框架有三種

  1. 分布式爬蟲:Nutch

  2. java單機爬蟲:Crawler4j,WebMagic,WebCollector

  3. 非JAVA單機爬蟲:scrapy

第一類:分布式爬蟲

優點:

  1. 海量URL管理

  2. 網速快

缺點:

  1. Nutch是為搜索引擎設計的爬蟲,大多數用戶是需要一個做精準數據爬取(精抽取)的爬蟲。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒有太大的意義。

  2. 用Nutch做數據抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發,來使得它適用於精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非。

  3. Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機器數量較少,爬取速度反而不如單機爬蟲。

  4. Nutch雖然有一套插件機制,而且作為亮點宣傳。可以看到一些開源的Nutch插件,提供精抽取的功能。但是開發過Nutch插件的人都知道,Nutch的插件系統有多蹩腳。利用反射的機制來載入和調用插件,使得程序的編寫和調試都變得異常困難,更別說在上面開發一套復雜的精抽取系統了。

  5. Nutch並沒有為精抽取提供相應的插件掛載點。Nutch的插件有隻有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務的,並沒有為精抽取提供掛載點。大多數Nutch的精抽取插件,都是掛載在「頁面解析」(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為後續爬取提供URL),以及為搜索引擎提供一些易抽取的網頁信息(網頁的meta信息、text)

  6. 用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。了解Nutch源碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch源碼。調試過程中會出現除程序本身之外的各種問題(hadoop的問題、hbase的問題)。

  7. Nutch2的版本目前並不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。Nutch2.3之前、Nutch2.2.1之後的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。

第二類:JAVA單機爬蟲

優點:

  1. 支持多線程。

  2. 支持代理。

  3. 能過濾重復URL的。

  4. 負責遍歷網站和下載頁面。爬js生成的信息和網頁信息抽取模塊有關,往往需要通過模擬瀏覽器(htmlunit,selenium)來完成。

缺點:

設計模式對軟體開發沒有指導性作用。用設計模式來設計爬蟲,只會使得爬蟲的設計更加臃腫。

第三類:非JAVA單機爬蟲

優點:

  1. 先說python爬蟲,python可以用30行代碼,完成JAVA

  2. 50行代碼乾的任務。python寫代碼的確快,但是在調試代碼的階段,python代碼的調試往往會耗費遠遠多於編碼階段省下的時間。

  3. 使用python開發,要保證程序的正確性和穩定性,就需要寫更多的測試模塊。當然如果爬取規模不大、爬取業務不復雜,使用scrapy這種爬蟲也是蠻不錯的,可以輕松完成爬取任務。

缺點:

  1. bug較多,不穩定。

C. 當Python爬蟲遇到網站防爬機制時如何處理

繞過反爬蟲機制的方法

1、模擬正常用戶。反爬蟲機制還會利用檢測用戶的行為來判斷,例如Cookies來判斷是不是有效的用戶。

2、動態頁面限制。有時候發現抓取的信息內容空白,這是因為這個網站的信息是通過用戶的XHR動態返回內容信息。解決這種問題就要爬蟲程序對網站進行分析,找到內容信息並抓取,才能獲取內容。

3、降低IP訪問頻率。有時候平台為了阻止頻繁訪問,會設置IP在規定時間內的訪問次數,超過次數就會禁止訪問。所以繞過反爬蟲機制可以降低爬蟲的訪問頻率,還可以用IPIDEA代理IP換IP解決限制。

D. PHP爬蟲和基於命令行的Python爬蟲有什麼差

PHP爬蟲穩定性不好 程序容易響應超時。。對多線程的支持也不太好。
Python爬蟲穩定性好些。。

E. 請教一個問題,怎麼提高 python 爬蟲的爬取效率

很多爬蟲工作者都遇到過抓取非常慢的問題,尤其是需要採集大量數據的情況下。那麼如何提高爬蟲採集效率就十分關鍵,一塊了解如何提高爬蟲採集效率問題。
1.盡可能減少網站訪問次數
單次爬蟲的主要把時間消耗在網路請求等待響應上面,所以能減少網站訪問就減少網站訪問,既減少自身的工作量,也減輕網站的壓力,還降低被封的風險。
第一步要做的就是流程優化,盡量精簡流程,避免在多個頁面重復獲取。
隨後去重,同樣是十分重要的手段,一般根據url或者id進行唯一性判別,爬過的就不再繼續爬了。
2.分布式爬蟲
即便把各種法子都用盡了,單機單位時間內能爬的網頁數仍是有限的,面對大量的網頁頁面隊列,可計算的時間仍是很長,這種情況下就必須要用機器換時間了,這就是分布式爬蟲。
第一步,分布式並不是爬蟲的本質,也並不是必須的,對於互相獨立、不存在通信的任務就可手動對任務分割,隨後在多個機器上各自執行,減少每台機器的工作量,費時就會成倍減少。
例如有200W個網頁頁面待爬,可以用5台機器各自爬互不重復的40W個網頁頁面,相對來說單機費時就縮短了5倍。
可是如果存在著需要通信的狀況,例如一個變動的待爬隊列,每爬一次這個隊列就會發生變化,即便分割任務也就有交叉重復,因為各個機器在程序運行時的待爬隊列都不一樣了——這種情況下只能用分布式,一個Master存儲隊列,其他多個Slave各自來取,這樣共享一個隊列,取的情況下互斥也不會重復爬取。IPIDEA提供高匿穩定的IP同時更注重用戶隱私的保護,保障用戶的信息安全。含有240+國家地區的ip,支持API批量使用,支持多線程高並發使用。

F. python網路爬蟲實戰怎麼樣

本書從Python的安裝開始,詳細講解了Python從簡單程序延伸到Python網路爬蟲的全過程。本書從實戰出發,根據不同的需求選取不同的爬蟲,有針對性地講解了幾種Python網路爬蟲。本書共8章,涵蓋的內容有Python語言的基本語法、Python常用IDE的使用、Python第三方模塊的導入使用、Python爬蟲常用模塊、Scrapy爬蟲、Beautiful

Soup爬蟲、Mechanize模擬瀏覽器和Selenium模擬瀏覽器。本書所有源代碼已上傳網盤供讀者下載。本書內容豐富,實例典型,實用性強。適合Python網路爬蟲初學者、數據分析與挖掘技術初學者,以及高校及培訓學校相關專業的師生閱讀。
有一半是講解python基礎的,與爬蟲無關。後面把流行的包或框架都講到了,對初學者還是很不錯的本書。

G. 為什麼都說爬蟲PYTHON好

python上手容易,第三方庫多(go現在第三方庫也多)。

如果不考慮採集速度,不用登陸——requests,單線程,簡單的代碼如下:

url = "http://dd.com"

html = requests.get(url)

html.encoding=('GBK') #避免編碼問題 如有報錯,另外測試

print (html.text[:1000]) #輸出1000個字元,避免ide假死。

本人沒學過java c#,不清楚他們兩個一個簡單爬蟲的代碼量,想來最起碼比python的要多。

不過說實話python的工作機會沒有 java c#的多,也就是說別想著花錢去培訓班培訓了幾個月,就能找到月入過萬的工作。

python的運行效率比其他編程語言要差,不考慮效率的情況下,可以用python寫寫小代碼,有錢的可以寫scrapy代碼,堆伺服器做分布式爬蟲。

H. python網路爬蟲可以幹啥

Python爬蟲開發工程師,從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它鏈接地址,然後通過這些鏈接地址尋找下一個網頁,這樣一直循環下去,直到把這個網站所有的網頁都抓取完為止。如果把整個互聯網當成一個網站,那麼網路蜘蛛就可以用這個原理把互聯網上所有的網頁都抓取下來。

網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動的抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻,自動索引,模擬程序或者蠕蟲。爬蟲就是自動遍歷一個網站的網頁,並把內容都下載下來

I. Python之爬蟲框架概述

丨綜述

爬蟲入門之後,我們有兩條路可以走。

一個是繼續深入學習,以及關於設計模式的一些知識,強化Python相關知識,自己動手造輪子,繼續為自己的爬蟲增加分布式,多線程等功能擴展。另一條路便是學習一些優秀的框架,先把這些框架用熟,可以確保能夠應付一些基本的爬蟲任務,也就是所謂的解決溫飽問題,然後再深入學習它的源碼等知識,進一步強化。

就個人而言,前一種方法其實就是自己動手造輪子,前人其實已經有了一些比較好的框架,可以直接拿來用,但是為了自己能夠研究得更加深入和對爬蟲有更全面的了解,自己動手去多做。後一種方法就是直接拿來前人已經寫好的比較優秀的框架,拿來用好,首先確保可以完成你想要完成的任務,然後自己再深入研究學習。第一種而言,自己探索的多,對爬蟲的知識掌握會比較透徹。第二種,拿別人的來用,自己方便了,可是可能就會沒有了深入研究框架的心情,還有可能思路被束縛。

不過個人而言,我自己偏向後者。造輪子是不錯,但是就算你造輪子,你這不也是在基礎類庫上造輪子么?能拿來用的就拿來用,學了框架的作用是確保自己可以滿足一些爬蟲需求,這是最基本的溫飽問題。倘若你一直在造輪子,到最後都沒造出什麼來,別人找你寫個爬蟲研究了這么長時間了都寫不出來,豈不是有點得不償失?所以,進階爬蟲我還是建議學習一下框架,作為自己的幾把武器。至少,我們可以做到了,就像你拿了把槍上戰場了,至少,你是可以打擊敵人的,比你一直在磨刀好的多吧?

丨框架概述

博主接觸了幾個爬蟲框架,其中比較好用的是 Scrapy 和PySpider。就個人而言,pyspider上手更簡單,操作更加簡便,因為它增加了 WEB 界面,寫爬蟲迅速,集成了phantomjs,可以用來抓取js渲染的頁面。Scrapy自定義程度高,比 PySpider更底層一些,適合學習研究,需要學習的相關知識多,不過自己拿來研究分布式和多線程等等是非常合適的。

在這里博主會一一把自己的學習經驗寫出來與大家分享,希望大家可以喜歡,也希望可以給大家一些幫助。

丨PySpider

PySpider是binux做的一個爬蟲架構的開源化實現。主要的功能需求是:

· 抓取、更新調度多站點的特定的頁面
· 需要對頁面進行結構化信息提取
· 靈活可擴展,穩定可監控
而這也是絕大多數python爬蟲的需求 —— 定向抓取,結構化化解析。但是面對結構迥異的各種網站,單一的抓取模式並不一定能滿足,靈活的抓取控制是必須的。為了達到這個目的,單純的配置文件往往不夠靈活,於是,通過腳本去控制抓取是最後的選擇。
而去重調度,隊列,抓取,異常處理,監控等功能作為框架,提供給抓取腳本,並保證靈活性。最後加上web的編輯調試環境,以及web任務監控,即成為了這套框架。

pyspider的設計基礎是:以python腳本驅動的抓取環模型爬蟲

· 通過python腳本進行結構化信息的提取,follow鏈接調度抓取控制,實現最大的靈活性

· 通過web化的腳本編寫、調試環境。web展現調度狀態

· 抓取環模型成熟穩定,模塊間相互獨立,通過消息隊列連接,從單進程到多機分布式靈活拓展
pyspider-arch

pyspider的架構主要分為 scheler(調度器), fetcher(抓取器), processor(腳本執行):

· 各個組件間使用消息隊列連接,除了scheler是單點的,fetcher 和 processor 都是可以多實例分布式部署的。 scheler 負責整體的調度控制。

· 任務由 scheler 發起調度,fetcher 抓取網頁內容, processor 執行預先編寫的python腳本,輸出結果或產生新的提鏈任務(發往 scheler),形成閉環。

· 每個腳本可以靈活使用各種python庫對頁面進行解析,使用框架API控制下一步抓取動作,通過設置回調控制解析動作。

丨Scrapy

Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。

其最初是為了頁面抓取 (更確切來說, 網路抓取 )所設計的, 也可以應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網路爬蟲。Scrapy用途廣泛,可以用於數據挖掘、監測和自動化測試

Scrapy 使用了 Twisted 非同步網路庫來處理網路通訊。整體架構大致如下

Scrapy主要包括了以下組件:

· 引擎(Scrapy): 用來處理整個系統的數據流處理, 觸發事務(框架核心)

· 調度器(Scheler): 用來接受引擎發過來的請求, 壓入隊列中, 並在引擎再次請求的時候返回. 可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列, 由它來決定下一個要抓取的網址是什麼, 同時去除重復的網址

· 下載器(Downloader): 用於下載網頁內容, 並將網頁內容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的非同步模型上的)

· 爬蟲(Spiders): 爬蟲是主要幹活的, 用於從特定的網頁中提取自己需要的信息, 即所謂的實體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面

· 項目管道(Pipeline): 負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。當頁面被爬蟲解析後,將被發送到項目管道,並經過幾個特定的次序處理數據。

· 下載器中間件(Downloader Middlewares): 位於Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。

· 爬蟲中間件(Spider Middlewares): 介於Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。

· 調度中間件(Scheler Middewares): 介於Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。

Scrapy運行流程大概如下:

· 首先,引擎從調度器中取出一個鏈接(URL)用於接下來的抓取

· 引擎把URL封裝成一個請求(Request)傳給下載器,下載器把資源下載下來,並封裝成應答包(Response)

· 然後,爬蟲解析Response

· 若是解析出實體(Item),則交給實體管道進行進一步的處理。

· 若是解析出的是鏈接(URL),則把URL交給Scheler等待抓取。 文 | 崔慶才 來源 | 靜覓

閱讀全文

與python爬蟲穩定性相關的資料

熱點內容
度人經pdf 瀏覽:898
怎麼配置android遠程伺服器地址 瀏覽:956
java程序員看哪些書 瀏覽:939
什麼app可以免費和外國人聊天 瀏覽:793
pdf手寫筆 瀏覽:178
別永遠傷在童年pdf 瀏覽:986
愛上北斗星男友在哪個app上看 瀏覽:418
主力散戶派發源碼 瀏覽:667
linux如何修復伺服器時間 瀏覽:57
榮縣優途網約車app叫什麼 瀏覽:475
百姓網app截圖是什麼意思 瀏覽:225
php如何嵌入html 瀏覽:813
解壓專家怎麼傳輸 瀏覽:744
如何共享伺服器的網路連接 瀏覽:134
程序員簡易表白代碼 瀏覽:168
什麼是無線加密狗 瀏覽:64
國家反詐中心app為什麼會彈出 瀏覽:69
cad壓縮圖列印 瀏覽:104
網頁打開速度與伺服器有什麼關系 瀏覽:865
android開發技術文檔 瀏覽:65