當(dāng)前位置:首頁 >  站長 >  搜索優(yōu)化 >  正文

Python程序語言快速上手教程

 2012-04-16 12:11  來源: SEM WATCH   我來投稿 撤稿糾錯

  域名預(yù)訂/競價,好“米”不錯過

本文是面向SEO人群的Python程序語言入門教程,也適用于其他沒有程序基礎(chǔ)但想學(xué)習(xí)些程序,以解決簡單的實(shí)際應(yīng)用需求的人群。在后面會盡量用最基礎(chǔ)的角度來介紹這門語言。

本來打算從網(wǎng)上找一篇入門教程,但因?yàn)镻ython很少是程序員的第一次接觸程序所學(xué)的語言,所以網(wǎng)上現(xiàn)有的教程多不是很基礎(chǔ),還是決定自己寫下這些。

如果沒有程序基礎(chǔ)的話,可能會覺得本文涵蓋的內(nèi)容有點(diǎn)多。對照大學(xué)里面常教的C語言的教學(xué)速度,本文大約有四五個課時的內(nèi)容;對照網(wǎng)上程序類的視頻教程,大致相當(dāng)于兩三個小時的內(nèi)容;對于翻一本程序書籍,大約相當(dāng)于翻一個小時書。也因此,如果有深入學(xué)習(xí)的打算的話,為了效率還是推薦看書。

如果暫時不能理解本文中的一些內(nèi)容也沒關(guān)系,因?yàn)槎际且恍┙?jīng)常會用到的基礎(chǔ)知識,在實(shí)際編寫代碼的過程中會一直遇到。后面會大約有兩三篇關(guān)于實(shí)用代碼編寫的文章,可以選擇那時再對這些知識加深印象。

但如果是覺得技術(shù)對于SEO沒有必要而對本文沒有興趣的話,試問打算將SEO作為自己多久的職業(yè)?如果打算真正將它做好的話,在至少有上萬小時需要用去的精力里面,從里面抽幾十幾百小時去學(xué)習(xí)些技術(shù)應(yīng)該是合情合理的。

若因文章有什么沒表述清楚而導(dǎo)致無法理解,請務(wù)必幫忙提出。第一次寫程序類的較完整的教程,難免有疏漏之處。

為什么學(xué)習(xí)Python

如果決定學(xué)習(xí)一些技術(shù)來輔助SEO的話,對于程序語言至少在我看來Python可以算是首選。

其一、Python入門相對簡單

如果誰在大學(xué)課程里面接觸過C語言但對程序了解不多的話,或許會覺得程序就是像C那么麻煩,其實(shí)不然,學(xué)了具有美感的Python代碼以后就會知道C代碼又臭又長。就算完全沒接觸過程序也沒關(guān)系,Python本身就適合作為程序的入門選擇。

我雖然很早就有寫程序,但那時是興趣使然,從未深入過,正式接觸程序是接觸SEO以后的事情,大約學(xué)了幾個小時以后就能寫些簡單的采集程序,到現(xiàn)在只要能想到需求就很少有技術(shù)無法實(shí)現(xiàn)的。所以沒什么有基礎(chǔ)沒基礎(chǔ)的問題在,無論什么的基礎(chǔ)都是需要自己打下的。

其二、Python代碼非常靈活

來看一段非常常用的代碼示例,如果沒有程序基礎(chǔ)的話會看不懂這些代碼,但暫時沒關(guān)系,看代碼行數(shù)也能對比出代碼簡潔性。

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行叫做“列表推導(dǎo)”,它提供了不少像這樣便利的語言特性可以使得代碼非常簡潔。

盡管語法靈活并非總是好事,靈活的代碼寫法意味著每個人寫出來的代碼往往風(fēng)格迥異,會把團(tuán)隊(duì)成員的水平差距拉大而不利于團(tuán)隊(duì)開發(fā)。但對于小型SEO應(yīng)用需求一般都是個人開發(fā),此時代碼的書寫效率比起團(tuán)隊(duì)合作性而言更重要。

其三、Python使用廣泛

Python在程序語言里面受歡迎的程度大約是5-10位左右。排在其之前的有C#, Java, PHP等,但很多時候不是因?yàn)樗鼈兏鼜?qiáng)大,而是因?yàn)榍懊嫣岬降脑?,它們的代碼顯得相對不是很靈活從而適合團(tuán)隊(duì)開發(fā),所以才更受歡迎。

