你經常用python來做什麼,你覺得有什麼優點?

蔣鳳君

首先感謝邀請:你經常用Python來做什麼?我們都知道Python可以做很多東西,今天我就我做過的幾個小列子給大家分享一下:

首先上一首Python之禪:

Python是一個非常好用的程序語言,開發的速度非常快。我用Python已經幾年的時間了,從Python2.7到現在的Python3.7,也寫了好多的小程序其中大部分都是爬蟲程序,下面簡單列舉幾個:


1.製作引文分析利器HistCite的便捷使用版本


怎麼又出現了一個序號為零的啊!沒錯,這個又是我後來加上的,哈哈~

對於整天和文獻打交道的研究生來說,HistCite是一款不可多得的效率利器,它可以快速繪製出某個研究領域的發展脈絡,快速鎖定某個研究方向的重要文獻和學術大牛,還可以找到某些具有開創性成果的無指定關鍵詞的論文。但是原生的HistCite已經有4年沒有更新了,還可以找到某些具有開創性成果的無指定關鍵詞的論文。


2. 破解觀看中科大網絡課堂


中國科學技術大學網絡課堂(http://wlkt.ustc.edu.cn/)是一個非常好的平臺,上面彙集了很多知名教授的授課視頻,以及最新的講座、報告、表演視頻,內容還是相當豐富的。但是這些視頻只面向校內IP開放。

所以想在校外看到這些視頻必須破解視頻地址,於是利用Python的requests庫結合BeautifulSoup,用了不到10行代碼就可以獲取真實下載地址。

為了方便沒有安裝Python的電腦使用,簡單寫了一個GUI界面,給室友用,都說還是挺好的用的哈。


這是我自己整理的Python一套學習資源,需要的請私信,私信關鍵詞:學習資料。



3. 獲取中科大研究生系統全部學生姓名、學號、選課信息


登錄中國科學技術大學的研究生綜合系統(中國科學技術大學研究生信息平臺),可以看到每一門課選課的學生姓名和學號,當時就想能不能做一個這樣的系統,來輸入任何姓名(或者學號)就可以看到他所有的選課信息呢?這是選課首頁:

點擊每門課的已選人數鏈接,可以看到所有的選課學生姓名和學號:

下面就利用requests的模擬登錄功能,先獲取全部課程的鏈接,並保存對於的課程信息,然後挨個獲取了所有課程的選課信息。為了保護學生信息,對程序的關鍵部分進行了模糊處理,希望大家諒解。

這樣就獲取了一個巨大的json文件,裡面全部是學生姓名學號選課信息:

有了這個json文件,我們可以寫入數據庫,也可以直接利用json文件來查詢:

為了方便其他人使用,基於上面的數據我開發了一個線上版本:

輸入姓名或者學號都可以直接查詢別人的選課信息:

這個地址就不放出來了。。具體原因你懂的。。。


4. 掃描中科大研究生系統上的弱密碼用戶


基於上面獲得的選課學生學號,很容易利用Python依次模擬登錄研究生,密碼就用弱密碼123456,然後可以獲得身份證號碼等重要信息。

這樣就得到了使用123456作為密碼的用戶信息,所以在此提醒大家一定不要使用弱密碼,希望下面的同學早日修改密碼。


5. 模擬登錄中科大圖書館並自動續借


最近,科大圖書館系統升級了,到處都加了驗證碼,所以下面這個方法直接使用肯定是不行了,不過曾經畢竟成功過哈。以前收到借閱圖書到期通知短信,就會運行一下這個程序,自動續借了,然後就可以再看一個月了。

運行就是這樣的,自動續借成功,看到的鏈接就是每本書的續借鏈接。


6. 網易雲音樂批量下載


終於來一個正常一點的哈,那麼我就直接放代碼吧,可以下載網易雲音樂各個榜單的全部歌曲,批量下載,速度挺快。請注意提前要創建一個名為 “網易雲音樂” 的文件夾。

於是就可以愉快的聽歌了。

上面這些都是在Python3的環境下完成的,在此之前用Python2還寫了一些程序,下面也放幾個吧。初期代碼可能顯得有些幼稚,請大家見諒。


7 .批量下載讀者雜誌某一期的全部文章


上次無意中發現讀者雜誌還有一個在線的版本,然後興趣一來就用Python批量下載了上面的大量文章,保存為txt格式。

# Python 2.7.9


response = urllib2.urlopen(url)


8.爬LOL英雄皮膚高清圖片


爬取了當前比較火的遊戲壁紙,MOBA遊戲《英雄聯盟》,手遊《王者榮耀》、《陰陽師》,FPS遊戲《絕地求生》,其中《英雄聯盟》的壁紙最難爬取,這裡展示爬取《英雄聯盟》全部英雄壁紙的過程。

先看一下最終爬取的效果,每個英雄的壁紙都被爬取下來了:

“黑暗之女 安妮”的12張壁紙:


1.爬蟲流程圖

至此對我要爬取的對象已經有了一定的瞭解,對於具體爬取方法也有了想法,可以設計如下爬蟲流程圖:

2.設計代碼整體框架

根據爬蟲流程圖,我設計瞭如下代碼框架:

這個代碼框架非常容易讀懂,主要就是run()函數,run()函數完成了這樣一套工作:創建LOL文件夾——獲得鍵盤輸入的信息——若信息為“All”則爬取全部英雄壁紙,否則爬取單個英雄壁紙。

3.爬取所有英雄信息

首先我們要解析champion.js文件,得到英雄英文名與id的一一對應關係。

對於官網網站上的所有英雄信息頁面,由於是用 JavaScript 加載出來的,普通方法並不好爬取,我使用了 Selenium+PhantomJS 的方法來動態加載英雄信息。

4.爬取英雄壁紙

得到每一個英雄的信息後,我們就可以開始愉快的爬取它們的壁紙啦~定義get_image(heroid,heroframe) 函數,用於爬取單個英雄的全部壁紙。

運行代碼時注意保持網絡暢通,如果網速太慢可能會爬取失敗。在3兆有線網的網速下爬取全部139個英雄的全部高清壁紙(約一千張圖)大概要3-4分鐘。

《王者榮耀》、《陰陽師》、《絕地求生》等其他遊戲的壁紙也是同樣道理就可以爬取了,據我實踐,《英雄聯盟》的爬取難度是最高的,因此將上述過程弄懂了,自己再編寫代碼爬其他遊戲就易如反掌了。


9.美團網餐飲商家的信息爬取


本次對【常州美食】全部美食推薦 進行一次爬蟲實踐,主要想爬取的信息有:餐廳的名稱、餐廳的評分、餐廳評論數、餐廳的地址、人均消費價格……

最終爬下來的數據保存為CSV如下:

美團使用了反爬蟲機制,要模擬瀏覽器來進行爬取。經過幾次嘗試,發現只對 Cookie 和 User-Agent 進行校驗。

爬到第一組數據之後,接著就是想翻頁的事情。翻頁特別簡單,於是又爬取了商家電話、營業時間等信息。

打包寫個函數

但好景不長,爬到一半的時候被403了。

因為被封了,我們只能用無痕方式來訪問了。看了下,決定採用多個 Cookie 然後隨機調用的方式來避免被封了。最終使用了17個cookie,經過測試,可以高速爬取不被封。

這次的爬取在這裡結束了,但是爬回來的數據可以做很多分析,比如在不同的地段外賣的情況,商家的分佈等等。


9.爬噹噹網各分類所有五星圖書


這次作業選擇爬取的網站是噹噹網,噹噹有比較多的圖書數據,特別是五星圖書,包含了各個領域最受歡迎的圖書信息,對於尋找有價值的圖書、分析好書的銷售情況具有一定的價值。

最終爬取的數據如下,總共10000+行數據:

我想爬取的數據是各分類(小說、中小學教輔、文學、成功/勵志……)下面的五星圖書信息(書名、評論數、作者、出版社、出版時間、五星評分次數、價格、電子書價格等等)。

為了抓各分類下的圖書信息,首先看看點擊各分類的時候,鏈接是否發生變化。經過測試,在不同的分類,鏈接都是不一樣的,事實證明不是JS加載。

打印之後正常返回數據

到這裡基本可以知道,噹噹網的反爬確實不嚴格,我甚至還沒有設置Headers的信息,竟然也可以爬取到想要的數據。但最後在完整的代碼中,還是把headers加上了,保險起見吧。

接下來就是分別爬取每個分類下的圖書信息,以“小說”為例,其實翻頁特別簡單,給幾個比較如下:

翻頁也非常簡單,只不過有一點點坑的是,爬回來的鏈接在代碼中,需要對其翻頁,就需要把鏈接構造出來。對返回來的鏈接進行分析,發現僅僅是中間有四個數字不一樣。於是我把這幾個數據取出來,在連接中傳進去,這樣可以構造通用的鏈接。

構造的翻頁鏈接

接下來就是去抓取不同頁面的信息,沒有異步加載,所以直接用xpath定位就OK。當然中間有一些小地方需要注意的是,每本書所包含的信息是不一樣的,所以用xpath去獲取的時候不一定能獲取到,就會出錯。於是用到try……except語句。

最後總共爬到10000多行數據,對應不同領域的10000多本高評分的書籍,當然會有一些重複計算,比如小說和文學,就有不少書是同時在這兩個類目的。

噹噹網本身沒有什麼反爬機制,所以爬取也比較順利。唯一的小麻煩就是抓回來的鏈接繼續翻頁和其中一些書籍中部分信息缺失的處理。


10.爬拉勾網職位信息


本來就想從事“數據分析師”這個崗位,所以就想了解這個崗位的薪資、要求、以及在我所生活城市的主要分佈點,而拉勾網是權威的互聯網行業招聘平臺,所以爬取拉勾網上的“數據分析師”職位信息有很好的代表性。

最終爬到的數據存在MongoDB中如下:

學習翻頁的時候把引號添上運行時報了JSONDecodeError的錯,本人被引號折騰了許久,分享出來希望大家引以為戒。

踩了兩個坑之後,就開始做課後作業了,沒想到對於一個新手來說困難一茬茬。開始我的思路是找連接,但是採集的數據裡沒有連接,所以就點擊進入詳情頁面,看有什麼規律沒?然後就嘗試著多次點擊各詳情頁面,發現頁面的數字和採集的某個數據能匹配。例如:

某個詳情頁面

找到突破口就開始行動:

DOC

request url equest method

多次嘗試(還是費了一些時間):request url和網址是一樣的,那突破口就算找到,數據是DOC格式,request method :get,那就是又回到了熟悉的戰場了。

思路:遍歷positionId,用format,如:

詳情網頁

xpath方法獲取數據

部分數據:

一次次嘗試,優化後的代碼,這個主要是學習和創作的過程(爬取詳情頁面是我的傑作)。


結語:Python是一個利器,而我用到的肯定也只是皮毛,寫過的程序多多少少也有點相似,但是我對Python的愛卻是越來越濃的。


你認為Python有什麼優點:


1. 簡單 Python的語法非常優雅,甚至沒有像其他語言的大括號,分號等特殊符號,代表了一種極簡主義的設計思想。閱讀Python程序像是在讀英語。


2. 易學 Python入手非常快,學習曲線非常低,可以直接通過命令行交互環境來學習Python編程。


3. 免費/開源 Python的所有內容都是免費開源的,這意味著你不需要花一分錢就可以免費使用Python,並且你可以自由地發佈這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟件中。


4. 自動內存管理 如果你瞭解C語言、C++語言你就會知道內存管理給你帶來很大麻煩,程序非常容易出現內存方面的漏洞。但是在Python中內存管理是自動完成的,你可以專注於程序本身。


5. 可以移植 由於Python是開源的,它已經被移植到了大多數平臺下面,例如:Windows、MacOS、Linux、Andorid、iOS等等。


6. 解釋性 大多數計算機編程語言都是編譯型的,在運行之前需要將源碼編譯為操作系統可以執行的二進制格式(0110格式的),這樣大型項目編譯過程非常消耗時間,而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼運行程序。在計算機內部,Python解釋器把源代碼轉換成稱為字節碼的中間形式,然後再把它翻譯成計算機使用的機器語言並運行。


7. 面向對象 Python既支持面向過程,又支持面向對象,這樣編程就更加靈活。


8. 可擴展 Python除了使用Python本身編寫外,還可以混合使用像C語言、Java語言等編寫。


9. 豐富的第三方庫 Python具有本身有豐富而且強大的庫,而且由於Python的開源特性,第三方庫也非常多,例如:在web開發、爬蟲、科學計算等等


Python雖然有很多優點,但是它也不是完美的,它也有自身的缺點。


1. 速度慢 由於,Python是解釋型語言,所有它的速度會比,C、C++慢一些,但是不影響使用。由於,現在的硬件配置都非常高,基本上沒有影響,除非是一些實時性比較強的程序可能會受到一些影響,但是也有解決辦法,可以嵌入C程序。


2. 強制縮進 如果你有其他語言的編程經驗,例如:C語言或者Java語言,那麼Python的強制縮進一開始會讓你很不習慣。但是如果你習慣了Python的縮進語法,你會覺得它非常優雅。


3. 單行語句 由於Python可以在尾部不寫分號,所以一行只能有一條語句,這可能也算是一個不足吧,不過這真的微不足道。


使用Python的知名網站

國內的:

  • 豆瓣
  • 果殼
  • 知乎
  • Sohu郵箱

國外的:

  • youbube
  • Gmail郵箱
  • Dropbox
等等等等。。。

以上就是我的回答,部分來源網絡和自己整理,對於Python可以做哪方面的工作,優點和缺點,歡迎大家在評論區留言。


菜鳥學Python

人生苦短, 我用Python。

下面結合個人的經歷講下對python的一點粗淺看法。

接觸python是工作中是大約在09年的時候以色列同事用python+tcl做了一個工具,用來給嵌入式的下位機來下載程序, 還有就是scons用來做編譯代碼。

再接下來就是2012年在Coursera上看到,參考下面鏈接, 還跟著學著寫了一個打飛機的小遊戲。

https://www.coursera.org/learn/interactive-python-1

真正熟悉的是在2013年現在公司中需要做一個分析數據帶UI的工具,實在不想用MFC來開發, 主要是效率太低, 於是在網上看了下pyQT/pySide的示例,用pySide+python用一個禮拜的時間完成了這個軟件。 可以將工作中用到的數據進行分析, 能非常直觀的看到數據的特徵,讓工程師很快的做些算法處理,並能及時輔助顯示一些過程和關鍵變量,極大的提高了大家的效率,得到了一致好評。最後這工具可以擴展到量產相關,及相關的產品中。

後來用python+beautifulSoup做了爬蟲去爬點網站數據,方便分析二手房成交趨勢,然並卵。

再後來用python+openCV,做了初步分析圖像的工具。

之間也用python來處理一些文本, excel數據, 分析特徵。

現在也用django來處理一些可以用網頁來呈現一些用excel統計的數據, 將信息彙總。

等等

總之, python 可以做很多事, 關鍵是可以很快的做很多事情, 特別是對有幾年編程經驗的朋友用起來更是如魚得水。個人總結python的優勢主要有以下三點:

1. 開放性

1.1 python開源, 允許很多人基於python來做很多第三方的庫, 可以自由地發佈這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟件中。Python希望看到一個更加優秀的人創造並經常改進。

1.2 正因為他開放和開源, 很多程序員開發了非常豐富的庫

。Python標準庫確實很龐大。python有可定義的第三方庫可以使用。它可以幫助你處理各種工作,包括正則表達式、文檔生成、網頁瀏覽器、單元測試、線程、數據庫、電子郵件、XML、、HTML、密碼系統、GUI(圖形用戶界面)、其他與系統有關的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。

2. 易學

2.1 python非常簡單,非常適合人類閱讀。閱讀一個良好的Python程序就感覺像是在讀英語一樣,儘管這個英語的要求嚴格!Python的這種偽代碼本質是它最大的優點之一。它使你能夠專注於解決問題而不是去搞明白語言本身

2.2 Python既支持面向過程的函數編程也支持面向對象的抽象編程。在面向過程的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在面向對象的語言中,程序是由數據和功能組合而成的對象構建起來的。與其他主要的語言如C++和Java相比,Python以一種非常強大又簡單的方式實現面向對象編程。

3. 可移植性和 可擴展性

3.1 可移植性 由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程序無需修改就可以在下述任何平臺上面運行。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2等等甚至還有PocketPC、Symbian以及Google基於linux開發的Android平臺!

3.2 可擴展性和可嵌入性。如果你需要你的一段關鍵代碼運行得更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫,然後在你的Python程序中使用它們。你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。


黃曼巴2013

爬蟲

做一個關於二手書的創業項目,所以寫了個爬蟲把目標網站的所有書內容全部爬了下來,最終數據量大概幾個G吧。項目已開源在github


自動化

廣告


分享到:


相關文章: