购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第1章
Python基础

有句话说得好,“工欲善其事,必先利其器”,由于本书中所涉及的示例代码均以Python作为主要开发语言,因此在学习网络爬虫开发之前,需要对Python的基本使用方法有个大致的了解。同时,本书致力于帮助读者从零基础入门,本章将会对Python的基础语法和使用方法做一个大致的讲解,但不会面面俱到,只需要读者了解基础语法的使用方法即可。如果读者已有一定的Python基础,可跳过本章的学习,从第2章开始深入探究Python。

本章主要涉及的知识点

Python环境的搭建

Python开发IDE PyCharm的基本使用方法

数据类型和变量

字符串编码

列表和元组

流程控制语句if和循环

字典和集合的使用方法

函数

面向对象

多线程

1.1 Python环境搭建

Python(英国发音:/ˈpaɪθən/;美国发音:/ˈpaɪθɑːn/)是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。

Python是纯粹的自由软件,源代码和解释器CPython遵循GPL(GNU General Public License)协议。Python语法简洁清晰,特色之一是强制用空白符作为语句缩进。

Python具有丰富和强大的库,常被称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分用更合适的语言改写,如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是,在使用扩展类库时需要考虑平台问题,某些平台可能不提供跨平台的功能。

由于Python具有语法简洁及拥有非常全面的第三方类库支持等优势,因此其非常适合用于爬虫程序的编写。Python目前分为两大版本,一个是Python 2.x版本,另一个是Python 3.x版本。这两个版本差距比较大,目前最新版本为Python 3.7.x。需要注意的是,本书中所涉及的代码均以Python 3.6.4为主。

接下来,本节将会讲解如何在常用操作系统下搭建Python 3开发环境,进行Python基础知识的学习和代码编写。

1.1.1 Windows系统下的Python环境安装与配置

Python是跨平台的语言,支持在各种不同的系统中运行,下面先来讲解我们最熟悉的Windows系统下的Python环境安装与测试。

1.下载Python安装包

根据Windows版本(64位/32位)从Python官网下载对应的版本安装包,Python官网下载地址为https://www.python.org。本书以Windows 10系统为例,相关的操作步骤如下。

步骤A:下载安装包,打开https://www.python.org,进入Python官网首页,鼠标指针移动到【Downloads】选项,可以看到Python的最新版本为Python 3.7.2,如图1-1所示。

步骤B:由于我们使用的是Windows系统,因此需要下载Windows版本的Python,在上一步骤的基础上,鼠标指针移动到【Windows】选项并单击,之后将进入版本选择的界面,如图1-2所示。

步骤C:进入版本选择的界面后,选择需要的版本进行下载。由于本书中所使用的是Python 3.6.4,因此需要找到3.6.4版本的Python安装包并下载,如图1-3所示。

图1-1 Python官网首页

图1-2 版本选择页面

图1-3 选择对应的版本

温馨提示:

细心的读者可能会发现,在Python官网下载页面,当前最新版本是3.7,而本书则以3.6版本为主。选用3.6版本,主要有以下几点原因:一是目前Python 3版本中比较稳定且用得比较多的是3.6.x版本,而3.7.x版本比较新,还未完全通用;二是有很多第三方库对3.7.x版本的完全支持性不是特别好,可能会产生某些细节上的错误。所以本书为了后面的示例代码更可靠,选用了3.6版本的Python进行开发。当然版本的选择也并非强制性的,有的读者如果比较喜欢最新版本,则可下载3.7版本进行安装。安装方式与3.6版本是相同的。

2.安装Python

下载完后,双击【python-3.6.4-amd64.exe】运行安装程序,进入安装引导界面,如图1-4所示。

图1-4 Python安装引导界面

接下来,就可以开始安装了,相关的安装步骤如下。

步骤A:选中【Add Python 3.6 to PATH】复选框后单击【Customize installation】选项,会弹出一个可选特性界面,在该界面中可进行选项设置,如图1-5所示。这一步操作的作用是把Python加入系统的PATH环境变量中,如果不选中,就需要手动去配置环境变量。