一般來說,多數(shù)提供API的網(wǎng)絡(luò)服務(wù)都會提供Python接口(如百度網(wǎng)盟、Amazon云服務(wù)等),而另一些比Python某些方面更強(qiáng)的語言則沒有這么廣泛的支持度,比如代碼更加靈活一些的GO語言。(多數(shù)Web服務(wù)的API接口有:C#、PHP、Java、Python、Ruby、Perl,所以一般情況下選擇其中至少一種語言學(xué)習(xí))

Python的模塊也非常多,有許多既有模塊意味著可以少做很多事情。比如下載一個網(wǎng)頁,在很多語言里面都需要5-10行代碼,而Python僅需兩行:

import urllib2
print urllib2.urlopen('').read()

另外有意思的是以前Google限制過自己內(nèi)部使用Python語言進(jìn)行開發(fā)。原因有二:一、因?yàn)镻ython編寫效率高,之前被其過多的運(yùn)用;二、Python語言的執(zhí)行效率較慢。而對于SEO,卻正是最需要注重編寫效率而一般無需在意執(zhí)行效率的。

至此廢話了不少,但興趣往往是學(xué)習(xí)的最好動力,希望沒有白白廢話。

安裝環(huán)境與配置

Python程序和普通程序略有不一樣,通常情況下沒有可以直接在Windows下面雙擊運(yùn)行的exe文件,雖然并非無法編譯成exe但相對較麻煩,實(shí)際運(yùn)用中很少會去如此操作。

Python程序就是一段文字代碼,保存到后綴名為.py的文件里面。在電腦安裝了Python的運(yùn)行環(huán)境以后,方可以運(yùn)行py文件。(其實(shí)很多程序都依賴于運(yùn)行環(huán)境,最常見的是.net Framework,只不過這個在Windows上預(yù)裝了,一般感覺不到罷了)

對于Windows系統(tǒng)需要安裝運(yùn)行環(huán)境,Linux系統(tǒng)則一般自帶Python無需配置。

Python運(yùn)行環(huán)境的下載鏈接為:

在這個頁面上,通常是在第一個下載鏈接,尋找并下載:Python 2.7.x Windows Installer (Windows binary — does not include source)

需要注意的是下載的最好是2.7.x版本(x代表任意數(shù)值,2.7這個大版本都是類似的),而Python 3以上的版本和先前版本區(qū)別較大,對于初學(xué)者不建議使用。

下載后安裝,沒什么需要特別注意的地方。一般安裝在默認(rèn)路徑,即c:\python27\,不要將之放在目錄層級很深的文件夾,不然運(yùn)行的時候比較麻煩。

操作系統(tǒng)

前面已經(jīng)提到,Python可以在Windows及Linux系統(tǒng)下運(yùn)行,它還支持更多系統(tǒng),如Mac等,甚至也可以在越獄過的iPhone等設(shè)備上面編寫并運(yùn)行Python程序。

但因?yàn)镻ython的一個主要強(qiáng)大之處在于其模塊的支持,有了模塊就可以方便的做很多事情。而模塊的配置在Windows等系統(tǒng)里面往往有些麻煩,Linux往往容易得多,所以過了入門階段以后,推薦在Linux環(huán)境下進(jìn)行開發(fā)。

Linux環(huán)境的搭建有三種選擇:

1.本機(jī)安裝Linux系統(tǒng)。適合在Linux下長期工作的人,需要對Linux的基礎(chǔ)知識有一定的了解。主要缺點(diǎn)是總有些Windows里面才能運(yùn)行的程序,偶爾需要切換系統(tǒng)。我主要是在這樣的環(huán)境下工作。

2.在Windows里面安裝VMware等虛擬機(jī),然后在虛擬機(jī)里面安裝使用Linux。適合初學(xué)者,但因?yàn)樘摂M機(jī)的關(guān)系,除非計(jì)算機(jī)配置很好,不然兩邊系統(tǒng)的運(yùn)行效率都會比較低下。且虛擬機(jī)不利于塑造學(xué)習(xí)Linux的氣氛,因?yàn)橛锰摂M機(jī)的時候碰到問題,多數(shù)人會傾向用Windows解決而非用Linux,那么就較難熟悉它。個人不怎么推薦這種選擇。

3.買一臺Linux的VPS,使用SSH遠(yuǎn)程操作。主要優(yōu)點(diǎn)是在工作及家里都可以很方便的連上服務(wù)器,不用每天把程序、數(shù)據(jù)等隨著U盤之類的帶來帶去;也可以在不影響Windows使用的情況下使用Linux。但缺點(diǎn)同樣明顯,沒有圖形界面對入門者不友好;因?yàn)榫W(wǎng)絡(luò)延時的關(guān)系,寫代碼的效率經(jīng)常受影響等等。對于初學(xué)者,個人比較推薦這個解決方案。

