本文是面向SEO人群的Python程序語言入門教程,也適用于其他沒有程序基礎(chǔ)但想學習些程序,以解決簡單的實際應(yīng)用需求的人群。在后面會盡量用最基礎(chǔ)的角度來介紹這門語言。
本來打算從網(wǎng)上找一篇入門教程,但因為Python很少是程序員的第一次接觸程序所學的語言,所以網(wǎng)上現(xiàn)有的教程多不是很基礎(chǔ),還是決定自己寫下這些。
如果沒有程序基礎(chǔ)的話,可能會覺得本文涵蓋的內(nèi)容有點多。對照大學里面常教的C語言的教學速度,本文大約有四五個課時的內(nèi)容;對照網(wǎng)上程序類的視頻 教程,大致相當于兩三個小時的內(nèi)容;對于翻一本程序書籍,大約相當于翻一個小時書。也因此,如果有深入學習的打算的話,為了效率還是推薦看書。
如果暫時不能理解本文中的一些內(nèi)容也沒關(guān)系,因為都是一些經(jīng)常會用到的基礎(chǔ)知識,在實際編寫代碼的過程中會一直遇到。后面會大約有兩三篇關(guān)于實用代碼編寫的文章,可以選擇那時再對這些知識加深印象。
但如果是覺得技術(shù)對于SEO沒有必要而對本文沒有興趣的話,試問打算將SEO作為自己多久的職業(yè)?如果打算真正將它做好的話,在至少有上萬小時需要用去的精力里面,從里面抽幾十幾百小時去學習些技術(shù)應(yīng)該是合情合理的。
若因文章有什么沒表述清楚而導(dǎo)致無法理解,請務(wù)必幫忙提出。第一次寫程序類的較完整的教程,難免有疏漏之處。
為什么學習Python
如果決定學習一些技術(shù)來輔助SEO的話,對于程序語言至少在我看來Python可以算是首選。
其一、Python入門相對簡單
如果誰在大學課程里面接觸過C語言但對程序了解不多的話,或許會覺得程序就是像C那么麻煩,其實不然,學了具有美感的Python代碼以后就會知道C代碼又臭又長。就算完全沒接觸過程序也沒關(guān)系,Python本身就適合作為程序的入門選擇。
我雖然很早就有寫程序,但那時是興趣使然,從未深入過,正式接觸程序是接觸SEO以后的事情,大約學了幾個小時以后就能寫些簡單的采集程序,到現(xiàn)在只要能想到需求就很少有技術(shù)無法實現(xiàn)的。所以沒什么有基礎(chǔ)沒基礎(chǔ)的問題在,無論什么的基礎(chǔ)都是需要自己打下的。
其二、Python代碼非常靈活
來看一段非常常用的代碼示例,如果沒有程序基礎(chǔ)的話會看不懂這些代碼,但暫時沒關(guān)系,看代碼行數(shù)也能對比出代碼簡潔性。
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:
list_1
=
[
1
,
2
]
list_2
=
[current
+
1
for
current
in
list_1]
print
list_2
Python代碼的第2行叫做“列表推導(dǎo)”,它提供了不少像這樣便利的語言特性可以使得代碼非常簡潔。
盡管語法靈活并非總是好事,靈活的代碼寫法意味著每個人寫出來的代碼往往風格迥異,會把團隊成員的水平差距拉大而不利于團隊開發(fā)。但對于小型SEO應(yīng)用需求一般都是個人開發(fā),此時代碼的書寫效率比起團隊合作性而言更重要。
其三、Python使用廣泛
Python在程序語言里面受歡迎的程度大約是5-10位左右。排在其之前的有C#, Java, PHP等,但很多時候不是因為它們更強大,而是因為前面提到的原因,它們的代碼顯得相對不是很靈活從而適合團隊開發(fā),所以才更受歡迎。
一般來說,多數(shù)提供API的網(wǎng)絡(luò)服務(wù)都會提供Python接口(如百度網(wǎng)盟、Amazon云服務(wù)等),而另一些比Python某些方面更強的語言則 沒有這么廣泛的支持度,比如代碼更加靈活一些的GO語言。(多數(shù)Web服務(wù)的API接口有:C#、PHP、Java、Python、Ruby、Perl, 所以一般情況下選擇其中至少一種語言學習)
Python的模塊也非常多,有許多既有模塊意味著可以少做很多事情。比如下載一個網(wǎng)頁,在很多語言里面都需要5-10行代碼,而Python僅需兩行:
import
urllib2
print
urllib2.urlopen(
'http://g.cn/'
).read()
另外有意思的是以前Google限制過自己內(nèi)部使用Python語言進行開發(fā)。原因有二:一、因為Python編寫效率高,之前被其過多的運用;二、Python語言的執(zhí)行效率較慢。而對于SEO,卻正是最需要注重編寫效率而一般無需在意執(zhí)行效率的。
至此廢話了不少,但興趣往往是學習的最好動力,希望沒有白白廢話。
安裝環(huán)境與配置
Python程序和普通程序略有不一樣,通常情況下沒有可以直接在Windows下面雙擊運行的exe文件,雖然并非無法編譯成exe但相對較麻煩,實際運用中很少會去如此操作。
Python程序就是一段文字代碼,保存到后綴名為.py的文件里面。在電腦安裝了Python的運行環(huán)境以后,方可以運行py文件。(其實很多程序都依賴于運行環(huán)境,最常見的是.net framework,只不過這個在Windows上預(yù)裝了,一般感覺不到罷了)
對于Windows系統(tǒng)需要安裝運行環(huán)境,Linux系統(tǒng)則一般自帶Python無需配置。
Python運行環(huán)境的下載鏈接為:http://python.org/getit/
在這個頁面上,通常是在第一個下載鏈接,尋找并下載:Python 2.7.x Windows Installer (Windows binary — does not include source)
需要注意的是下載的最好是2.7.x版本(x代表任意數(shù)值,2.7這個大版本都是類似的),而Python 3以上的版本和先前版本區(qū)別較大,對于初學者不建議使用。
下載后安裝,沒什么需要特別注意的地方。一般安裝在默認路徑,即c:\python27\,不要將之放在目錄層級很深的文件夾,不然運行的時候比較麻煩。
操作系統(tǒng)
前面已經(jīng)提到,Python可以在Windows及Linux系統(tǒng)下運行,它還支持更多系統(tǒng),如Mac等,甚至也可以在越獄過的iPhone等設(shè)備上面編寫并運行Python程序。
但因為Python的一個主要強大之處在于其模塊的支持,有了模塊就可以方便的做很多事情。而模塊的配置在Windows等系統(tǒng)里面往往有些麻煩,Linux往往容易得多,所以過了入門階段以后,推薦在Linux環(huán)境下進行開發(fā)。
Linux環(huán)境的搭建有三種選擇:
1.本機安裝Linux系統(tǒng)。適合在Linux下長期工作的人,需要對Linux的基礎(chǔ)知識有一定的了解。主要缺點是總有些Windows里面才能運行的程序,偶爾需要切換系統(tǒng)。我主要是在這樣的環(huán)境下工作。
2.在Windows里面安裝VMware等虛擬機,然后在虛擬機里面安裝使用Linux。適合初學者,但因為虛擬機的關(guān)系,除非計算機配置很好, 不然兩邊系統(tǒng)的運行效率都會比較低下。且虛擬機不利于塑造學習Linux的氣氛,因為用虛擬機的時候碰到問題,多數(shù)人會傾向用Windows解決而非用 Linux,那么就較難熟悉它。個人不怎么推薦這種選擇。
3.買一臺Linux的VPS,使用SSH遠程操作。主要優(yōu)點是在工作及家里都可以很方便的連上服務(wù)器,不用每天把程序、數(shù)據(jù)等隨著U盤之類的帶來 帶去;也可以在不影響Windows使用的情況下使用Linux。但缺點同樣明顯,沒有圖形界面對入門者不友好;因為網(wǎng)絡(luò)延時的關(guān)系,寫代碼的效率經(jīng)常受 影響等等。對于初學者,個人比較推薦這個解決方案。
至于VPS的購買,推薦Linode或PhotonVPS等,大約每月50-150RMB能買一個可以用來書寫運行普通程序的VPS,也可以同時在上面放兩三個小網(wǎng)站。
Linux有很多發(fā)行版可以選擇來安裝,如Ubuntu,F(xiàn)edora等。
對于在本機上搭建Linux環(huán)境時,因為擁有圖形界面,若是工作為主要目的,推薦安裝Fedora。它和服務(wù)器最常用的CentOS系統(tǒng)同出Red Hat系,很多地方比較接近,熟悉它對于熟悉CentOS也有較大助益。
如果在本機安裝,且有時會將Linux系統(tǒng)用作觀看視頻等娛樂之用的話,推薦Ubuntu,它在日常使用方面略勝Fedora一籌。
對于VPS上面搭建Linux,則推薦CentOS系統(tǒng),因為它使用最廣泛,所以各種軟件對其的支持往往更好。
對應(yīng)Linux環(huán)境解決方案1,一般使用U盤加載iso鏡像進行安裝;對于解決方案2,一般直接由虛擬機軟件加載iso鏡像安裝;對于解決方案3,一般VPS都可在其后臺直接選擇操作系統(tǒng)無需自己安裝,比較方便。
編輯器
書寫代碼前面首先需要有一個合適的編輯器。盡管Windows自帶的記事本也不是不可以使用,但編寫程序時會非常不順手。
對于Windows系統(tǒng)的編輯器,較簡單的我比較推薦Notepad++,當然也可以選擇更流行的UltraEdit。
也可以使用IDE,這是用來開發(fā)軟件項目的集成環(huán)境的統(tǒng)稱,它在開發(fā)大型項目時具有較大優(yōu)勢,但在處理小型需求時可能顯得略有不靈活。IDE里面比較好的有Eclipse,加上PyDev插件即可開發(fā)Python程序,它在Windows和Linux里面皆可以使用。
如果平常需要書寫的代碼量很大,或是對自己的學習能力較有自信的話,對于Linux推薦Vim,Windows則推薦gVim(Vim的圖形界面)。它和普通編輯器書寫代碼有極大的不同之處,往往需要幾天的學習時間與幾個月的熟練時間,但書寫代碼的效率一般可以快不少。
開始編寫程序
Hello World!
“Hello World”最早的出處是計算機領(lǐng)域的最經(jīng)典書籍之一——《The C Programming Language》,后來被廣泛沿用。”Hello World”程序的目的只是在屏幕上輸出一個”Hello World”,盡管很簡單,當它作為每個人第一個所寫的程序時還是有著較大的意義。
打開編輯器,輸入一行:(友情提示:復(fù)制粘貼不利記憶)
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!”。至此,第一個程序完成了。
變量與賦值
s
=
'Hello World!'
print
s
程序輸出:
Hello World!
上述代碼,s稱為變量;第一行所做的操作叫做賦值。
再來個例子加深印象:
a
=
1
b
=
2
print
a
+
b
程序輸出:
3
函數(shù)
def
hello(name):
s
=
'Hello '
+
name
+
'!'
return
s
print
hello(
'world'
)
print
hello(
'semwatch'
)
程序輸出:
Hello world!
Hello semwatch!
函數(shù)是用來包裝一系列的行為的,通過傳遞一個或多個參數(shù)進入函數(shù)(def hello(name)),然后函數(shù)再返回一個計算之后的數(shù)值(return s)。
于是print hello(‘world’)就相當于輸出hello函數(shù)運行之后的運算結(jié)果,即輸出Hello world!
可以再看這個例子來加深理解:
def
add_num(a, b)
return
a
+
b
print
add_num(
1
,
2
)
print
add_num(
2
,
3
)
程序輸出:
3
5
循環(huán)及判斷
后面提到的for循環(huán)、while循環(huán)及if判斷,這是所有程序語言里面的基礎(chǔ),務(wù)必完全掌握。
(Python里面沒有其他語言常有的do while循環(huán),也沒switch case判斷)
for循環(huán):
PHP范例:
for
(
$i
=0;
$i
<10;
$i
++) {
echo
"$i\n"
;
}
?>
之所以這里舉一個PHP的例子,是因為多數(shù)程序語言的for循環(huán)都和該例是類似的語法,先以這種形式舉例。
應(yīng)該較容易理解,給變量i賦值0($i=0),每次循環(huán)的時候+1($i++),在i小于10的時候就一直循環(huán)($i<10),所以循環(huán)10次。
echo語句負責把每次循環(huán)時候的數(shù)字輸出,此例中會依次輸出0-9這些數(shù)字,不過沒必要研究echo語法,只需理解for循環(huán)的概念就行了。