图1-5 可选特性界面

步骤B:在弹出的可选特性界面中选中所有的复选框,各选项的含义如下。

(1)Documentation:安装Python的帮助文档。

(2)pip:安装Python的第三方包管理工具。

(3)tcl/tk and IDLE:安装Python自带的集成开发环境。

(4)Python test suite:安装Python的标准测试套件。

(5)py launcher和for all users(requires elevation):允许所有用户更新版本。

选中之后单击【Next】按钮进入下一步骤。

步骤C:通过步骤2之后,进入Advanced Options(高级选项)配置界面,保持默认的设置,然后单击【Browse】按钮选择安装路径,如图1-6所示。

图1-6 高级选项配置界面

步骤D:单击【Install】按钮进行安装,安装过程会持续一段时间。安装完成后,在控制台打开cmd命令行窗口,输入“python”,检查是否安装成功。如果安装成功,将会出现类似以下信息的内容,从中可以看到关于所安装的Python版本等信息。

1.1.2 Linux系统下的Python环境安装

Linux系统下的Python环境安装,一般常用的有两种方式:命令安装和源码安装。Linux系统默认装有Python 2.7版本,但是由于我们需要使用3.x版本的Python,因此需要自己安装。使用源码安装Python需要自己编译,而且时间比较长。在这里推荐使用命令安装,这样既简单又快速,可以省去很多步骤。由于Linux系统有众多版本,这里选择性地以Ubuntu/Debian/Deepin为例。下面将分别介绍命令安装和源码安装。

1.命令安装

使用命令在Ubuntu下安装Python的相关步骤如下。

步骤A:在使用命令安装之前,需要先打开Linux命令行。由于本书所使用的是一台云服务器上的Ubuntu,因此需要使用xshell工具去连接,连接后,默认就是一个命令行界面,如图1-7所示。如果用户是在自己的虚拟机上安装的Ubuntu,则可以按【Ctrl+Alt+T】组合键直接打开命令行。

图1-7 Linux命令行界面

步骤B:打开命令行之后,切换到root用户,直接输入命令“sudo su”即可切换,如图1-8所示,如果默认是使用root用户登录的,则可以省略此步骤。

图1-8 切换root用户

步骤C:接下来输入命令:

在apt-get update执行完成之后,输入下面的命令,安装Python 3所需要的一些依赖环境。

此命令成功执行完毕后将会出现如图1-9所示的内容。

图1-9 安装Python63所需的依赖环境

步骤D:紧接着继续输入命令:

等待安装。安装过程会持续一段时间,执行完命令后,Python 3就安装完成了。最后还要测试一下是否安装成功,直接输入“python3”,如图1-10所示,如果安装成功将会看到相关的版本信息。

图1-10 测试是否安装成功

步骤E:继续安装pip3。pip是一个现代的、通用的Python包管理工具,提供了对Python包的查找、下载、安装、卸载的功能。这里还是使用命令安装,输入命令:

执行完命令后,测试一下pip是否安装成功,输入命令“pip3 list”,如果出现类似如图1-11所示的内容,则代表安装成功。

图1-11 测试pip是否安装成功

2.源码安装

源码安装需要去官网手动下载相应的安装包,官网地址为https://www.python.org,进入官网选择相应的版本下载。这里以3.6.4版本为例,源码安装的相关步骤如下。

步骤A:例如,这里将Python源码文件下载到了/home/download_files路径下,接下来使用以下命令进行解压,解压完成之后,当前路径将会出现一个名为“Python-3.6.4”的目录,然后可以用“cd”命令切换到“Python-3.6.4”目录下。为了验证解压的文件是否有缺失,可以使用“ls”命令查看一下,如图1-12所示。

图1-12 解压后的路径

步骤B:创建Python 3安装路径,然后编译并安装,整个过程可能会有点长。相关命令如下所示,依次执行以下命令即可。在执行完“sudo make install”命令之后,等待一段时间,如果出现如图1-13所示的内容,则代表已经将Python 3安装成功。

图1-13 安装完成界面