至于VPS的購買,推薦Linode或PhotonVPS等,大約每月50-150RMB能買一個可以用來書寫運(yùn)行普通程序的VPS,也可以同時在上面放兩三個小網(wǎng)站。

Linux有很多發(fā)行版可以選擇來安裝,如Ubuntu,F(xiàn)edora等。

對于在本機(jī)上搭建Linux環(huán)境時,因?yàn)閾碛袌D形界面,若是工作為主要目的,推薦安裝Fedora。它和服務(wù)器最常用的CentOS系統(tǒng)同出Red Hat系,很多地方比較接近,熟悉它對于熟悉CentOS也有較大助益。

如果在本機(jī)安裝,且有時會將Linux系統(tǒng)用作觀看視頻等娛樂之用的話,推薦Ubuntu,它在日常使用方面略勝Fedora一籌。

對于VPS上面搭建Linux,則推薦CentOS系統(tǒng),因?yàn)樗褂米顝V泛,所以各種軟件對其的支持往往更好。

對應(yīng)Linux環(huán)境解決方案1,一般使用U盤加載iso鏡像進(jìn)行安裝;對于解決方案2,一般直接由虛擬機(jī)軟件加載iso鏡像安裝;對于解決方案3,一般VPS都可在其后臺直接選擇操作系統(tǒng)無需自己安裝,比較方便。

編輯器

書寫代碼前面首先需要有一個合適的編輯器。盡管Windows自帶的記事本也不是不可以使用,但編寫程序時會非常不順手。

對于Windows系統(tǒng)的編輯器,較簡單的我比較推薦Notepad++,當(dāng)然也可以選擇更流行的UltraEdit。

也可以使用IDE,這是用來開發(fā)軟件項(xiàng)目的集成環(huán)境的統(tǒng)稱,它在開發(fā)大型項(xiàng)目時具有較大優(yōu)勢,但在處理小型需求時可能顯得略有不靈活。IDE里面比較好的有Eclipse,加上PyDev插件即可開發(fā)Python程序,它在Windows和Linux里面皆可以使用。

如果平常需要書寫的代碼量很大,或是對自己的學(xué)習(xí)能力較有自信的話,對于Linux推薦Vim,Windows則推薦gVim(Vim的圖形界面)。它和普通編輯器書寫代碼有極大的不同之處,往往需要幾天的學(xué)習(xí)時間與幾個月的熟練時間,但書寫代碼的效率一般可以快不少。

開始編寫程序

Hello World!

“Hello World”最早的出處是計(jì)算機(jī)領(lǐng)域的最經(jīng)典書籍之一——《The C Programming Language》,后來被廣泛沿用。”Hello World”程序的目的只是在屏幕上輸出一個”Hello World”,盡管很簡單,當(dāng)它作為每個人第一個所寫的程序時還是有著較大的意義。#p#副標(biāo)題#e#

打開編輯器,輸入一行:(友情提示:復(fù)制粘貼不利記憶)

print "Hello World!"

完畢。保存文件到c:\hello.py(路徑隨意)。

按Win + R快捷鍵,打開“運(yùn)行”,輸入CMD,回車,打開命令行提示符。(Linux圖形界面的話是Ctrl+Alt+T來打開終端)

輸入:

(Windows)

c:\python27\python.exe c:\hello.py

(Linux)

python 路徑/hello.py

可以看到程序運(yùn)行并顯示了一行“Hello World!”。至此,第一個程序完成了。

 

變量與賦值

1

s = 'Hello World!'
print s

程序輸出:

Hello World!

上述代碼,s稱為變量;第一行所做的操作叫做賦值。

再來個例子加深印象:

 

2
3
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ù)進(jìn)入函數(shù)(def hello(name)),然后函數(shù)再返回一個計(jì)算之后的數(shù)值(return s)。

于是print hello(‘world’)就相當(dāng)于輸出hello函數(shù)運(yùn)行之后的運(yùn)算結(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判斷)#p#副標(biāo)題#e#

for循環(huán):

PHP范例:

<?php
for($i=0;$i<10;$i++) {
echo "$i\n";
}
?>

之所以這里舉一個PHP的例子,是因?yàn)槎鄶?shù)程序語言的for循環(huán)都和該例是類似的語法,先以這種形式舉例。

應(yīng)該較容易理解,給變量i賦值0($i=0),每次循環(huán)的時候+1($i++),在i小于10的時候就一直循環(huán)($i<10),所以循環(huán)10次。

echo語句負(fù)責(zé)把每次循環(huán)時候的數(shù)字輸出,此例中會依次輸出0-9這些數(shù)字,不過沒必要研究echo語法,只需理解for循環(huán)的概念就行了。

