① python爬蟲可以自學嗎
無論是從入門級選手到專業級選手都在做的爬蟲,還是Web 程序開發、桌面程序開發,又或者是科學計算、圖像處理,Python編程都可以勝任。或許是因為這種屬性,周圍好多小夥伴都開始學習Python。Python爬蟲可以自學嗎?(推薦學習:Python視頻教程)
可以的,世上無難事只怕有心人。只要你下定決心,把下面的書籍吃透,動手實踐,相信你的爬蟲技術一定ok。
Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣。它使你能夠專注於解決問題而不是去搞明白語言本身。
Python極其容易上手,因為Python有極其簡單的說明文檔
1、如果你用Python3寫爬蟲,強力推薦《Python網路數據採集》這本書,應該是目前最系統最完善介紹Python爬蟲的書。可以去圖靈社區買電子版。
書的內容很新也很系統,從beautifulSoup,requests到ajax,圖像識別,單元測試。比起絕大多數blog零散的教程要好的多,看完書後就可以去做些實戰項目,這個時候可以去github上找類似的項目借鑒下。
2、國內也有一本講爬蟲的好書,《自己動手寫網路爬蟲》,這本書除了介紹爬蟲基本原理,包括優先順序,寬度優先搜索,分布式爬蟲,多線程,還有雲計算,數據挖掘內容。只不過用了java來實現,但思路是相同的。
Python爬蟲靠系統學習固然好,直接寫一個項目出來效果更加簡單粗暴!(不過自己現在的水平寫出來都是流水一般的面向過程的代碼,代碼的重復部分太多,正在回過頭去學習面向對象編程,學習類和方法的使用。不過,我還是堅定地認為:入門的時候,應該直接簡單粗暴地實踐一個項目。
3、哪裡不會搜哪裡!哪裡報錯改哪裡!相信我你遇到的99%的問題都能從網上找到相似的問題,你需要做的就是寫代碼!搜問題!調BUG!你搜不到解決辦法的情況下,80%的情況是你搜索的姿勢不對,另外20%可能需要你自己動動腦子,換個思路去做。
目前在IT行業里,技術是在新月異的更新中,不斷換代升級,Python行業更是如此。而我們知道,在學校所學專業知識可能很難滿足如今的社會需求。
說了這么多,要是現在的情況不適合你進行自學,或許是你的自製力不夠,或許是你沒有足夠多的時間自學,或許你需要更專業的課程學習,相信專業的課程學習能帶給你更多東西,相信你會收獲更多的友誼和人脈資源。
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於python爬蟲可以自學嗎的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
② 用Python預測「周期性時間序列」的正確姿勢
公司平台上有不同的api,供內部或外部調用,這些api承擔著不同的功能,如查詢賬號、發版、搶紅包等等。日誌會記錄下每分鍾某api被訪問了多少次,即一個api每天會有1440條記錄(1440分鍾),將每天的數據連起來觀察,有點類似於股票走勢的意思。我想通過前N天的歷史數據預測出第N+1天的流量訪問情況,預測值即作為合理參考,供新一天與真實值做實時對比。當真實流量跟預測值有較大出入,則認為有異常訪問,觸發報警。
我放了一份樣例數據在data文件夾下,
看一下數據大小和結構
畫圖看一下序列的走勢:(一些畫圖等探索類的方法放在了test_stationarity.py 文件中,包含時間序列圖,移動平均圖,有興趣的可以自己嘗試下)。
看這糟心的圖,那些驟降為0的點這就是我遇到的第一個坑,我當初一拿到這份數據就開始做了。後來折騰了好久才發現,那些驟降為0的點是由於數據缺失,ETL的同學自動補零造成的,溝通晚了(TДT)。
把坑填上,用前後值的均值把缺失值補上,再看一眼:
發現這份數據有這樣幾個特點,在模型設計和數據預處理的時候要考慮到:
前六天的數據做訓練,第七天做測試集。
消除數據的毛刺,可以用移動平均法,我這里沒有採用,因為我試過發現對於我的數據來說,移動平均處理完後並不能使數據平滑,我這里採用的方法很簡單,但效果還不錯:把每個點與上一點的變化值作為一個新的序列,對這里邊的異常值,也就是變化比較離譜的值剃掉,用前後數據的均值填充,注意可能會連續出現變化較大的點:
平滑後的訓練數據:
採用statsmodels工具包:
對分解出來的趨勢部分單獨用arima模型做訓練:
預測出趨勢數據後,加上周期數據即作為最終的預測結果,但更重要的是,我們要得到的不是具體的值,而是一個合理區間,當真實數據超過了這個區間,則觸發報警,誤差高低區間的設定來自剛剛分解出來的殘差resial數據:
預測並完成最後的加法處理,得到第七天的預測值即高低置信區間:
對第七天作出預測,評估的指標為均方根誤差rmse,畫圖對比和真實值的差距:
可以看到,均方根誤差462.8,相對於原始數據幾千的量級,還是可以的。測試數據中的兩個突變的點,也超過了置信區間,能准確報出來。
前文提到不同的api形態差異巨大,本文只展示了一個,我在該項目中還接觸了其他形態的序列,有的有明顯的上升或下降趨勢;有的開始比較平緩,後面開始增長... ... ,但是都屬於典型的周期性時間序列,它的核心思想很簡單:做好分解,做好預測結果的還原,和置信區間的設置,具體操作可根據具體業務邏輯做調整,祝大家建模愉快:-D。
③ 說說這篇我為什麼從python轉向go
恩看了這篇我為什麼從python轉向go,
看來作者也是 KSO 輕辦公/企業快盤團隊的。作為快盤從無到有時期的工程師之一(總是被瀟灑哥說他們改我留下的 bug ),又恰好是
Python/Go 雙修(大霧其實我是 Rust 黨),其實一開始我是拒絕的,ang ang ang,那就隨手寫一點把。
一段段來吧,首先作者說 Python 是動態語言
python是一門動態語言,不是強類型系統。對於一個變數,我們有時候壓根不知道它是什麼類型,然後就可能出現int + string這樣的運行時錯誤。
在python裡面,可以允許同名函數的出現,後一個函數會覆蓋前一個函數,有一次我們系統一個很嚴重的錯誤就是因為這個導致的。
事實上,如果是靜態檢查,pylint 和 pyflakes 是可以做這件事的,雖然不能和 go
那種靜態編譯型語言比,但也足夠了。如果沒記錯的話,阿通當年是要求全組都在提交前做靜態檢查的。我認為這種問題更多的應該是人員素質上來避免,畢竟蔥頭
也說過,代碼自己寫的就要多回頭看看,看能不能重構,能不能做更好。不是說偷懶不行,但是從中得出 Python
動態特性太靈活,Python:怪我咯看
另外,函數作為第一對象,在 Python 中是 feature,Go 要寫個 mock,簡直虐得不要不要的。
其實這個一直是很多人吐槽python的地方,不過想想,python最開始是為了解決啥問題而被開發出來的看我們硬是要將他用到高性能伺服器開發上面,其實也是有點難為它。
如果沒記錯,無論是輕辦公還是快盤,是重 IO 不重 CPU,最大耗時是數據塊加密那塊,我在的時候是 Java 寫的。另外高性能伺服器選 Go 也是虐得不要不要的,各種小心翼翼避免 GC。大多數極端情況下,pypy 的性能足矣勝任了,我認為這不算充分條件。
python的GIL導致導致無法真正的多線程,大家可能會說我用多進程不就完了。但如果一些計算需要涉及到多進程交互,進程之間的通訊開銷也是不得不考慮的。
其實,Python 有宏可以繞開這個 GIL,但是呢架構設計得好其實可以避免的,到非同步那塊我會說。
無狀態的分布式處理使用多進程很方便,譬如處理http請求,我們就是在nginx後面掛載了200多個django server來處理http的,但這么多個進程自然導致整體機器負載偏高。
但即使我們使用了多個django進程來處理http請求,對於一些超大量請求,python仍然處理不過來。所以我們使用openresty,將高頻次的http請求使用lua來實現。可這樣又導致使用兩種開發語言,而且一些邏輯還得寫兩份不同的代碼。
如果推測沒錯,你們現在還在用五年前寫的 Gateway看那個基於 django route
的流量分發層看四年前我離開的時候已經小范圍的使用 Flask+Gevent Demo 測試過了,無論是性能還是負載都比同步模型的 django
有優勢。如果還是 django
這套的話,我只能說比較遺憾,畢竟當年金山新員工大賽頭牌就是我和幾個小夥伴寫的實時同步在線文檔編輯系統,用的就是這套技術。
因此這是個工程問題,並非語言問題。 Python 提供給了你了這么多工具,硬要選一個傳統的,Old fashion 的,Python:怪我咯看
django的網路是同步阻塞的,也就是說,如果我們需要訪問外部的一個服務,在等待結果返回這段時間,django不能處理任何其他的邏輯(當然,多線程的除外)。如果訪問外部服務需要很長時間,那就意味著我們的整個服務幾乎在很長一段時間完全不可用。
為了解決這個問題,我們只能不斷的多開django進程,同時需要保證所有服務都能快速的處理響應,但想想這其實是一件很不靠譜的事情。
同步模型並非不行,因為 overhead 足夠低,很多業務場景下用同步模型反而會取得更好的效果,比如豆瓣。同步模型最大的問題是對於 IO 密集型業務等待時間足夠長,這時候需要的不是換語言 ,而是提醒你是不是架構要改一下了。
雖然tornado是非同步的,但是python的mysql庫都不支持非同步,這也就意味著如果我們在tornado裡面訪問資料庫,我們仍然可能面臨因為資料庫問題造成的整個服務不可用。
tornado 是有這個問題,但是 gevent 已經解決了。我在 node.js 的某問題下曾經回答過,對於 node
而言,能選擇的非同步模型只有一個,而 Python 就是太多選擇了。另外 pypy+tornado+redis
可以隨意虐各種長連接的場景,比如我給我廠寫過的一個 push service。
其實非同步模型最大的問題在於代碼邏輯的割裂,因為是事件觸發的,所以我們都是通過callback進行相關處理,於是代碼裡面就經常出現干一件事情,傳一個callback,然後callback裡面又傳callback的情況,這樣的結果就是整個代碼邏輯非常混亂。
這個還真不是,如果說沒有 ES6 的 JavaScript,可能真有 Callback hell,但這是 Python 啊!Python
早就實現了左值綁定唉,yield 那姿勢比某些天天吹的語言不知道高到哪裡去了,當然我說的是完整版的 Python3 yield。即便是不完整的
Python 2 yield 用於非同步表達式求值也是完全足夠的,tornado 的 gen.coroutine 啊。
同步形態寫非同步,在 Python 實力強的公司裡面早普及了,這是個工程問題,並非語言問題。當然把這種事怪在 Python 身上,Python:怪我咯看
python沒有原生的協程支持,雖然可以通過gevent,greenlet這種的上patch方式來支持協程,但畢竟更改了python源碼。另外,python的yield也可以進行簡單的協程模擬,但畢竟不能跨堆棧,局限性很大,不知道3.x的版本有沒有改進。
無論是 Gevent 還是 Greenlet 均沒修改 Python 源碼,事實上這貨已經成為了 Py2 coroutine 的標准,加上豆瓣開源出來的greenify,基本上所有的庫都可以平滑的非同步化,包括 MySQL 等 C 一級的 lib。自從用上這套技術後,豆瓣的 Python dev 各種爽得不要不要的。
當我第一次使用python開發項目,我是沒成功安裝上項目需要的包的,光安裝成功mysql庫就弄了很久。後來,是一位同事將他整個python目錄打包給我用,我才能正常的將項目跑起來。話說,現在有了docker,是多麼讓人幸福的一件事情。
而部署python服務的時候,我們需要在伺服器上面安裝一堆的包,光是這一點就讓人很麻煩,雖然可以通過puppet,salt這些自動化工具解決部署問題,但相比而言,靜態編譯語言只用扔一個二進制文件,可就方便太多了。
恰好我又是在開發基於 docker 的平台, docker 還真不是用來做部署這事的。首先, Python 是有 virtualenv
這個工具的,事實上對比包管理和包隔離,Python 比 Go 高得不知道哪裡去了。Python 跟 Git 談笑風生的時候, Go 的 dev
們還得考慮我怎樣才能使得 import 的包穩定在一個版本上(當然現在有很多第三方方案)。Virtualenv + Pip 完全可以實現
Python 部署自動化,所以這個問題我認為是,工具鏈選取問題。畢竟是個十幾年的老妖怪了,Python
啥情況沒見過啊,各種打包工具任君選擇,強行說 Python 部署不方便,Python:怪我咯看
python非常靈活簡單,寫c幾十行代碼才能搞定的功能,python一行代碼沒准就能解決。但是太簡單,反而導致很多
同學無法對代碼進行深層次的思考,對整個架構進行細致的考量。來了一個需求,啪啪啪,鍵盤敲完開速實現,結果就是代碼越來越混亂,最終導致了整個項目代碼
失控。
曾經知乎有個帖子問 Python 會不會降低程序員編程能力,
我只能說這真的很人有關。你不去思考深層次的東西怪語言不行是沒道理的,那好,Go 裡面 goroutine 是怎麼實現的,一個帶 socket 的
goroutine
最小能做到多少內存,思考過看任何語言都有自己的優勢和劣勢,都需要執行者自己去判斷,一味的覺得簡單就不會深入思考這是有問題的。另外,代碼混亂我認為
還是工程上的控制力不夠,豆瓣有超過10W行的 Python 實現,雖然不說很完美,大體上做到了不會混亂這么個目標。
還有,C 寫幾十行搞定的 Python 一行解決這絕對是重大 feature,生產力啊,人員配置啊,招人培養的成本啊,從工程上來說,Python 在這一塊完全是加分項,不是每個項目都要求極致的並發,極致的效率,做工程很多時候都是要取捨的。
雖然java和php都是最好的編程語言(大家都這么爭的),但我更傾向一門更簡單的語言。而openresty,雖然性
能強悍,但lua仍然是動態語言,也會碰到前面說的動態語言一些問題。最後,前金山許式偉用的go,前快盤架構師蔥頭也用的go,所以我們很自然地選擇了
go。
Openresty 用 lua 如果按照動態語言的角度去看,還真算不上,頂多是個簡單點的 C。許式偉走的時候大多數都是
CPP,蔥頭目前我還不知道他創業用的是什麼寫的,不過他肯定沒語言傾向。當年無論是 leo 還是 ufa,一個用 Python 一個用
Java, 他都是從工程實際來選擇使用什麼樣的語言。
error,好吧,如果有語言潔癖的同學可能真的受不了go的語法,尤其是約定的最後一個返回值是error。
這其實是 Go style,無論是 go fmt 還是 error style,Go 其實是想抹平不同工程師之間的風格問題。不再為了一個縮進和大括弧位置什麼的浪費時間。這種方法並不是不好,只是我個人覺得沒 rust 那種返回值處理友善。
GC,java的GC發展20年了,go才這么點時間,gc鐵定不完善。所以我們仍然不能隨心所欲的寫代碼,不然在大請求量下面gc可能會卡頓整個服務。所以有時候,該用對象池,內存池的一定要用,雖然代碼丑了點,但好歹性能上去了。
1.4 開始 go 就是 100% 精確 GC 了,另外說到卡頓啊,完全和你怎麼用對象有關,能內聯絕不傳引用大部分場景是完全足夠的,這樣 gc 的影響程度會最低。實在想用池……只能說為啥不選 Java。
天生的並行支持,因為goroutine以及channel,用go寫分布式應用,寫並發程序異常的容易。沒有了蛋疼的callback導致的代碼邏輯割裂,代碼邏輯都是順序的。
這是有代價的,goroutine 的內存消耗計算(當然1.3還是1.4開始得到了很大的改善,內存最小值限制已經沒了),channel
跨線程帶來的性能損耗(跨線程鎖),還有對 goroutine 的控制力幾乎為 0
等。總之這種嘛,算不上是殺手級特性,大家都有,是方便了一點,但也有自己的弊端。比如我們用 go 吧,經常就比較蛋疼 spawn 出去的
goroutine 怎麼優美的 shutdown,反而有時候把事情做復雜化了。
性能,go的性能可能趕不上c,c++以及openresty,但真的也挺強悍的。在我們的項目中,現在單機就部署了一個go的進程,就完全能夠勝任以前200個python進程乾的事情,而且CPU和MEM佔用更低。
我不嚴謹的實測大概 gevent+py2 能達到同樣邏輯 go 實現的 30%~40%,pypy+tornado 能達到
80%~90%,混合了一些計算和連接處理什麼的。主要還是看業務場景吧,純粹的 CPU bound 當然是 go 好,純粹的 IO bound
你就是用 C 也沒用啊。
運維部署,直接編譯成二進制,扔到伺服器上面就成,比python需要安裝一堆的環境那是簡單的太多了。當然,如果有cgo,我們也需要將對應的動態庫給扔過去。
我們現在根據 glibc 所處的 host 版本不同有2套編譯環境,看上去是部署簡單了,編譯起來坑死你。另外雖然說 disk 便宜,這幾行代碼就幾M了,集群同步部署耗時在某些情況下還真會出簍子。
開發效率,雖然go是靜態語言,但我個人感覺開發效率真的挺高,直覺上面跟python不相上下。對於我個人來說,最好的
例子就是我用go快速開發了非常多的開源組件,譬如ledisdb,go-mysql等,而這些最開始的版本都是在很短的時間裡面完成的。對於我們項目來
說,我們也是用go在一個月就重構完成了第一個版本,並發布。
④ python自動化工具:pywinauto
Pywinauto是完全由Python構建的一個模塊,可以用於自動化 Windows 上的 GUI 應用程序。同時,它支持滑鼠、鍵盤操作,在元素控制項樹較復雜的界面,可以輔助我們完成自動化操作。
我在工作中,主要是使用pywinauto來輔助做一些操作,來完成自動化測試。
先要確認本地有python環境,然後可以通過命令行安裝pywinauto:
如果你是使用ide,可以通過ide安裝,比如我習慣使用pycharm,就可以在Project Interpreter中添加pywinauto:
還有一些手動安裝的方法,但是有點繁瑣,不是很推薦,這里就不介紹了。
Pywinauto要操作應用,首先需要訪問應用,主要有兩種訪問技術。WIN32訪問技術支持MFC、VB6、VCL、簡單WinForms控制項開發的應用,MS UI Automation訪問技術支持WinForms、WPS、QT5、WPF、Store apps、browsers等開發的應用。
win32 API的backend為「 win32 」,MS UI Automation的backend為「 uia 」。
Pywinauto中使用的backend默認為win32。可使用spy++或者Inspect工具判斷backend適合選哪種。例如:如果使用py_inspect的uia模式,可見的控制項和屬性更多的話,backend可選uia,反之,backend可選win32。
這里提一下常用的分析工具:
我個人常用的是py_inspect和spy++。
多數情況下都是需要打開應用的,實現方式也很簡單:
backend參數根據實際情況選擇傳uia還是win32。
start方法其實可以傳兩個參數,除了目標應用的啟動程序地址,還可以傳一個timeout,如果不傳,默認是5s。如果你的目標程序啟動、運行都很慢,可以將timeout設置久一點。
如果要操控的應用已經處於啟動狀態,可以直接進行連接,而連接方式有多種可以選擇:
其中Windows的pid可以通過任務管理器進行查看:
但是我在實際操作的時候使用窗口句柄沒有成功過,可能是我使用姿勢不對,不過還是不推薦使用窗口句柄。
title_re參數傳遞的是應用的部分名稱,class_name可以通過py_inspect查詢到。
前面獲取的對象都是應用,但是我們實際操作的是應用窗口,這里就來介紹怎麼獲取窗口和對話框。
最常用的是通過 title定位:
如果不清楚定位工具中的title在哪個位置,顯示的是什麼,可以通過print_control_identifiers()方法將所有的title都列印出來:
通過title定位的時候需要注意一下中英文的影響,如果是中文,可能會有編碼問題,需要轉碼。
title其實只是window()方法中的一種關鍵字參數,window()方法可以接收很多中的關鍵字參數,且這些參數可以組合使用,例如這樣:
主要參數有這些:
通過top_window()也能比較容易地獲取到窗口,但是這個方法獲取的是 程序的頂級窗口,但可能不是Z-Order中的頂級窗口。所以這個方法使用的時候多調試幾次。
窗口的操作主要有最小化、最大化、恢復、關閉窗口:
控制項的定位其實和窗口的定位基本一致,不太清楚為什麼pywinauto在設計的時候會將窗口和控制項作為一類東西。
相對於前面定位窗口的window()方法,定位控制項的時候推薦使用child_window(),因為直接使用windows()的話,如果控制項不是在當前窗口的子控制項,是子子控制項,就會定位不到,而child_window()方法就不會有這個問題,當然相對的缺點就是當控制項深度太深的時候,執行這個方法會比較耗時。
child_window()方法傳遞的參數和window()是一樣的。
控制項自帶了一些操作方法:
當這些不好用的時候,比如你的控制項不支持點擊,但是你又想點擊一下,可以使用滑鼠操作的一些方法:
測試過程中可能會需要截圖作為證據,截圖的方法也比較簡單:
pywinauto也提供了鍵盤操作的方法:
pywinauto有幾個設置等待時間的方式,這里介紹一個:
這里簡單的演示一下用Wireshark自動抓包並保存:
PC端自動化測試使用到的python模塊主要有pywinauto、win32gui、pyautogui。這里介紹的p ywinauto主要使用到Application類,用於應用程序管理(打開與關閉應用等)、窗口管理(最小化、最大化、關閉窗口)、控制項操作。
pywinauto的功能其實挺豐富的,但是真正用到的其實只是其中很小的一塊,感興趣的同學可以多去官網翻一翻。
⑤ 零基礎小白如何在最短的時間快速入門python爬蟲
Python爬蟲為什麼受歡迎?Python爬蟲應該怎麼學?
如果你仔細觀察,就不難發現,懂爬蟲、學習爬蟲的人越來越多,一方面,互聯網可以獲取的數據越來越多,另一方面,像 Python這樣的編程語言提供越來越多的優秀工具,讓爬蟲變得簡單、容易上手。
利用爬蟲我們可以獲取大量的價值數據,從而獲得感性認識中不能得到的信息,比如:
知乎:爬取優質答案,為你篩選出各話題下最優質的內容。
淘寶、京東:抓取商品、評論及銷量數據,對各種商品及用戶的消費場景進行分析。
安居客、鏈家:抓取房產買賣及租售信息,分析房價變化趨勢、做不同區域的房價分析。
拉勾網、智聯:爬取各類職位信息,分析各行業人才需求情況及薪資水平。
雪球網:抓取雪球高回報用戶的行為,對股票市場進行分析和預測。
爬蟲是入門Python最好的方式,沒有之一。Python有很多應用的方向,比如後台開發、web開發、科學計算等等,但爬蟲對於初學者而言更友好,原理簡單,幾行代碼就能實現基本的爬蟲,學習的過程更加平滑,你能體會更大的成就感。
掌握基本的爬蟲後,你再去學習Python數據分析、web開發甚至機器學習,都會更得心應手。因為這個過程中,Python基本語法、庫的使用,以及如何查找文檔你都非常熟悉了。
對於小白來說,爬蟲可能是一件非常復雜、技術門檻很高的事情。比如有人認為學爬蟲必須精通 Python,然後哼哧哼哧系統學習 Python 的每個知識點,很久之後發現仍然爬不了數據;有的人則認為先要掌握網頁的知識,遂開始 HTMLCSS,結果入了前端的坑,瘁……
但掌握正確的方法,在短時間內做到能夠爬取主流網站的數據,其實非常容易實現,但建議你從一開始就要有一個具體的目標。
在目標的驅動下,你的學習才會更加精準和高效。那些所有你認為必須的前置知識,都是可以在完成目標的過程中學到的。這里給你一條平滑的、零基礎快速入門的學習路徑。
1.學習 Python 包並實現基本的爬蟲過程
2.了解非結構化數據的存儲
3.學習scrapy,搭建工程化爬蟲
4.學習資料庫知識,應對大規模數據存儲與提取
5.掌握各種技巧,應對特殊網站的反爬措施
6.分布式爬蟲,實現大規模並發採集,提升效率
一
學習 Python 包並實現基本的爬蟲過程
大部分爬蟲都是按「發送請求——獲得頁面——解析頁面——抽取並儲存內容」這樣的流程來進行,這其實也是模擬了我們使用瀏覽器獲取網頁信息的過程。
Python中爬蟲相關的包很多:urllib、requests、bs4、scrapy、pyspider 等,建議從requests+Xpath 開始,requests 負責連接網站,返回網頁,Xpath 用於解析網頁,便於抽取數據。
如果你用過 BeautifulSoup,會發現 Xpath 要省事不少,一層一層檢查元素代碼的工作,全都省略了。這樣下來基本套路都差不多,一般的靜態網站根本不在話下,豆瓣、糗事網路、騰訊新聞等基本上都可以上手了。
當然如果你需要爬取非同步載入的網站,可以學習瀏覽器抓包分析真實請求或者學習Selenium來實現自動化,這樣,知乎、時光網、貓途鷹這些動態的網站也可以迎刃而解。
二
了解非結構化數據的存儲
爬回來的數據可以直接用文檔形式存在本地,也可以存入資料庫中。
開始數據量不大的時候,你可以直接通過 Python 的語法或 pandas 的方法將數據存為csv這樣的文件。
當然你可能發現爬回來的數據並不是干凈的,可能會有缺失、錯誤等等,你還需要對數據進行清洗,可以學習 pandas 包的基本用法來做數據的預處理,得到更干凈的數據。
三
學習 scrapy,搭建工程化的爬蟲
掌握前面的技術一般量級的數據和代碼基本沒有問題了,但是在遇到非常復雜的情況,可能仍然會力不從心,這個時候,強大的 scrapy 框架就非常有用了。
scrapy 是一個功能非常強大的爬蟲框架,它不僅能便捷地構建request,還有強大的 selector 能夠方便地解析 response,然而它最讓人驚喜的還是它超高的性能,讓你可以將爬蟲工程化、模塊化。
學會 scrapy,你可以自己去搭建一些爬蟲框架,你就基本具備爬蟲工程師的思維了。
四
學習資料庫基礎,應對大規模數據存儲
爬回來的數據量小的時候,你可以用文檔的形式來存儲,一旦數據量大了,這就有點行不通了。所以掌握一種資料庫是必須的,學習目前比較主流的 MongoDB 就OK。
MongoDB 可以方便你去存儲一些非結構化的數據,比如各種評論的文本,圖片的鏈接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。
因為這里要用到的資料庫知識其實非常簡單,主要是數據如何入庫、如何進行提取,在需要的時候再學習就行。
五
掌握各種技巧,應對特殊網站的反爬措施
當然,爬蟲過程中也會經歷一些絕望啊,比如被網站封IP、比如各種奇怪的驗證碼、userAgent訪問限制、各種動態載入等等。
遇到這些反爬蟲的手段,當然還需要一些高級的技巧來應對,常規的比如訪問頻率控制、使用代理IP池、抓包、驗證碼的OCR處理等等。
往往網站在高效開發和反爬蟲之間會偏向前者,這也為爬蟲提供了空間,掌握這些應對反爬蟲的技巧,絕大部分的網站已經難不到你了.
六
分布式爬蟲,實現大規模並發採集
爬取基本數據已經不是問題了,你的瓶頸會集中到爬取海量數據的效率。這個時候,相信你會很自然地接觸到一個很厲害的名字:分布式爬蟲。
分布式這個東西,聽起來很恐怖,但其實就是利用多線程的原理讓多個爬蟲同時工作,需要你掌握 Scrapy + MongoDB + Redis 這三種工具。
Scrapy 前面我們說過了,用於做基本的頁面爬取,MongoDB 用於存儲爬取的數據,Redis 則用來存儲要爬取的網頁隊列,也就是任務隊列。
所以有些東西看起來很嚇人,但其實分解開來,也不過如此。當你能夠寫分布式的爬蟲的時候,那麼你可以去嘗試打造一些基本的爬蟲架構了,實現一些更加自動化的數據獲取。
你看,這一條學習路徑下來,你已然可以成為老司機了,非常的順暢。所以在一開始的時候,盡量不要系統地去啃一些東西,找一個實際的項目(開始可以從豆瓣、小豬這種簡單的入手),直接開始就好。
因為爬蟲這種技術,既不需要你系統地精通一門語言,也不需要多麼高深的資料庫技術,高效的姿勢就是從實際的項目中去學習這些零散的知識點,你能保證每次學到的都是最需要的那部分。
當然唯一麻煩的是,在具體的問題中,如何找到具體需要的那部分學習資源、如何篩選和甄別,是很多初學者面臨的一個大問題。
希望我的回答對你有幫助,希望採納。
⑥ 請教Python 從 egg 中 import so 文件的正確姿勢
我寫了一個包,用
python setup.py install
安裝後會在site-package目錄下得到一個.egg 的文件,然後可以在 python 中 import 這個包。 問題是,我在setup.py文件中包含了 package_data,是一個名為xxx.so的動態庫文件,這個庫文件在 install 之後也被正確包含進那個.egg 文件里了(把.egg 重命名成.zip 解壓後可以確認)。 但是,如果只用這個.egg 文件,那麼包里的一行代碼
from . import xxx
就會報錯
ImportError: cannot import name 'xxx'
奇怪的是,如果我重命名.zip 然後解壓成文件夾,from . import xxx就能正常載入那個動態庫了。
請問熟悉 Python 的 V 友這種情況該如何解決?謝謝!
我後來在`setup.py`中的`setup()`中加入了一條`zip_safe=False`來生成 folder 而不是 egg,解決了問題,但不知道有沒有更優雅的解決方案?
⑦ poppin和popper各是什麼(解釋細點)
Poppin是Funk舞蹈和街舞(Street Dance)中的一種風格,最初的基本形式是藉由各部位肌肉迅速地收縮與放鬆的技巧,使舞者的身體產生震動的感覺,這種技巧稱作Pop,舞者會以多種不同的動作和姿勢來配合歌曲的節奏進行舞蹈,Popping舞者又被稱為Popper。
Poppin來源於Boogaloo Sam通過The Jerky這種舞蹈產生的靈感所改良的肌肉震動方式Pop。
(7)python的姿勢擴展閱讀
poppin技術風格
1、The Pop
Pop就是一種你震動身體不同部位的動作,這是要靠震動的肌肉來達成的。這是非常需要韻律感的,而且需要配合poppin風格的音樂,可以靠著伸直你的手軸來做pop,也可以將肩膀隆起來做pop,包括胸、腿都可以。
2、The Kick
這個動作常被用來作為機器人舞的舞蹈中,Electric Boogie中很重要的一個部分,這個動作給人一種錯覺,就好像這個人天生就像機器一般,停下來或開始動作的時候都會有一個震動,做這個動作就是要靠震動肌肉,法國的喜劇演員叫這種動作是「Clique」。
⑧ 關於Poping Locking 有什麼技巧
這次要講的是下面幾點的練習:
一、手部的POP
二、腳步(也就是胯部練習)的POP
三、頭部的POP
四、胸部的POP(先不用練習)
前言:POPPIN只要靈活運用四肢就很強了,千萬別在四肢還沒有練成POP的時候就來跳POPPIN,這樣基礎不穩,你永遠都學不好,就算你模仿一個動作跳出來了,但是內行人一看就會覺得不好看,而且POPPIN不是比誰POP的弧度大或者全身都會POP就是厲害;POP的時候出力點要短但是要大,POPPIN的點越輕松就越漂亮,這樣看起來會精而細,很多人練習的時候都會用上肩部突然下拉來帶動各部分肌肉達到的POP,這個練習方法不能說不正確,只是POP起來不太好看而已,這個純屬個人觀點,還有要補充的是大家剛練習的時候是不是會感覺到自己的動作很少,其實這不是一個問題,只要你跳久了,感覺好了,把自己的身體融入到音樂裡面,就算在一首歌曲中重復一些動作也是無所謂的,重要的是感覺,跟著音樂來跳,要合拍,這個就是為什麼施曠老師要說的DANCE TO THE MUSIC,只要你能跟著音樂不停地跳玩一首歌曲的話,看來你也不錯了,呵呵
一、手部練習的方法
1、把兩只手擺成一個很像騎馬的姿勢,手指往下放,要感覺到很輕松的感覺
2、然後你手腕往下壓,可是手指頭部分要讓他往上,手腕向下壓的時候你是否看到你的小手臂有一個凹洞,就是軸那裡有個小洞(反復那樣練習就是了!)
3、練習當中,你看看你手的上半部分,肌肉有沒有爆破出來,要是有,你再看看胸部與手臂相連的那部分有沒有跳動,還有背部的肌肉有沒有跳動?手腕向下壓時,胸前的肌肉稍微有點跳動的感覺是不是,但是要注意的是:不是胸部往前,而是胸肌向上跳動。要是有了上面的幾點,那就正確了。
估計剛開始練的時候背肌部分的跳動可能還出不來,但是要強加練習就OK了。要注意的是練手的時候肩部不要用力,用力的都在手腕上,請各位嘗試一下是否有感覺。
這個手部的練習要配合上腳部的練習才好,這樣才自然
二、腳部POP的練習
腳步的POP其實也就是大家所說的胯下的POP,很多人都把它想的好復雜好難練,其實胯下的練習比手部練習更加容易,只要大家別把它想的太復雜就可以了,盡量的簡單,越簡單越好,下面就跟著我的方法來練習一下,很快就有點功效了哦,注意的是利用膝蓋。
1、你先站起來,然後膝蓋向前稍微彎曲,有點像要坐下的感覺。
2、你從第一點所說的,慢慢從這個動作站起來,記得是慢慢的把腳打直,但別用力。
3、慢慢的站起來,腳快要站直的時候,你突然在這里用力快速把腳打直(也就是膝蓋往後),這樣反復練習是不是達到跨下的POP了呢?記得千萬別屁股用什麼力或者往裡收,那是不正確的練習方法,大家盡量想的越簡單越好
這個腳部的練習要配合上手部的練習才好,這樣才自然
三、頭部的POP
其實這個頭部分的練慣用打字的方法真的很難解釋清楚,下面就打個比方讓大家按這個來練習吧!
其實也就是頭部往45度角的方向用力來達到的一種效果,可能我那麼說大家都有點迷惑,我就打個比喻吧
1、我們經常在路上碰見熟人的時候都會叫一聲「喂」,記得,頭部的POP有點像「喂」的一聲,怎麼說呢?當你在叫別人「喂」的時候,頭部是不是有點稍微向上點了一下,就是那一「點」其實就是POP了,只是你要用力而且要短時間內完成而已。注意是先保持原來輕松的表情,突然叫別人喂的一聲,反復練習就會學會頭部的POP,是不是有點感覺了呀!但是下顎別用力,用力是在後腦勺,CAN YOU FOLLOW ME?
四、胸部的POP
為什麼我在前面說胸部不用練習呢?其實也不是沒有道理,等你練會我以上說的三點以後,你的胸部自然就會POP了,你不信你就試一下,呵呵,所以這個不用練習哦(但是真正單一的胸震是需要練習的,練習方法第一把腰挺直了,你會感覺到腰有點酸,注意提胸,然後慢慢放鬆的時候突然來個POP,但是這個POP不是腰出力,腰挺直了只是為了POP的時候更漂亮,詳細講解的話下次再說吧!大家先練好我前面說的)
最後要補充的是國內一級POPPER:BOKY的一些觀點,很有用的,大家仔細看看:
1)手臂上的POP主要用到的是三頭肌和橈側腕短肌。可以嘗試做這樣的動作:五個手指扶住牆壁,然後用手心的位置去推牆(注意肘關節自然彎曲,不要用力去大直)。在這個動作里用到的肌肉群,大致就是手臂上的POP位置。
2)胸部的肌肉是垂直向上走。因為需要注意的是,很少爆點會利用伸展關節來完成。所以反過來說,如果胸大肌不是向上走,勢必會牽連到脊椎關節的彎曲。另外,胸肌的POP和頸部肌肉的POP一般是同時完成的。可以這樣理解。胸肌往上走的時候,頭部保持原來的位置或者略微下壓,這樣自然就壓迫到脖子上的肌肉了。另外,怎麼樣去鍛煉頸部的肌肉呢?大家嘗試發兩個音,一個是「噢」,這個口型張到最大的時候,很自然的可以綳緊胸鎖乳頭肌。另外一個是「哈」,最大幅度去做的這個口型,可以綳緊肩胛提肌和肩胛舌骨肌。這三塊肌肉是做頸部很重要的POP來源。
3)腿部的POP以前說過,阿KING也解釋的很好。我就不多說了。這是唯一的需要利用關節才能完成的POP。因為膝蓋自然彎曲的情況下很難綳緊大腿上的各部分肌肉。另外需要補充的是,下盤的POP不單單只有*大腿肌來完成。在一些特定的動作里,也會用到臀部和後腰肌肉上的POP。
介紹文中提及的各部分肌肉
肱三頭肌
位於上臂後麵皮下。其功能是使手臂伸直和拉向後方。可通過臂屈伸,屈臂下拉,窄握仰推,各種手臂屈伸動作,劃船來訓練。
胸大肌
位於胸前皮下,為扇形扁肌,其范圍大,分為胸上肌和胸大肌兩部分。其功能是使上臂向內、向前、向下和向上;臂部向內旋轉。可通過所有角度的卧推;所有角度的飛鳥;雙杠臂屈伸;仰卧上拉;俯卧撐;重錘雙臂側下拉來訓練。
胸鎖乳突肌
這是位於頸部淺層最顯著的肌肉,其功能是使頭和頸向側曲;頭和頸部旋轉,頸向前或後彎屈。可通過戴練頸帽動作;摔角的角力橋;助力和自我抗力動作來鍛煉。
大腿肌配布於股骨周圍,分為前、後和內側三群。
1.前群 有縫匠肌和股四頭肌。
(1)縫匠肌 為全身最長的肌,呈扁帶狀,起自骼前上棘,斜向內下經大腿前面達膝關節內側,止於脛骨上端內側面。
作用:屈髖關節和膝關節,並可使已屈的膝關節旋內。
(2)股四頭肌 為全身體積最大的肌,有四個肌頭,分別稱為股直肌、股內側肌、股外側肌和股中間肌。四個肌頭向下形成一總腱,覆蓋髕骨前面,再向下形成髕韌帶,止於脛骨粗隆。
作用:為強有力的伸膝關節的肌,股直肌還能屈髖關節。
2.後群 包括股二頭肌、半腱肌和半膜肌。
作用:後群肌主要屈膝關節、伸髖關節。當屈膝時,股二頭肌可使小腿旋外,半腱肌和半膜肌能使小腿旋內。
3.內側群 位於大腿內側,有5塊,為恥骨肌、長收肌、短收肌、大收肌和股薄肌。
三角肌
位於肩部皮下。它是一個呈三角形的肌肉,肩部的膨隆外形即由該肌形成。兩側肌肉纖維呈梭形,中部纖維呈多羽狀,這種結構肌肉體積小而具有較大的力量。它的功能是使手臂舉到水平位置;手臂分別向前、中、後舉到一定方向的高度。可通過各種啞鈴和杠鈴推舉、卧推(前束),啞鈴上舉到前、後和背後;引體向上來訓練。
[編輯本段]POPPIN的動作名稱
Poppin動作名詞大介紹,獨家中文名詞大釋疑!對Poppin有興趣的舞迷們不可不看!
☆ The Pop
Pop就是一種你震動身體不同部位的動作,這是要靠你震動你的肌肉來達成的。這是非常需要韻律感的,而且需要配合popping風格的音樂,你可以靠著伸直你的手軸來做popping,你也可以將肩膀隆起來做popping,而身體的其它部位都保持直立。
☆ The Lock or Locking
Locking就是身體做一些很快的動作,然後在一個動作的時候停住,一個形容Locking 動作最好的解釋就是:你有玩過那種小小的齒輪玩具嗎?當你上緊發條讓他動作時,他真的動的很快,可是發條鬆了,他又一下子馬上停了下來,回到原狀,這樣看起來是不是很像Locking 呢?(編者按:個人認為Locking應該和Electric Boogie,Boogaloo分開,因為他給人的感覺並不是自然的,比較像是快速)
☆ The Tick
這個動作常被用來作為機器人舞的舞蹈中,是Electric Boogie中很重要的一個部分,這個動作給人一種錯覺,就好象這個人天生就像機器一般,停下來或開始動作的時候都會有一個震動,做這個動作就是要靠震動肌肉,法國的喜劇演員叫這種動作是「Clique」。
☆ The Floats or Glides
Float或是 Glide給人 種錯覺,好象你的腳再走路時有一種特定的程序,這個動作給人一種感覺好象你想往東走,但實際上你的腳卻是往西走一樣,最著名的舞步就是Michael Jackson 跳的「Moon Walk」,這是一個老的喜劇演員的把戲,就像明明要往前走卻又往後退。
☆ The SlowMo
這個舞蹈動作做起來就像是你在電視上看到的慢動作回放一樣,通常舞者會把這個動作和MOON WALK一起做。
☆ The Wave
這是從四肢開始的波浪的動作。他給人一種錯覺就像是有一股看不見的力量穿過你的整個身體,從一個地方開始,穿過手掌,手臂,整個身體最後停在你的腳。波浪的動作是一個標準的動作,包含在每一個舞蹈的例行動作中。不像其它的舞蹈動作,這個動作是流暢連貫的動作,應該是有精神的或是充滿律動感的。波浪的動作的確從Pop中截取了不少的風格,但是你和Pop做一個比較,做Pop時如果有一個路徑環繞全身,做起來會更加順暢。
☆ The Mannequin or Robot (Robotics)
這是一個以經存在很久的機械舞蹈風格,他就像是模仿一個展示用的假人在現實生活中動了起來,然後從Mannequin style中又分離出兩個動作。一個動作是是舞者就像是被線牽引的傀儡一般,行動不自由,無法自主,人被其它人所牽引著,你可能曾在電視上看過喜劇演員做這樣的表演,最經典的動作就是同手同腳向前移動,再表演中這筆不同手不同腳一起移動常被使用。另一個風格就是機器人,這個動作就是你的四肢做動作時被一個固定的速度所控制,然後突然停住或是用Tick停住,就像是只有機器才會做的動作。通常在一個時間里,你只移動身體的一個部分,做的就好象是你被一個計算機程序所控制住一樣,動作要做的很制式化。Mannequin:這個字指的是展示用的假人模特兒。
☆ The King Tut (埃及手)
這個動作就好象是掛在牆上埃及的壁畫及宮殿般的感覺,它包含了擺手部的動作,肩膀和手軸成90度,你的前臂可能是上或下,彎曲或扭轉,可能遠離你或靠近你,然後你的手可能要循環的上下或是循環的扭轉,這要和Tick一起做,就像機器人舞蹈的風格一樣,每一個動作是分開的。
☆ The Lean
這又是另一個相當受歡迎的喜劇演員的花招,他給人一種錯覺好象人倚靠著某一樣東西,可是這樣東西實際上卻又不存在,就像看不見的鋼琴就是一個例子。
☆ The Collapse
通常和Mannequin結合一起做,這個動作做起來就像是一個輪胎被泄了氣一樣,或者是像一個被剪斷了線的傀儡。
☆ The Heartbeat
這是一個很受歡迎的動作,你把手放在外套或T恤底下,然後把衣服往前推,這樣看起來就像是你的心臟正在胸腔里跳動一樣,通常舞者會一邊做動作一向前走,這會給人一種錯覺好象是你的心跳推著人前進一樣。
☆ The Bicycle
腿部的動作給人一種印象像是你在騎腳踏車一樣,這是另一個喜劇演員常用的小花招,這個動作通常會結合手的往前放的動作,這給人的感覺像是你整抓著腳踏車的手把。
☆ The Toe/Heel walk
這個動作通常和Mannequin dance style一起做,是一個很棒的方法可以讓你在整個舞蹈地板上做動作,他的動作包含了:用一隻腳的腳指做旋轉,再配合另一隻腳的腳踝一起,然後在將重量移轉到另外的腳指及腳踝上,然後一直做,做的好的話,動作會非常流暢,看起來就像是你滑過整個地板一樣。
☆ Cobra(King Cobra)
舞者用一隻手做波浪的動作傳到另一隻手去,然後再把他送回來,但是只用到肩膀。(如果你看名叫「Breakin」的電影,在一開始的尬舞中,就有幾個人做這個動作,你可不能錯過.)
Body Effects就是用身體去做模仿的效果。
☆ Animation
用身體去做像影片般,一格一格的分格動作。
☆ Three Dimensional Tickin』
比depth tickin』更多元化,包括了在同一個tick中,身體做常、寬、高三D般的效果。
☆ Pausin』
停止或暫時停頓一個動作短暫的時間。
☆ Electric Shock
這個動作看起來就像是有一股電流通過身體一般。
☆ Water Wave
緩慢做波浪的動作並搖動身體,創造像水波般的效果。
☆ Internal Moves
動作就像是滲透進身體或是像從身體中發出的一般。和tickin』、wavin』不一樣,因為這兩者是穿過身體。
☆ External Moves
動作就像是從身體外部來的感覺一樣。Cobra,Octopuss,King tut,Python等這些動作都是。
☆ Hittin』
持續的收縮肌肉。基本上是放鬆和收縮頸部、手部、胸部和腿部的肌肉。
☆ Hittin』style
Hittin』風格的舞蹈包括有: Boogaloo,Boogie,Poplock,Strutin,Puppet,Robotic,freestyle,bopping等這些都是。
☆ Glides/Floats
這個動作就像是舞者在空中走路一樣。Moonwalk,Backslide,Side slide,S walk等這些都是
動作集合
Air posing 空氣中的動作 Animation 動畫
Bopping 動感機器人 也可叫Dancing Robot "BOPPIN ANDRE"為創始人
Crazy Legs 瘋狂腳 Popin" Pete在 80年代創立的風格
Cobra 眼鏡蛇
Dime Stopping 停 不同與pop跟hit robot用的比較多
Floating/Gliding 漂浮 滑行 月球漫步
Hittin 肌肉持續收縮做動作
Puppet 木偶人
Saccin 行走的風格
Scarecrow 稻草人 靈感來自於電影****師
Snaking 蛇
Spiderman 蜘蛛人 Poppin" pete 在90年代創造的風格
Strobing 像相機快照一樣
Strutting 一格一格的動作 像DVD快轉那種
Tut 埃及手
Shadow Boxing skeet rabbit的style
Egyptians Boogaloo基本動作Sam創造的
Master Flex Boogaloo基本動作Sam創造的
E.T. 外星人的效果 poppin pete在90年創立的 主要用膝蓋
Speed Control 速度的控制
Sleepy Style 要睡著的style Poppin Pete在 90年代創立的
Ground Moves 地板的動作
Poppin 肌肉震動
Boogaloo 每個人有每個人的理解 說法很多
Wavin 電流
Leg Rolls 腿的旋轉
Robot 機器人
Tickin 連續的pop
Toy Man 玩具人
Walkouts Boogaloo的基礎 sam創立的強調boogaloo的立體感
Fresno Boogaloo的基礎 sam創立的強調boogaloo的立體感
power wave 用的多一些力量的wave
Isolation Poppin style 必須具備的局部控制
Centipede 在地下 像蜈蚣一樣在走
Slow Move 慢動作
Pop Control pop 控制