Ⅰ 如何優化 python 爬蟲的速度
從以下的五個方面去進行優化測試:
1、cpu瓶頸的話可以通過分布式的方式來解決 更多的結點去處理分發的任務就好了
2、本地帶寬的瓶頸通過雲伺服器解決(一般都有100MB的方案提供) 定時定量的去購買使用可以節約成本(畢竟不是搜索引擎不會一直開著的)
3、目標伺服器的帶寬限制(基於IP的)通過跨區的伺服器解決 雲伺服器提供商有多個機房的 分散節點所在的機房可以緩解問題 有提供動態ip的就更好了
4、目標伺服器的訪問限制,老漁哥提示搜一下<反爬蟲>策略就差不多了解了 根據自己的編程能力來應對 給兩個庫投石問路 SeleniumPhantomJS 對於驗證碼相關的可以考慮購買服務(有外包的, 最高級別是人肉的一定可以搞定, 量要考慮一下價格不菲)真的不建議自己搞。
目標網站系統比較知名的話(discuz)可以網上搜搜 足夠簡單的話可以用opencv(有python綁定的版本而且跨平台) thredshold(二值化)處理顏色, eroded/dilate(腐蝕膨脹)處理噪點, findContours(查找輪廓)處理字元分割,窮舉旋轉和簡單扭曲再匹配字型檔差不多就可以處理2010以前的簡單二維碼了(當然cpu開銷還是很大的)
5、目標伺服器的帶寬上限限制 這么做的話你的爬蟲就成了攻擊了不討論----以下內容常規的爬蟲可能不會涉
Ⅱ 用python編程讀取TXT時,數據大概有1千萬條,速度很慢如何解決
兩種可選的方式
1:使用yield的懶惰載入,示例代碼如下:
123456789101112
def read_in_chunks(file_object, chunk_size=1024): """Lazy function (generator) to read a file piece by piece. Default chunk size: 1k.""" while True: data = file_object.read(chunk_size) if not data: break yield data f = open('really_big_file.dat')for piece in read_in_chunks(f): process_data(piece)
2:使用iter和一個幫助方法:
123456
f = open('really_big_file.dat')def read1k(): return f.read(1024) for piece in iter(read1k, ''): process_data(piece)
推薦使用第一個。
Ⅲ 用python處理一個1G左右的數據集,運行速度非常慢,怎樣優化
給你幾點個人的建議哈:
考慮拿C或C++重寫.
考慮並行搞,找個hadoop集群,寫成maprece程序跑 放在hadoop上跑,更多數據都不怕.
考慮升級機器,多搞點內存,然後東西盡量放在內存里搞.
考慮程序優化.
希望可以幫助到你哦,這只是我的一個建議哈!
Ⅳ python運行速度慢怎麼辦
yxhtest7772017-07-18
關注
分享
697 2
python運行速度慢怎麼辦?6個Python性能優化技巧
Python是一門非常酷的語言,因為很少的Python代碼可以在短時間內做很多事情,並且,Python很容易就能支持多任務和多重處理。
Python的批評者聲稱Python性能低效、執行緩慢,但實際上並非如此:嘗試以下6個小技巧,可以加快Python應用程序。
關鍵代碼可以依賴於擴展包
Python使許多編程任務變得簡單,但是對於很關鍵的任務並不總是提供最好的性能。使用C、C++或者機器語言擴展包來執行關鍵任務能極大改善性能。這些包是依賴於平台的,也就是說,你必須使用特定的、與你使用的平台相關的包。簡而言之,該解決方案提供了一些應用程序的可移植性,以換取性能,您可以獲得只有通過直接向底層主機編程。
下面這些擴展包你可以考慮添加到你的個人擴展庫中:
Cython
PyInlne
PyPy
Pyrex
這些包有不同的作用和執行方式。例如,Pyrex 讓Python處理一些內存任務變得簡單高效;PyInline可以直接讓你在Python應用程序中使用C代碼,雖然內聯代碼被單獨編譯,但是如果你能高效的利用C代碼,它可以在同一個地方處理每一件事情。
使用關鍵字排序
有很多古老的Python代碼在執行時將花費額外的時間去創建一個自定義的排序函數。最好的排序方式是使用關鍵字和默認的sort()方法。
優化循環
每一種編程語言都強調循環語句的優化,Python也是一樣的。盡管你可以依賴於豐富的技術讓循環運行的更快,然而,開發者經常忽略的一個方法是避免在循環內部使用點拼接字元串。
使用新版本
任何一個在線上搜索Python資料的人都會發現無數關於Python版本遷移的信息。通常,Python每一個版本都針對之前的一個版本做了優化和改進,以讓Python運行的更快。限制因素是你喜歡的函數庫是否也針對Python的新版本做了改進。
當你使用了新的函數庫,獲得了Python的新版本,你需要保證代碼依然能夠運行,檢查應用,修正差異。然後,如果你僅僅是
Ⅳ 優化Python編程的4個妙招
1. Pandas.apply() – 特徵工程瑰寶
Pandas 庫已經非常優化了,但是大部分人都沒有發揮它的最大作用。想想它一般會用於數據科學項目中的哪些地方。一般首先能想到的就是特徵工程,即用已有特徵創造新特徵。其中最高效的方法之一就是Pandas.apply(),即Pandas中的apply函數。
在Pandas.apply()中,可以傳遞用戶定義功能並將其應用到Pandas Series的所有數據點中。這個函數是Pandas庫最好的擴展功能之一,它能根據所需條件分隔數據。之後便能將其有效應用到數據處理任務中。
2. Pandas.DataFrame.loc – Python數據操作絕妙技巧
所有和數據處理打交道的數據科學家(差不多所有人了!)都應該學會這個方法。
很多時候,數據科學家需要根據一些條件更新數據集中某列的某些值。Pandas.DataFrame.loc就是此類問題最優的解決方法。
3. Python函數向量化
另一種解決緩慢循環的方法就是將函數向量化。這意味著新建函數會應用於輸入列表,並返回結果數組。在Python中使用向量化能至少迭代兩次,從而加速計算。
事實上,這樣不僅能加速代碼運算,還能讓代碼更加簡潔清晰。
4. Python多重處理
多重處理能使系統同時支持一個以上的處理器。
此處將數據處理分成多個任務,讓它們各自獨立運行。處理龐大的數據集時,即使是apply函數也顯得有些遲緩。
關於優化Python編程的4個妙招,青藤小編就和您分享到這里了。如果您對python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關於python編程的技巧及素材等內容,可以點擊本站的其他文章進行學習。
Ⅵ 對於Python 的科學計算有哪些提高運算速度的技
一:學會正確使用numpy scipy。 numpy scipy寫好的絕不自己寫,比如矩陣運算等操作,pylab的實現還算不錯。各種函數都有,盡量使用他們可以避免初學者大部分的速度不足問題。因為這些函數大部分都是預編譯好的。
根據我幾年前的測試,python的矩陣運算速度並不慢,(因為你運行的是動態鏈接庫裡面的函數而不是腳本)比mathematica快,和matlab持平。
大部分新手不擅長看文檔啥都自己造輪子是不好的。當然老手把效率寫的比開源庫高也不算啥新聞,畢竟有對特定程序的優化
二:減少for的使用,多使用向量化函數,np.vectorlize可以把函數變成對數組逐元素的操作,比for效率高幾個華萊士。
三:對內存友好,操作大矩陣的時候減少會引起整矩陣對此的操作
四:系統最慢的大部分時候是io,包括上面說的內存操作和頻繁的讀入讀出以及debug輸出。避免他們,在需要實時處理的時候引入類似於gpu的pipeline管線機制或者使用靈活的多線程編程可以起到奇效。
五:matplotlib的繪圖效率並不高明,在使用交互繪圖(plt.ion)的時候減少不必要的刷新率。
Ⅶ 優化Python爬蟲速度的方法有哪些
很多爬蟲工作者都遇到過抓取非常慢的問題,尤其是需要採集大量數據的情況下。那麼如何提高爬蟲採集效率就十分關鍵,那一塊了解如何提高爬蟲採集效率問題。
1.盡可能減少網站訪問次數
單次爬蟲的主要把時間消耗在網路請求等待響應上面,所以能減少網站訪問就減少網站訪問,既減少自身的工作量,也減輕網站的壓力,還降低被封的風險。
第一步要做的就是流程優化,盡量精簡流程,避免在多個頁面重復獲取。
隨後去重,同樣是十分重要的手段,一般根據url或者id進行唯一性判別,爬過的就不再繼續爬了。
2.分布式爬蟲
即便把各種法子都用盡了,單機單位時間內能爬的網頁數仍是有限的,面對大量的網頁頁面隊列,可計算的時間仍是很長,這種情況下就必須要用機器換時間了,這就是分布式爬蟲。
第一步,分布式並不是爬蟲的本質,也並不是必須的,對於互相獨立、不存在通信的任務就可手動對任務分割,隨後在多個機器上各自執行,減少每台機器的工作量,費時就會成倍減少。
例如有200W個網頁頁面待爬,可以用5台機器各自爬互不重復的40W個網頁頁面,相對來說單機費時就縮短了5倍。
可是如果存在著需要通信的狀況,例如一個變動的待爬隊列,每爬一次這個隊列就會發生變化,即便分割任務也就有交叉重復,因為各個機器在程序運行時的待爬隊列都不一樣了——這種情況下只能用分布式,一個Master存儲隊列,其他多個Slave各自來取,這樣共享一個隊列,取的情況下互斥也不會重復爬取。IPIDEA提供高匿穩定的IP同時更注重用戶隱私的保護,保障用戶的信息安全。含有240+國家地區的ip,支持API批量使用,支持多線程高並發使用。