Python的for循環(huán)語法比較另類,但也很簡潔:

1
2
for i in range(10):
print i

這兩句語句會和前面一樣,依次輸出0-9這些數(shù)字,且print語句會自動每次輸出后換行。

while循環(huán):

i = 0
while i < 10:
i = i + 1
print i

代碼的意思是,先給i賦值0,然后當(dāng)i小于10的時候,不斷執(zhí)行循環(huán)體里面的內(nèi)容。此處即為將i的值加1,并輸出i。

運(yùn)行后輸出的結(jié)果依次是0-9幾個數(shù)字。

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"

等于是==符號,這點(diǎn)容易混淆。使用=符號在多數(shù)語言里面會產(chǎn)生一些問題,而在Python里面會直接視為代碼錯誤。而不等于符號是!=,也可以使用<>,但<>號在如今的程序語言里面使用越來越少,也可能在Python的日后版本里被棄用,所以一般推薦使用!=。

上面代碼中第三行elif是else if的簡寫。意為如果i==1沒有滿足的話,就繼續(xù)判斷i!=1是否滿足。

列表與字典

多數(shù)語言都有“數(shù)組”,它是一個存著多個數(shù)值的變量。而Python沒有,類似的是“列表”和“字典”等。

如果有PHP基礎(chǔ)的話,看下以下對比就可以很快理解它們:

列表:

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,
}

如果沒有其他語言基礎(chǔ)的話,通過實(shí)際代碼來理解列表及字典或許更合適。

列表:

1
2
3
l = [1,2,3]
for current in l:
print current

運(yùn)行的結(jié)果會依次輸出1-3這些數(shù)字。(Python里面沒有PHP的foreach語法,全都使用for完成)#p#副標(biāo)題#e#

字典:

d = {
'a': 1,
'b': 2,
'c': 3,
}
for key in d:
print key
print d[key]

運(yùn)行的結(jié)果會輸出a1b2c3,分六行顯示。

解釋下字典,字典的結(jié)構(gòu)是這樣的:

dict = {key: value, key2: value2, …}

for循環(huán)可以在每次循環(huán)的時候,把相應(yīng)的key賦值給變量,如果要訪問對應(yīng)的value,就需要使用類似dict[key]這樣的,即尋找dict里面對應(yīng)key的value。

類似的,列表也有類似操作,如:

l = [1,2,3]
print l[1]

運(yùn)行輸出:

2

它的意思是輸出列表l的第1項(xiàng)。需要注意的是,對于絕大多數(shù)程序語言,都是從第0項(xiàng)開始算的。即這里l[0]是1,l[1]是2,l[2]是3。

字符串及切片

字符串如其名,是一串字符。如print “Hello World!”就是輸出字符串Hello World!。Python里面的字符串比較特殊,它和列表一樣屬于序列類型,很多使用方法上和列表一樣。

s = "abc"
print s[1]

運(yùn)行結(jié)果會輸出b。

根據(jù)這樣的特性,可以衍生出一些簡潔的代碼運(yùn)用。比如要輸出”Hello World!”這個字符串的前5個字符的話,多數(shù)語言會和PHP類似是這樣做的:

<?php
$s = "Hello World!";
echo substr($s,0,5);
?>

而Python簡單得多:

s = "Hello World!"
print s[:5]

兩段代碼都會輸出Hello。

其中的s[:5]使用了Python的“切片”特性,完整的寫法應(yīng)該是s[0:5],但0可以省略,這里代表著輸出這個序列索引號從0開始到5之前的內(nèi)容。

當(dāng)然列表也是可以使用切片的,如:

l = [1,2,3]
print l[1:]

運(yùn)行后輸出[2,3]。

意味著從索引號1開始,輸出到列表的最后。

知識點(diǎn)匯總

將前面所有的內(nèi)容加上一些新的知識點(diǎn),融合成一段代碼。認(rèn)真思考每一個輸出的結(jié)果是如何出來的,就能更好的理解這些。因?yàn)橹R點(diǎn)比較多,可以暫時不求甚解,但這些都是任何程序語言里面都會有的基礎(chǔ)內(nèi)容,最終是必須掌握的。

代碼中,#號意味著注釋的開始,這些內(nèi)容不會被運(yùn)行。

另外代碼的第一行聲明了代碼編碼為utf-8。因?yàn)樽⑨屩谐霈F(xiàn)了非英文字符,所以就需要指定編碼,不然程序會報(bào)錯。

# -*- coding:utf-8 -*-
str_1 = 'Hello'
str_2 = 'World!'
 
#以下語句都會輸出Hello World!
 
