本来打算从网上找一篇入门教程,但因为python很少是程序员的第一次接触程序所学的语言,所以网上现有的教程多不是很基础,还是决定自己写下这些。 如果没有程序基础的话,可能会觉得本文涵盖的内容有点多。对照大学里面常教的c语言的教学速度,本文大约有四五个课时的内容;对照网上程序类的视频 教程,大致相当于两三个小时的内容;对于翻一本程序书籍,大约相当于翻一个小时书。也因此,如果有深入学习的打算的话,为了效率还是推荐看书。 如果暂时不能理解本文中的一些内容也没关系,因为都是一些经常会用到的基础知识,在实际编写代码的过程中会一直遇到。后面会大约有两三篇关于实用代码编写的文章,可以选择那时再对这些知识加深印象。 但如果是觉得技术对于seo没有必要而对本文没有兴趣的话,试问打算将seo作为自己多久的职业?如果打算真正将它做好的话,在至少有上万小时需要用去的精力里面,从里面抽几十几百小时去学习些技术应该是合情合理的。 若因文章有什么没表述清楚而导致无法理解,请务必帮忙提出。第一次写程序类的较完整的教程,难免有疏漏之处。 为什么学习python 如果决定学习一些技术来辅助seo的话,对于程序语言至少在我看来python可以算是首选。 其一、python入门相对简单 如果谁在大学课程里面接触过c语言但对程序了解不多的话,或许会觉得程序就是像c那么麻烦,其实不然,学了具有美感的python代码以后就会知道c代码又臭又长。就算完全没接触过程序也没关系,python本身就适合作为程序的入门选择。 我虽然很早就有写程序,但那时是兴趣使然,从未深入过,正式接触程序是接触seo以后的事情,大约学了几个小时以后就能写些简单的采集程序,到现在只要能想到需求就很少有技术无法实现的。所以没什么有基础没基础的问题在,无论什么的基础都是需要自己打下的。 其二、python代码非常灵活 来看一段非常常用的代码示例,如果没有程序基础的话会看不懂这些代码,但暂时没关系,看代码行数也能对比出代码简洁性。 php:
代码如下:
python:
代码如下:
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”,尽管很简单,当它作为每个人第一个所写的程序时还是有着较大的意义。 打开编辑器,输入一行:(友情提示:复制粘贴不利记忆)
代码如下:
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 函数
代码如下:
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判断) for循环: php范例:
代码如下:
for($i=0;$i
之所以这里举一个php的例子,是因为多数程序语言的for循环都和该例是类似的语法,先以这种形式举例。 应该较容易理解,给变量i赋值0($i=0),每次循环的时候+1($i++),在i小于10的时候就一直循环($i 1, ‘b’ => 2, ‘c’ => 3, ); ?>
python
代码如下:
d = { ‘a’: 1, ‘b’: 2, ‘c’: 3, }
如果没有其他语言基础的话,通过实际代码来理解列表及字典或许更合适。 列表:
代码如下:
l = [1,2,3] for current in l: print current
运行的结果会依次输出1-3这些数字。(python里面没有php的foreach语法,全都使用for完成) 字典:
代码如下:
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” print s[1]
运行结果会输出b。 根据这样的特性,可以衍生出一些简洁的代码运用。比如要输出”hello world!”这个字符串的前5个字符的话,多数语言会和php类似是这样做的:
代码如下:
$s = “hello world!”; echo substr($s,0,5); ?>
而python简单得多:
代码如下:
s = “hello world!” print s[:5]
两段代码都会输出hello。 其中的s[:5]使用了python的“切片”特性,完整的写法应该是s[0:5],但0可以省略,这里代表着输出这个序列索引号从0开始到5之前的内容。 当然列表也是可以使用切片的,如:
代码如下:
l = [1,2,3] print l[1:]
运行后输出[2,3]。 意味着从索引号1开始,输出到列表的最后。 知识点汇总 将前面所有的内容加上一些新的知识点,融合成一段代码。认真思考每一个输出的结果是如何出来的,就能更好的理解这些。因为知识点比较多,可以暂时不求甚解,但这些都是任何程序语言里面都会有的基础内容,最终是必须掌握的。 代码中,#号意味着注释的开始,这些内容不会被运行。 另外代码的第一行声明了代码编码为utf-8。因为注释中出现了非英文字符,所以就需要指定编码,不然程序会报错。
代码如下:
# -*- 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指定替换为字符串,若替换整数则为%d,小数%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的余数为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 5: break #如果i>5则中断整个循环 print i,
最后 虽然现在提及的是程序,但seo要涉及的技术远不仅是程序。尽管很想从头开始提及所有应该学习的方面,无奈这是几本书都写不完的,单用几篇文章更无法穷尽。 在接下来的文章里面,将跳空一些知识点,如果读者没有相关基础,则需自行学习。之后将跳过的包括但不限于: 1. 基础web知识,比如非ascii字符集的url需要编码等常识:http://www.w3school.com.cn/html/html_urlencode.asp 2. 浏览器开发人员工具的运用,可以选择chrome的开发人员工具、或firefox的firebug插件等,个人推荐用chrome。尤其需要先了解其抓 包功能,在采集数据的时候经常要用到。抓包功能在chrome开发人员工具里面,对应的是”network”选项卡。 3. 独立配置python的pycurl模块。此处主要有两种选择,一种是在windows系统安装curl、再安装setuptools、最后安装模块,比 较麻烦也不推荐,且以后其他模块在windows里面配置可能也是这么麻烦。另一种选择即是配置一个linux环境,在centos及fedora等系统 里面,执行:sudo yum install python-pycurl,在ubuntu等系统里面,执行sudo apt-get install python-pycurl。之后将大量的使用到这个模块,所以务必配置好。linux的入门命令可见:http://ooxx.me/common-ssh-commands.orz 4. 了解正则表达式。它是用来处理字符串的强大工具,可以在百度上寻找资料对它做初步的了解,至少要先知道.*?和[\s\s]*?这两个的含义,它们在采集数据的过程中是最常用的。这是一个很不错但难度较高的正则教程,可能不是很适合初学:http://manual.phpv.net/regular_expression.html 此外最好买一本python书籍,虽然因为seo没必要对程序涉及很深入,大多程序类书籍上的多数知识的重要性不高。比如每本书都会花大量篇幅去介 绍面向对象编程的思路与实现,但seo的多数需求往往只有几百行代码,一般都不太会去涉及这些。不过,一开始的一些基础知识学习的过程中,容易疏漏或者遗 忘知识点,有一本书会好得多。 尚未找到比较适合seo看的python书籍。我自己手边有一本《python核心编程》,应该说还可以吧。如果不确定买哪本的话,可以到这个论坛去找下pdf试看,它上面各类计算机书籍应该是相对最齐全的:http://club.topsage.com/forum-300-1.html 但不要只看pdf,一般学一门语言至少备一本纸质书籍,它应该是在自己不清楚或忘记了哪些知识点以后,可以随时拿来翻看的工具书。 文章作者:zero 本文来自semwatch 转载请注明出处链接及作者。