一些讓你敢到相見恨晚的Python庫
下面給大家引薦幾個我用過的,而且格外好用的項目,而不是簡略的貼一下awesome Python。信任很多人看完awesome Python今后,僅僅簡略的收藏一下,并沒有很多協助。
1. yagmail
Python官網上發郵件的例子(Examples - Python 2.7.13 documentation),大家感受一下。反正我看到這一堆的import就已經被嚇退場了。
如果使用yagmail,發送一個帶附件的郵件,只需要2行代碼:
2. requests
requests很多人都推薦過了,不過可能一些同學感受不到requests到底好在哪里。我們就以官網的例子為例簡單說明,在沒有request之前,如果我們要請求https://api.github.com/user,需要像下面這樣:
用requests以后,做同樣的事情,我們可以這樣(注意,前3行代碼等于上面一整段代碼):
3. psutil
psutil是用來獲取操作系統監控以及進程管理的,如果你正在寫一個監控系統(或腳本),趕緊去試試。這么說吧,我曾經使用psutil把網易內部的一個監控模塊,從1000+行重構到了100+行。
我這里推薦的幾個庫,可能yagmail對最多人有用。而psutil,對專業的人士最有用。如果你要寫一個監控系統,不使用psutil的話,只能直接去/proc目錄下讀取想用的文件進行計算,或者執行iostat、vmstat、df等Linux命令獲取命令輸出,不管哪一種方法,都要處理很多繁瑣的細節。有了psutil以后,就輕松多了。貼段代碼大家感受一下:
此外,使用越來越廣泛的監控工具glances(如果沒用過,要不現在就是試試?),就是用psutil收集相關數據的。
4. BeautifulSoup
如果你寫爬蟲,還在用XPath解析HTML,那趕緊用用BeautifulSoup,比XPath好用一百倍;如果你還在用正則表達式從HTML中獲取內容,BeautifulSoup能讓你好用到哭。(補充:評論里大家都說XPath更好用,難道是我思維方式和大家不一樣?)
BeautifulSoup是用來解析HTML的,特點就是好用,有人吐槽BeautifulSoup慢?我不在乎BeautifulSoup比XPath慢多少,我只知道,我的時間比機器的更寶貴。
例如,要找到頁面中所有的links,如下所示:
例如,我在編寫知乎的爬蟲的時候,對于每一個用戶的”關注”頁面,對于每一個關注對象,有如下的tag:
所以,解析單個關注的用戶代碼如下所示:
有了BeautifulSoup以后,爬蟲操作就變得特別簡單了。臟活累活別人都幫忙做好了。
5. utils
除了開源的庫以外,還有些開源項目的DataStruct.py helper.py utils.py文件,也值得看一看。里面很多好東西,都是可以直接拿過來用的。
我舉幾個例子。
- requests中的CaseInsensitiveDict(https://github.com/kennethreitz/requests/blob/v1.2.3/requests/structures.py#L37-L109),大家看名字就知道什么意思了,我就不多說了。
- werkzeug中的LocalProxy、ImmutableList、ImmutableDict(https://github.com/pallets/werkzeug/blob/master/werkzeug/datastructures.py#L128),其中ImmutableList和ImmutableDict大家一看就知道是什么意思,這里要說的是LocalProxy,使用LocalProxy,分分鐘實現代理模式。
- web.py的utils.py中各個函數和類都值得看一看(https://github.com/webpy/webpy/blob/master/web/utils.py#L48),不但可以了解好用的函數和數據結構,而且,還能夠學習一下高手的Python代碼。例如:
ps:web.py的作者是亞倫·斯沃茨(Aaron Swartz),一位年少成名的計算機天才,聞名交際網站Reddit聯合創始人。致力于網絡信息敞開,卻因涉嫌不合法侵入麻省理工學院(MIT)和JSTOR(全稱Journal Storage,存儲學術期刊的在線體系)被指控,將遭到最高35年拘禁和100萬美元罰款。該案正在認罪辯訴期間,而亞倫·斯沃茨卻于2013年1月11日在其紐約布魯克林的寓所內,用一根皮帶上吊自殺,尸身隨后被女友發現,年僅26歲。
馬哥學習交流群