#print語句中的逗號意味著不換行,而是用空格間隔它們
print str_1, str_2
 
#以下和上面一句是同樣的效果
print str_1,
print str_2
 
#同樣可以用字符串連接符
print str_1 + ' ' + str_2
 
#也可以用格式化操作符,它比前者更常用
#會將后面的變量依次替換到前面的%x上面
#%s指定替換為字符串,若替換整數(shù)則為%d,小數(shù)%f
print '%s %s' % (str_1, str_2)
 
#會輸出00 11 22
for i in range(3):
print '%d%d' % (i, i),
print '' #輸出一個空的字符串用于換行
 
#會輸出11 22 33
for i in range(1, 4):
print '%d%d' % (i, i),
print ''
 
#會輸出00 22 44
for i in range(0, 5, 2):
print '%d%d' % (i, i),
print ''
 
#會輸出0 1 0 1 0
i = 0
while i < 5:
i += 1 #等同于i = i + 1
if i % 2==0: #如果i除2的余數(shù)為0
print 1,
else:
print 0,
print ''
 
#會輸出c
i = 3
if i==1:
print 'a'
elif i==2:
print 'b'
elif i==3:
print 'c'
else:
print 'error'
 
#會輸出1 2 3 3 4 4 5 5 6
for i in range(10):
i += 1
print i,
if i < 3:
continue #如果i<3則中斷該次循環(huán),從循環(huán)體的頭部重新運(yùn)行
elif i > 5:
break #如果i>5則中斷整個循環(huán)
print i,

最后

雖然現(xiàn)在提及的是程序,但SEO要涉及的技術(shù)遠(yuǎn)不僅是程序。盡管很想從頭開始提及所有應(yīng)該學(xué)習(xí)的方面,無奈這是幾本書都寫不完的,單用幾篇文章更無法窮盡。

在接下來的文章里面,將跳空一些知識點(diǎn),如果讀者沒有相關(guān)基礎(chǔ),則需自行學(xué)習(xí)。之后將跳過的包括但不限于:

1. 基礎(chǔ)Web知識,比如非ASCII字符集的URL需要編碼等常識:

2. 瀏覽器開發(fā)人員工具的運(yùn)用,可以選擇Chrome的開發(fā)人員工具、或Firefox的Firebug插件等,個人推薦用Chrome。尤其需要先了解其抓包功能,在采集數(shù)據(jù)的時候經(jīng)常要用到。抓包功能在Chrome開發(fā)人員工具里面,對應(yīng)的是”Network”選項(xiàng)卡。

3. 獨(dú)立配置Python的pycurl模塊。此處主要有兩種選擇,一種是在Windows系統(tǒng)安裝Curl、再安裝setuptools、最后安裝模塊,比較麻煩也不推薦,且以后其他模塊在Windows里面配置可能也是這么麻煩。另一種選擇即是配置一個Linux環(huán)境,在CentOS及Fedora等系統(tǒng)里面,執(zhí)行:sudo yum install python-pycurl,在Ubuntu等系統(tǒng)里面,執(zhí)行sudo apt-get install python-pycurl。之后將大量的使用到這個模塊,所以務(wù)必配置好。Linux的入門命令可見:

4. 了解正則表達(dá)式。它是用來處理字符串的強(qiáng)大工具,可以在百度上尋找資料對它做初步的了解,至少要先知道.*?和[\s\S]*?這兩個的含義,它們在采集數(shù)據(jù)的過程中是最常用的。這是一個很不錯但難度較高的正則教程,可能不是很適合初學(xué):

此外最好買一本Python書籍,雖然因?yàn)镾EO沒必要對程序涉及很深入,大多程序類書籍上的多數(shù)知識的重要性不高。比如每本書都會花大量篇幅去介紹面向?qū)ο缶幊痰乃悸放c實(shí)現(xiàn),但SEO的多數(shù)需求往往只有幾百行代碼,一般都不太會去涉及這些。不過,一開始的一些基礎(chǔ)知識學(xué)習(xí)的過程中,容易疏漏或者遺忘知識點(diǎn),有一本書會好得多。

尚未找到比較適合SEO看的Python書籍。我自己手邊有一本《Python核心編程》,應(yīng)該說還可以吧。如果不確定買哪本的話,可以到這個論壇去找下pdf試看,它上面各類計(jì)算機(jī)書籍應(yīng)該是相對最齊全的:

但不要只看pdf,一般學(xué)一門語言至少備一本紙質(zhì)書籍,它應(yīng)該是在自己不清楚或忘記了哪些知識點(diǎn)以后,可以隨時拿來翻看的工具書。

申請創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)文章

熱門排行

信息推薦