步骤C:安装完毕后,还需要创建软链接,创建软链接的作用类似于Windows下的环境变量,相关命令如下。

步骤D:同样与Windows环境下安装一样,在安装完Python 3之后,也需要安装一个工具pip进行包管理,pip的下载地址为https://github.com/pypa/pip/archive/9.0.1.tar.gz。下载完成之后,依次执行以下命令进行pip的安装。

步骤E:安装完pip3后,再创建pip3的软链接,相关命令如下。

关于源码安装Python的步骤到此就结束了,最后测试一下是否安装成功,如图1-14所示,直接输入“python3”。

图1-14 测试Python是否安装成功

1.1.3 Mac OS X系统搭建Python 3

在不同的操作系统中,Python存在细微的差别。这里将介绍使用Mac的Python版本,并简要介绍Python 3的安装步骤。Mac系统下安装Python比较简单,比Windows系统下会少些步骤,因为Mac系统跟Linux系统有不少相似之处,有些东西集成得比较好,不需要特意手动配置,相关的安装步骤如下。

步骤A:安装之前需要到官网去下载,双击下载好的安装包进入安装引导界面,如图1-15所示,这里以Python 3.7版本为例。

图1-15 Python Mac安装引导界面

步骤B:单击【继续】按钮,阅读完相关的条款协议后,保持默认设置,进行安装,可以看到Mac系统下的安装步骤要比Windows系统下简单一些,直接就可以进行安装了,如图1-16所示。

图1-16 安装Python

步骤C:安装完成后,就能在应用程序目录下看到关于Python的文件,如图1-17所示。

图1-17 查看Python

步骤D:打开命令行,输入“python3”进行测试,看看是否安装成功,如果安装成功,则会出现类似如图1-18所示的内容。

图1-18 测试Python是否安装成功

温馨提示:

因为本书中所涉及的示例均是在Window 10系统下开发的,所以这里建议读者在练习时,可以优先选用Windows系统,毕竟在实际工作中,公司所配置的计算机最常用的还是Windows系统。而对于Mac系统,在实际的项目开发过程中,在安装Python的某些库时,系统本身可能会出现一些问题而不利于读者学习。所以建议初学者学习时可以选用Windows系统,以减少学习时的障碍。

1.1.4 IDE开发工具介绍

安装好Python环境后,需要一个编辑代码的IDE工具。理论上使用任何一款文本编辑器都可以,如记事本、Notepad++等。这里推荐使用用于Python开发的专属工具PyCharm,它是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,功能包括调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等。此外,该IDE还提供了一些高级功能。PyCharm官方正版是收费的,社区版本是可以免费使用的。下面将会讲解PyCharm的基本用法。

关于PyCharm的安装方法这里不做讲解,与安装其他软件的方法一样,下载好之后直接打开进行安装,各种选项保持默认状态即可。

温馨提示:

在使用PyCharm之前,需要注意的是,PyCharm是运行在JVM虚拟机上的,所以需要安装Java的JDK,否则会打不开PyCharm。关于JDK的安装这里不做讲解,可在网络上查询具体操作。

PyCharm安装好后,默认在桌面创建一个快捷方式启动图标,如图1-19所示。

图1-19 PyCharm桌面快捷图标

安装好PyCharm后,下面讲解PyCharm的简单基本操作。创建第一个py文件并编写测试代码运行,相关的步骤如下。

步骤A:打开PyCharm,初始界面如图1-20所示,选择【Create New Project】选项创建一个新项目,并在【Location】文本框后面选择路径设置一个项目名称,项目名称自由设定,有意义就行。例如,设置为“test_project”,如图1-21所示,单击【Create】按钮完成创建。

图1-20 PyCharm初始界面

图1-21 创建新项目

步骤B:创建完项目后,就正式进入了PyCharm的项目工作区。这时仅仅是创建了一个空的项目,还没有相关的py代码文件。而本小节的目的是要创建一个py文件并编写代码测试运行,所以需要使用鼠标右击刚才创建的项目名称【test_project】,在弹出的菜单中执行【New】→【Python File】命令,进行py文件创建。这里以创建的一个test.py文件为例,如图1-22所示。

