仲介交易 SEO診斷 淘寶客 雲主機 技術大廳
本文是面向SEO人群的Python程式語言入門教程,也適用于其他沒有程式基礎但想學習些程式,以解決簡單的實際應用需求的人群。 在後面會儘量用最基礎的角度來介紹這門語言。
本來打算從網上找一篇入門教程,但因為Python很少是程式師的第一次接觸程式所學的語言,所以網上現有的教程多不是很基礎,還是決定自己寫下這些。
如果沒有程式基礎的話,可能會覺得本文涵蓋的內容有點多。 對照大學裡面常教的C語言的教學速度,本文大約有四五個課時的內容;對照網上程式類的視頻教程,大致相當於兩三個小時的內容;對於翻一本程式書籍,大約相當於翻一個小時書。 也因此,如果有深入學習的打算的話,為了效率還是推薦看書。
如果暫時不能理解本文中的一些內容也沒關係,因為都是一些經常會用到的基礎知識,在實際編寫代碼的過程中會一直遇到。 後面會大約有兩三篇關於實用代碼編寫的文章,可以選擇那時再對這些知識加深印象。
但如果是覺得技術對於SEO沒有必要而對本文沒有興趣的話,試問打算將SEO作為自己多久的職業?如果打算真正將它做好的話,在至少有上萬小時需要用去的精力裡面,從裡面抽幾十幾百小時去學習些技術應該是合情合理的。
若因文章有什麼沒表述清楚而導致無法理解,請務必幫忙提出。 第一次寫程式類的較完整的教程,難免有疏漏之處。
為什麼學習Python
如果決定學習一些技術來輔助SEO的話,對於程式語言至少在我看來Python可以算是首選。
其一、Python入門相對簡單
如果誰在大學課程裡面接觸過C語言但對程式瞭解不多的話,或許會覺得程式就是像C那麼麻煩,其實不然,學了具有美感的Python代碼以後就會知道C代碼又臭又長。 就算完全沒接觸過程式也沒關係,Python本身就適合作為程式的入門選擇。
我雖然很早就有寫程式,但那時是興趣使然,從未深入過,正式接觸程式是接觸SEO以後的事情,大約學了幾個小時以後就能寫些簡單的採集程式,到現在只要能想到需求就很少有技術無法實現的。 所以沒什麼有基礎沒基礎的問題在,無論什麼的基礎都是需要自己打下的。
其二、Python代碼非常靈活
來看一段非常常用的代碼示例,如果沒有程式基礎的話會看不懂這些代碼,但暫時沒關係,看程式碼數也能對比出代碼簡潔性。
PHP:
<?php $list_1 = array(1,2); $list_2 = array(); foreach ($list_1 as $current) { array_push($list_2, $current+1); } print_r($list_2); ?>
Python:
1 2 3 list_1 = [1,2] list_2 = [current+1 for current in list_1] print list_2
Python代碼的第2行叫做「清單推導」,它提供了不少像這樣便利的語言特性可以使得代碼非常簡潔。
儘管語法靈活並非總是好事,靈活的代碼寫法意味著每個人寫出來的代碼往往風格迥異,會把團隊成員的水準差距拉大而不利於團隊開發。 但對於小型SEO應用需求一般都是個人開發,此時代碼的書寫效率比起團隊合作性而言更重要。
其三、Python使用廣泛
Python在程式語言裡面受歡迎的程度大約是5-10位左右。 排在其之前的有C#, JAVA, PHP等,但很多時候不是因為它們更強大,而是因為前面提到的原因,它們的代碼顯得相對不是很靈活從而適合團隊開發,所以才更受歡迎。
一般來說,多數提供API的網路服務都會提供Python介面(如百度網盟、Amazon雲服務等),而另一些比Python某些方面更強的語言則沒有這麼廣泛的支援度,比如代碼更加靈活一些的GO語言。 (多數Web服務的API介面有:C#、PHP、JAVA、Python、Ruby、Perl,所以一般情況下選擇其中至少一種語言學習)
Python的模組也非常多,有許多既有模組意味著可以少做很多事情。 比如下載一個網頁,在很多語言裡面都需要5-10行代碼,而Python僅需兩行:
import urllib2 print urllib2.urlopen('HTTP://g.cn/').read()
另外有意思的是以前Google限制過自己內部使用Python語言進行開發。 原因有二:一、因為Python編寫效率高,之前被其過多的運用;二、Python語言的執行效率較慢。 而對於SEO,卻正是最需要注重編寫效率而一般無需在意執行效率的。
至此廢話了不少,但興趣往往是學習的最好動力,希望沒有白白廢話。
安裝環境與配置
Python程式和普通程式略有不一樣,通常情況下沒有可以直接在Windows下面按兩下運行的exe檔,雖然並非無法編譯成exe但相對較麻煩,實際運用中很少會去如此操作。
Python程式就是一段文字代碼,保存到尾碼名為.py的檔裡面。 在電腦安裝了Python的運行環境以後,方可以運行py檔。 (其實很多程式都依賴于運行環境,最常見的是.net Framework,只不過這個在Windows上預裝了,一般感覺不到罷了)
對於Windows系統需要安裝運行環境,Linux系統則一般自帶Python無需配置。
Python運行環境的下載連結為:HTTP://python.org/getit/
在這個頁面上,通常是在第一個下載連結,尋找並下載:Python 2.7.x Windows Installer (Windows binary — does not include source)
需要注意的是下載的最好是2.7.x版本(x代表任意數值,2.7這個大版本都是類似的),而Python 3以上的版本和先前版本區別較大,對於初學者不建議使用。
下載後安裝,沒什麼需要特別注意的地方。 一般安裝在預設路徑,即c:\python27\,不要將之放在目錄層級很深的資料夾,不然運行的時候比較麻煩。
作業系統
前面已經提到,Python可以在Windows及Linux系統下運行,它還支援更多系統,如Mac等,甚至也可以在越獄過的iPhone等設備上面編寫並運行Python程式。
但因為Python的一個主要強大之處在于其模組的支援,有了模組就可以方便的做很多事情。 而模組的配置在Windows等系統裡面往往有些麻煩,Linux往往容易得多,所以過了入門階段以後,推薦在Linux環境下進行開發。
Linux環境的搭建有三種選擇:
1.本機安裝Linux系統。 適合在Linux下長期工作的人,需要對Linux的基礎知識有一定的瞭解。 主要缺點是總有些Windows裡面才能運行的程式,偶爾需要切換系統。 我主要是在這樣的環境下工作。
2.在Windows裡面安裝VMware等虛擬機器,然後在虛擬機器裡面安裝使用Linux。 適合初學者,但因為虛擬機器的關係,除非電腦配置很好,不然兩邊系統的運行效率都會比較低下。 且虛擬機器不利於塑造學習Linux的氣氛,因為用虛擬機器的時候碰到問題,多數人會傾向用Windows解決而非用Linux,那麼就較難熟悉它。 個人不怎麼推薦這種選擇。
3.買一台Linux的VPS,使用SSH遠端操作。 主要優點是在工作及家裡都可以很方便的連上伺服器,不用每天把程式、資料等隨著U盤之類的帶來帶去;也可以在不影響Windows使用的情況下使用Linux。 但缺點同樣明顯,沒有圖形介面對入門者不友好;因為網路延時的關係,寫代碼的效率經常受影響等等。 對於初學者,個人比較推薦這個解決方案。
至於VPS的購買,推薦Linode或PhotonVPS等,大約每月50-150RMB能買一個可以用來書寫運行普通程式的VPS,也可以同時在上面放兩三個小網站。
Linux有很多發行版本可以選擇來安裝,如Ubuntu,Fedora等。
對於在本機上搭建Linux環境時,因為擁有圖形介面,若是工作為主要目的,推薦安裝Fedora。 它和伺服器最常用的CentOS系統同出Red Hat系,很多地方比較接近,熟悉它對於熟悉CentOS也有較大助益。
如果在本機安裝,且有時會將Linux系統用作觀看視頻等娛樂之用的話,推薦Ubuntu,它在日常使用方面略勝Fedora一籌。
對於VPS上面搭建Linux,則推薦CentOS系統,因為它使用最廣泛,所以各種軟體對其的支援往往更好。
對應Linux環境解決方案1,一般使用U盤載入iso鏡像進行安裝;對於解決方案2,一般直接由虛擬機器軟體載入iso鏡像安裝;對於解決方案3,一般VPS都可在其後台直接選擇作業系統無需自己安裝,比較方便。
編輯器
書寫代碼前面首先需要有一個合適的編輯器。 儘管Windows自帶的記事本也不是不可以使用,但編寫程式時會非常不順手。
對於Windows系統的編輯器,較簡單的我比較推薦Notepad++,當然也可以選擇更流行的UltraEdit。
也可以使用IDE,這是用來開發軟體專案的集成環境的統稱,它在開發大型專案時具有較大優勢,但在處理小型需求時可能顯得略有不靈活。 IDE裡面比較好的有Eclipse,加上PyDev外掛程式即可開發Python程式,它在Windows和Linux裡面皆可以使用。
如果平常需要書寫的代碼量很大,或是對自己的學習能力較有自信的話,對於Linux推薦Vim,Windows則推薦gVim(Vim的圖形介面)。 它和普通編輯器書寫代碼有極大的不同之處,往往需要幾天的學習時間與幾個月的熟練時間,但書寫代碼的效率一般可以快不少。
開始編寫程式
Hello World!
「Hello World」最早的出處是電腦領域的最經典書籍之一——《The C Programming Language》,後來被廣泛沿用。 」Hello World」程式的目的只是在螢幕上輸出一個」Hello World」,儘管很簡單,當它作為每個人第一個所寫的程式時還是有著較大的意義。 #p#副標題#e#
打開編輯器,輸入一行:(友情提示:複製粘貼不利記憶)
print "Hello World!"
完畢。 保存檔到c:\hello.py(路徑隨意)。
按Win + R快速鍵,打開「運行」,輸入CMD,回車,打開命令列提示符。 (Linux圖形介面的話是Ctrl+Alt+T來打開終端)
輸入:
(Windows)
c:\python27\python.exe c:\hello.py
(Linux)
python 路徑/hello.py
可以看到程式運行並顯示了一行「Hello World!」。 至此,第一個程式完成了。
變數與賦值
1
s = 'Hello World!' print s
程式輸出:
Hello World!
上述代碼,s稱為變數;第一行所做的操作叫做賦值。
再來個例子加深印象:
2 3 a = 1 b = 2 print a + b
程式輸出:
3
函數
def hello(name): s = 'Hello ' + name + '!' return s print hello('world') print hello('semwatch')
程式輸出:
Hello world!
Hello semwatch!
函數是用來包裝一系列的行為的,通過傳遞一個或多個參數進入函數(def hello(name)),然後函數再返回一個計算之後的數值(return s)。
於是print hello(‘world’)就相當於輸出hello函數運行之後的運算結果,即輸出Hello world!
可以再看這個例子來加深理解:
def add_num(a, b) return a + b print add_num(1, 2) print add_num(2, 3)
程式輸出:
3
5
迴圈及判斷
後面提到的for迴圈、while迴圈及if判斷,這是所有程式語言裡面的基礎,務必完全掌握。
(Python裡面沒有其他語言常有的do while迴圈,也沒switch case判斷)#p#副標題#e#
for迴圈:
PHP範例:
<?php for($i=0;$i<10;$i++) { echo "$i\n"; } ?>
之所以這裡舉一個PHP的例子,是因為多數程式語言的for迴圈都和該例是類似的語法,先以這種形式舉例。
應該較容易理解,給變數i賦值0($i=0),每次迴圈的時候+1($i++),在i小於10的時候就一直迴圈($i<10),所以迴圈10次。
echo語句負責把每次迴圈時候的數位輸出,此例中會依次輸出0-9這些數位,不過沒必要研究echo語法,只需理解for迴圈的概念就行了。
Python的for迴圈語法比較另類,但也很簡潔:
1 2 for i in range(10): print i
這兩句語句會和前面一樣,依次輸出0-9這些數位,且print語句會自動每次輸出後換行。
while迴圈:
i = 0 while i < 10: i = i + 1 print i
代碼的意思是,先給i賦值0,然後當i小於10的時候,不斷執行循環體裡面的內容。 此處即為將i的值加1,並輸出i。
運行後輸出的結果依次是0-9幾個數位。
if判斷:
i = 1 if i < 2: print "i<2" else: print "i>=2"
程式輸出:
i<2
程式先給i賦值1,然後判斷i是否小於2,如果小於2則輸出i<2,不然輸出i>=2。
另外等於和不等於的判斷符號是如下的:
i = 1 if i == 1: print "i=1" elif i != 1: print "i!=1"
等於是==符號,這點容易混淆。 使用=符號在多數語言裡面會產生一些問題,而在Python裡面會直接視為代碼錯誤。 而不等於符號是!=,也可以使用<>,但<>號在如今的程式語言裡面使用越來越少,也可能在Python的日後版本裡被棄用,所以一般推薦使用!=。
上面代碼中第三行elif是else if的簡寫。 意為如果i==1沒有滿足的話,就繼續判斷i!=1是否滿足。
清單與字典
多數語言都有「陣列」,它是一個存著多個數值的變數。 而Python沒有,類似的是「清單」和「字典」等。
如果有PHP基礎的話,看下以下對比就可以很快理解它們:
清單:
PHP
<?php $l = array(1,2,3); ?>
Python
l = [1,2,3]
字典:
PHP
<?php $d = array( 'a' => 1, 'b' => 2, 'c' => 3, ); ?>
Python
d = { 'a': 1, 'b': 2, 'c': 3, }
如果沒有其他語言基礎的話,通過實際代碼來理解清單及字典或許更合適。
清單:
1 2 3 l = [1,2,3] for current in l: print current
運行的結果會依次輸出1-3這些數位。 (Python裡面沒有PHP的foreach語法,全都使用for完成)#p#副標題#e#
字典:
d = { 'a': 1, 'b': 2, 'c': 3, } for key in d: print key print d[key]
運行的結果會輸出a1b2c3,分六行顯示。
解釋下字典,字典的結構是這樣的:
dict = {key: value, key2: value2, ...}
for迴圈可以在每次迴圈的時候,把相應的key賦值給變數,如果要訪問對應的value,就需要使用類似dict[key]這樣的,即尋找dict裡面對應key的value。
類似的,清單也有類似操作,如:
l = [1,2,3] print l[1]
運行輸出:
2
它的意思是輸出清單l的第1項。 需要注意的是,對於絕大多數程式語言,都是從第0項開始算的。 即這裡l[0]是1,l[1]是2,l[2]是3。
字串及切片
字串如其名,是一串字元。 如print 「Hello World!」 就是輸出字串Hello World!。 Python裡面的字串比較特殊,它和清單一樣屬於序列類型,很多使用方法上和清單一樣。
s = "abc"