图1-22 创建py文件

步骤C:打开步骤2创建好的test.py文件,就可以在其中编写代码了,如在这里添加以下代码:

编写好代码后,右击“test.py”文件,选择【Run'test'】选项运行文件,如图1-23所示。

图1-23 运行test

运行之后就会在底部控制台看到输出了“hello word”字样,如图1-24所示,至此就完成了在PyCharm中创建项目并运行。

图1-24 控制台

1.2 Python编程入门

Python是一种计算机程序设计语言,是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。由于Python语法简洁,拥有众多第三方库,因此Python能够快速地完成需求,达到目的,人们经常使用它编写爬虫数据分析等程序。本节将对Python的基础语法和使用方法做大致的讲解,为后面的爬虫编写做铺垫。

1.2.1 第一个Python程序

在1.1节Python环境的搭建安装中,已经默认安装了一个交互式环境的IDE,可以在上面直接写代码。至于安装PyCharm只是本书推荐,因为通过PyCharm能更方便地管理调试项目代码。接下来,在1.1.4小节创建的“test.py”中输入“print(100+1)”并运行,看看计算结果是不是101。

运行后控制台会输出:

运行代码后,将会得到结果:101。可以发现,任何有效的数学计算都可以计算出来。如果想打印文字,可以通过print()方法打印出来,在print()方法中将文字通过单引号或双引号括起来。例如:

运行后控制台会输出:

在程序中,像这种使用单引号或双引号括起来的文本被称为字符串,在今后的编程中会经常遇到,程序中所使用的一切符号如引号、括号等,必须在英文输入法状态下输入,否则会报语法错误。

1.2.2 Python注释

注释的目的是让人们能够轻松地读懂每一行代码,也就是说,让人看了能知道这些代码的作用是什么。而计算机在执行程序时会自动忽略它,不会去执行,同时也是为后期代码维护提供便利,提高工作效率。在Python中,单行注释以“#”开头,例如:

多行注释用3个单引号'''或3个双引号"""将注释括起来,例如:

1.2.3 数据类型和变量

前面了解到Python简单语法能够打印出“hello world”,接下来,看看它都有哪些数据类型和变量,是怎样定义的。

1.数据类型

在计算机中,以位(0或1)表示数据,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程时,需要用大数据时才需要申请大内存。按内存不同将数据分类,可以充分利用内存。例如,胖的人必须睡双人床,就给他双人床;瘦的人单人床就够了,就给他单人床,这样才能物尽其用。在Python中,能够直接处理的数据类型有以下几种。

(1)整数。

Python可以处理任意大小的整数,在程序中的表示方法和数学上的写法一样,例如,1、100、-8080、0等。

由于计算机使用二进制编码,因此,有时用十六进制表示整数比较方便,十六进制用0x前缀和0~9、a~f表示,例如,0xff00、0xa5b4c3d2等。

(2)浮点数。

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,例如,1.23×10 9 和12.3×10 8 是相等的。浮点数可以用数学写法,如1.23、3.14、-9.01等。但是对于很大或很小的浮点数,就必须用科学计数法来表示,把10用e替代,1.23×10 9 就是1.23e9或12.3e8,0.000012也可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法也是精确的),而浮点数运算则可能会有四舍五入的误差。

(3)字符串。

字符串是以''或""括起来的任意文本,如'abc'、"xyz"等。需要注意的是,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a、b、c这3个字符。如果'本身也是一个字符,那么就可以用""括起来,例如,“I'm OK”包含的字符是I、'、m、空格、O、K这6个字符。

如果字符串内部包含单引号“'”或双引号“"”,那么就可以用转义字符“\”来标识,例如:

运行后控制台会输出:

转义字符“\”可以转义很多字符,如\n、\t、\\等。读者可以使用print()方法打印出来看一看。

(4)布尔值。

布尔值和布尔代数的表示完全一致,一个布尔值只有True和False两种值。在Python中,可以直接用True、False表示布尔值(注意大小写),也可以通过布尔运算计算出来,例如:

运行后控制台会输出:

布尔值还可以用and、or和not运算。and运算是与运算,只有所有都为True, and运算结果才是True,例如:

运行后控制台会输出:

or运算是或运算,只要其中有一个为True, or运算结果就是True,例如:

运行后控制台会输出:

not运算是非运算,它是一个单目运算符,把True变成False, False变成True,例如:

运行后控制台会输出:

(5)空值。

空值是Python中一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,后面将会详细介绍。

2.变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中)。但另外一些语言可能使用其他概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。

在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。变量在程序中是用一个变量名表示的,变量名必须是大小写英文、数字和_的组合,且不能用数字开头,例如:

这里将1赋值给变量a,所以a就是一个整数。同理,变量b等于字符串“hello”、变量c1等于布尔值True。在Python中,等号“=”是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如:

这种变量本身类型不固定的语言称为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值时类型不匹配,就会报错。

1.2.4 字符串和编码

前面了解了关于Python数据类型和变量的知识,也提到过字符串,接下来看看关于字符串和编码的更多知识。

1.字符串

字符串是Python中最常用的数据类型,可以使用单引号或双引号来创建字符串。创建字符串时只要为变量分配一个值即可。例如:

字符串创建好后,还可以对它进行一些操作,如访问字符串、转义、更新、格式化等。

(1)Python访问字符串中的值。

Python访问字符串,可以使用方括号来截取字符串,例如:

运行后控制台会输出:

(2)Python字符串更新。

可以截取字符串的一部分与其他字段拼接,例如:

运行后控制台会输出:

(3)Python转义字符。

需要在字符中使用特殊字符时,Python用反斜杠(\)转义字符,如表1-1所示。

表1-1 Python转义字符表

如输入带引号的字符串,就需要使用到“\”进行转义,例如:

运行后控制台会输出:

(4)Python字符串格式化。

Python支持格式化字符串的输出。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入一个有字符串格式符%s的字符串中。例如:

运行后控制台会输出:

Python字符串格式化符号如表1-2所示。

表1-2 Python字符串格式化符号

2.编码

字符串也是一种数据类型,但是字符串比较特殊的是还有编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字。最早的计算机在设计时采用8个比特(bit)作为一个字节(Byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。例如,两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。

由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机中,也就是大小写英文字母、数字和一些符号,这个编码被称为ASCII编码,例如,大写字母A的编码是65,小写字母z的编码是122。

但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

全世界有上百种语言,日本把日文编到Shift_JIS中,韩国把韩文编到EUC-KR中,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

因此,Unicode应运而生。Unicode把所有语言都统一到一套编码中,这样就不会再有乱码问题了。Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

ASCII编码和Unicode编码的区别是:ASCII编码是一个字节,而Unicode编码通常是两个字节。举例如下。

(1)字母A用ASCII编码是十进制的65,二进制的01000001。

(2)字符0用ASCII编码是十进制的48,二进制的00110000。需要注意的是,字符'0'和整数0是不同的。

(3)汉字中已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101。

可以猜测,如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001。

新的问题又出现了:如果统一用Unicode编码,乱码问题从此消失了。但是,如果文本基本上全部是英文,那么用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

所以,为了节省空间,又出现了将Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1~6个字节,常用的英文字母被编码成一个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4~6个字节。如果要传输的文本包含大量英文字符,用UTF-8编码就能节省很多空间,如表1-3所示。

表1-3 编码对比表

从表1-3中还可以发现,UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的软件可以在UTF-8编码下继续工作。

清楚了ASCII、Unicode和UTF-8的关系,就可以总结一下现在计算机系统通用的字符编码工作方式:在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或需要传输时,就转换为UTF-8编码。用记事本编辑时,从文件读取的UTF-8字符被转换为Unicode字符保存到内存中,编辑完成后,保存时再把Unicode字符转换为UTF-8字符保存到文件中。

1.2.5 列表

序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字,即它的位置或索引,第一个索引是0,第二个索引是1,依此类推。Python有6个序列的内置类型,但最常见的是列表和元组。序列都可以进行的操作包括索引、切片、加、乘和检查成员。

此外,Python已经内置确定序列的长度及确定最大和最小的元素的方法。列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型。

1.创建列表

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。例如:

2.访问列表中的值

使用下标索引来访问列表中的值,同样也可以使用方括号的形式截取字符。例如:

运行后控制台会输出:

3.更新列表

对列表的数据项进行修改或更新,可以使用append()方法来添加列表项,例如:

运行后控制台会输出:

4.删除列表元素

可以使用del语句来删除列表的元素,例如:

运行后控制台会输出:

1.2. 元组

元组与列表类似,不同之处在于元组的元素不能修改。元组写在圆括号()中,元素之间用逗号隔开。

1.创建元组

元组的创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。例如:

运行后控制台会输出:

元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。

2.访问元组

如果想要访问元组中的元素,可以像访问列表元素一样使用下标或切片来访问。例如:

运行后控制台会输出:

元组一经定义是不能修改和删除的,所以在使用元组时一定要慎重,要用在合适的地方。

1.2.7 字典

字典是一种可变容器模型,且可存储任意类型的对象,用“{}”标识。字典是一个无序的键(key):值(value)对的集合。

1.创建字典

下面通过一个简单的示例来说明如何创建一个字典,示例中的name和age为键(key),张三和23为值(value)。

运行后控制台会输出:

2.字典新增值

字典增加数据时可以用以下方法,例如:

运行后控制台会输出:

3.字典删除数据

字典删除数据时可以使用del函数,例如:

运行后控制台会输出:

字典平常在实际开发中使用得非常多,它的格式与JSON格式一样,所以解析起来特别方便和快捷。

1.2.8 条件语句

Python条件语句是通过一条或多条语句的执行结果(True或False)来决定执行的代码块。使用if语句来进行判断,在Python中if语句的一般格式如下。

如果“condition_1”为True,将执行“statement_block_1”块语句;如果“condition_1”为False,将判断“condition_2”;如果“condition_2”为True,将执行“statement_block_2”块语句;如果“condition_2”为False,将执行“statement_block_3”块语句。

以下是一个简单的if示例。

运行后控制台会输出:

从结果可以看出,由于变量var2为0,因此对应的if内的语句没有执行。if中常用的运算符如表1-4所示。

表1-4 if运算符

在Python中要注意缩进,一般情况下是4个空格,条件语句根据缩进来判断执行语句归属。

1.2.9 循环语句

Python中的循环语句有for和while。Python循环语句的控制结构如图1-25所示。

图1-25 Python循环语句的控制结构

1.for循环

在Python中for循环可以遍历任何序列的项目,如一个列表或一个字符串。for循环的一般格式如下。

下面用for语句实现打印出1~10的数字。

运行后控制台会输出:

其中range表示范围,1~10的数,x表示从1开始迭代,每迭代一次,x就会加1,直到x变成了10结束,因此x=10时不执行语句,for循环是9次迭代。

如果是列表或字典,就不用range()函数,直接用列表或字典,此时x表示列表或字典的元素,代码如下。

运行后控制台会输出:

2.while循环

在Python中while循环的一般格式如下。

同样地,需要注意冒号和缩进。另外,在Python中没有do……while循环。以下示例使用了while来计算1~100的总和。

运行后控制台会输出:

还可以通过设置条件表达式永远不为False来实现无限循环,示例如下。

运行后控制台会输出:

3.while循环使用else语句

while……else在条件语句为False时执行else的语句块,示例如下。

运行后控制台会输出:

1.2.10 函数

函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。函数能提高应用的模块性和代码的重复利用率。Python提供了许多内建函数,如print(),但也可以自己创建函数,这被称为用户自定义函数。

1.定义函数

要定义一个有自己想要功能的函数,以下是简单的规则。

(1)函数代码块以def关键词开头,后接函数标识符名称和圆括号()。

(2)任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

(3)函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明。

(4)函数内容以冒号起始,并且缩进。

(5)return[表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。

Python定义函数使用def关键字,一般格式如下。

默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。例如,使用函数来输出“Hello World!”,示例代码如下。

2.调用函数

定义一个函数:给函数指定一个名称,指定函数中包含的参数和代码块结构。这个函数的基本结构定义完成以后,可以通过另一个函数调用执行,也可以直接从Python命令提示符执行。以下示例调用了printme()函数。

运行后控制台会输出:

1.2.11 类

Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。

1.类的定义

定义类的语法格式如下。

类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。例如,定义一个学生类Student。

2.类对象

类对象支持两种操作:属性引用和实例化。属性引用使用Python中所有的属性引用一样的标准语法:obj.name。类对象创建后,类命名空间中所有的命名都是有效属性名。所以如果类定义为:

以上创建了一个新的类实例并将该对象赋给局部变量x, x为空的对象。

运行后控制台会输出:

类有一个名为__init__()的特殊方法(构造方法),该方法在类实例化时会自动调用,具体如下。

类定义了__init__()方法,类的实例化操作会自动调用__init__()方法。如下实例化类MyClass对应的__init__()方法就会被调用。

当然,__init__()方法可以有参数,参数通过__init__()传递到类的实例化操作上。例如:

self代表类的实例,而非类,类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,按照惯例它的名称是self。

3.类方法

在类的内部,使用def关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数,self代表的是类的实例。

运行后控制台会输出:

4.继承

Python同样支持类的继承,如果一种语言不支持继承,类就没有什么意义。派生类的定义如下。

需要注意的是,圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,Python从左到右搜索,即方法在子类中未找到时,从左到右查找基类中是否包含该方法。

BaseClassName(示例中的基类名)必须与派生类定义在一个作用域内。除了类外,还可以用表达式,当基类定义在另一个模块中时这一点非常有用。

示例如下。

运行后控制台会输出:

温馨提示:

由于本书是以爬虫为主,因此关于Python的基础知识只简单介绍。想知道Python更多用法的读者可以去查询Python的官方文档:https://docs.python.org/3。

1.3 新手实训

学习完本章,下面结合前面所讲的知识做几个小的实训练习。

1.使用for循环实现九九乘法表

下面实现用for循环在控制台打印出九九乘法表,效果如下。

要实现这个效果,需要使用两个for循环,相关示例代码如下。

2.判断闰年

在控制台输入一个年份字符串,判断其是否为闰年,如果是闰年,则输出是闰年,否则就输出不是闰年,相关示例代码如下。

运行后控制台会输出:

3.计算二次方程

在控制台输入数字,并计算二次方程,相关示例代码如下。

运行后控制台会输出:

1.4 新手问答

学习完本章之后,读者可能会有以下疑问。

(1)当有许多module,如几百个,想要使用时一个一个导入太麻烦,有没有简便的方法?

答:有,就是将这些模块组织成一个package。其实就是将模块都放在一个目录中,然后再加一个__init__.py文件,Python会将其看作package,使用其中的函数就可以以dotted-attribute方式来访问。

(2)Python写出来的程序是exe可执行文件吗?

答:Python写出来的程序默认是.py文件,需要在命令行运行,如果想使用exe方式运行,可以借助某些工具,例如,py2exe可以将它转换成可执行文件;又如,Cython可以将它转换成C代码编码执行。

(3)Windows 7 64位系统能安装32位的Python开发环境吗?

答:可以。32位的Python能够在Windows 32位和64位上运行,但考虑到兼容性,建议使用64位的Python比较好。

本章小结

本章主要介绍了Python开发环境的搭建、Python常用的基础语法(如基本数据类型、字符串、布尔类型、列表、元组、字典等),以及函数的使用和字符串编码等知识。

本章需要重点掌握的是列表、循环、字典和类,这几个知识点在爬虫中应用非常频繁,所以希望读者多加练习和理解。 aG75eZ9ZS7d422sm4OBsUlTyqRM+mV99Rt73/IktCXVWFbDYI2DtO8lUWQMBkrF9

点击中间区域
呼出菜单
上一章
目录
下一章
×