Python和PyCharm的安装:学会Python和PyCharm的安装方法python
变量和字符串:学会使用变量和字符串的基本用法数据库
函数与控制语句:学会Python循环、判断语句、循环语句和函数的使用小程序
Python数据结构:理解和使用列表、字典、元组和集合浏览器
Python文件操做:学习使用Python创建文件并写入数据安全
Python面向对象:了解Python中类的定义和使用方法数据结构
01 Python与PyCharm安装app
“工欲善其事,必先利其器”,本节介绍Python环境的安装和Python的集成开发环境(IDE)PyCharm的安装。ide
1. Python安装(Windows、Mac和Linux)函数
当前主流的Python版本为2.x和3.x。因为Python 2第三方库更多(不少库没有向Python 3转移),企业广泛使用Python 2。若是做为学习和研究的话,建议使用Python 3,由于它是将来的发展方向。因此本教程选择Python 3的环境。学习
1.1 Windows中安装Python 3
在Windows系统中安装Python 3,请参照下面的步骤进行。
打开浏览器,访问Python官网(https://www.python.org/)。
光标移动至Downloads连接,单击Windows连接。
根据本身的Windows版本(32位或64位),下载相应的Python 3.5版本,如为Windows 32位系统,应下载Windows x86 executable installer,若是为Windows 64位系统,应下载Windows x86-64 executable installer。
单击运行文件,勾选Add Python 3.5 to PATH,而后单击Install Now按钮便可完成安装。
在计算机中打开命令提示符(cmd)窗口,输入python,如图1.1所示,说明Python环境安装成功。
在学习中有迷茫不知如何学习的朋友小编推荐一个学Python的学习q u n 227 -435- 450能够来了解一块儿进步一块儿学习!免费分享视频资料
▲图1.1 运行Python环境
当界面出现提示符>>>时,就代表进入了Python交互式环境,输入代码后按Enter键便可运行Python代码,经过输入exit()并按Enter键,就能够退出Python交互式环境。
注意:若是出现错误,多是由于安装时未勾选Add Python3.5 to PATH选项,此时卸载Python后从新安装时勾选Add Python3.5 to PATH选项便可。
1.2 Mac中安装Python3
Mac系统中自带了Python 2.7,需到Python官网上下载并安装Python 3.5。Mac系统中的安装比Windows更为简单,一直单击“下一步”按钮便可完成。安装完后,打开终端并输入python3,便可进入Mac的Python 3的交互式环境。
1.3 Linux中安装Python 3
大部分Linux系统内置了Python 2和Python 3,经过在终端输入python –version,能够查看当前Python 3的版本。若是须要安装某个特定版本的Python,能够在终端中输入:
sudo apt-get install python3.5
2. PyCharm安装
安装好Python环境后,还须要安装一个集成开发环境(IDE),IDE集成了代码编写功能、分析功能、编译功能和调试功能。在这里向读者推荐一个最智能、好用的Python IDE,叫作PyCharm。进入PyCharm的官网,下载社区版便可:
http://www.jetbrains.com/pycharm/
因为PyCharm上手极为简单,所以就不详细讲解PyCharm的使用方法了。如下讲解如何使用PyCharm关联Python解释器,让PyCharm能够运行Python代码。
打开PyCharm,在菜单栏中选择File ∣ Defalut Settings命令。
在弹出的对话框中选择Project Interpreter,而后在右边选择Python环境,这里选择Python 3.5,单击OK按钮,便可关联Python解释器,如图1.2所示。
▲图1.2 关联Python解释器
02 变量和字符串
本节主要介绍Python变量的概念、字符串的基本使用方法、字符串的切片和索引,以及字符串的几种经常使用方法。
1. 变量
Python中的变量很好理解,例如:
a = 1
这种操做称为赋值,意思为将数值1赋给了变量a。
注意:Python中语句结束不须要以分号结束,变量不须要提早定义。
如今有变量a和变量b,能够经过下面代码进行变量a、b值的对换。
a = 4
b = 5
t = a #把a值赋给t变量
a = b #把b值赋给a变量
b = t #把t值赋给b变量
print(a,b)
# result 5 4
这种方法相似于将两个杯子中的饮料对换,只须要多加一个杯子,便可完成饮料的对换工做。
2. 字符串的“加法”和“乘法”
因为Python爬虫的对象大部分为文本,因此字符串的用法尤其重要。在Python中,字符串由双引号或单引号和引号中的字符组成。首先,经过下面代码看看字符串的“加法”:
a = 'I'
b = ' love'
c = ' Python'
print(a + b + c) #字符串相加
# result I love Python
在爬虫代码中,会常常构造URL,例如,在爬取一个网页连接时,只有一部分/u/9104ebf5e177,这部分连接是没法访问的,还须要http://www.jianshu.com,这时能够经过字符串的“加法”进行合并。
注意:此网站为笔者的简书首页。
Python的字符串不只能够相加,也能够乘以一个数字:
a = 'word'
print(a*3) #字符串乘法
#result wordwordword
字符串乘以一个数字,意思就是将字符串复制这个数字的份数。
3. 字符串的切片和索引
字符串的切片和索引就是经过string[x],获取字符串的一部分信息:
a = 'I love python'
print(a[0]) #取字符串第一个元素
#result I
print(a[0:5]) #取字符串第一个到第五个元素
#result I lov
print(a[-1]) #取字符串最后一个元素
#result n
经过图1.3就能清楚地理解字符串的切片和索引。
▲图1.3 字符串切片和索引
注意:a[0:5]中的第5个是不会选择的。
在爬虫实战中,常常会经过字符串的切片和索引,提取须要的部分,剔除一些不须要的部分。
4. 字符串方法
Python做为面向对象的语言,每一个对象都有相应的方法,字符串也同样,拥有多种方法,在这里介绍爬虫技术中经常使用的几种方法。
4.1 split()方法
a = 'www.baidu.com'
print(a.split('.'))
# result ['www', 'baidu', 'com']
字符串的split()方法就是经过给定的分隔符(在这里为‘.’),将一个字符串分割为一个列表(后面将详细讲解列表)。
注意:若是没有提供任何分隔符,程序会把全部的空格做为分隔符(空格、制表、换行等)。
4.2 repalce()方法
a = 'There is apples'
b = a.replace('is','are')
print(b)
# result There are apples
这种方法相似文本中的“查找和替换”功能。
4.3 strip()方法
a = ' python is cool '
print(a.strip())
# result python is cool
strip()方法返回去除两侧(不包括内部)空格的字符串,也能够指定须要去除的字符,将它们列为参数中便可。
a = '***python *is *good***'
print(a.strip('*!'))
# result python *is *good
这个方法只能去除两侧的字符,在爬虫获得的文本中,文本两侧常会有多余的空格,只需使用字符串的strip()方法便可去除多余的空格部分。
4.4 format()方法
最后,再讲解下好用的字符串格式化符,首先看如下代码:
a = '{} is my love'.format('Python')
print(a)
# result Python is my love
字符串格式化符就像是作选择题,留了空给作题者选择。在爬虫过程当中,有些网页连接的部分参数是可变的,这时使用字符串格式化符能够减小代码的使用量。
例如,Pexels素材网(https://www.pexels.com/),当搜索图片时,网页连接也会发生变化,如在搜索栏中输入book,网页跳转为https://www.pexels.com/search/book/,能够设计以下代码,笔者只需输入搜索内容,即可返回网页连接。
content = input('请输入搜索内容:')
url_path = 'https://www.pexels.com/search/{}/'.format(content)
print(url_path)
运行程序并输入book,即可返回网页连接,单击网页连接即可访问网页了,如图1.4所示。
▲图1.4 字符串格式化符演示
03 函数与控制语句
本节主要介绍Python()函数的定义与使用方法,介绍Python的判断和循环两种爬虫技术中经常使用的控制语句。
1. 函数
“脏活累活交给函数来作”,首先,看看Python中定义函数的方法。
def 函数名(参数1,参数2...):
return '结果'
制做一个输入直角边就能计算出直角三角形的面积函数:
def function(a,b):
return '1/2*a*b'
#也能够这样写
def function(a,b):
print( 1/2*a*b)
注意:读者不须要太纠结两者的区别,用return是返回一个值,而第二个是调用函数执行打印功能。
经过输入function(2,3),即可以调用函数,计算直角边为2和3的直角三角形的面积。如今来作一个综合练习:读者都知道网上公布的电话号码,如156****9354,中间的数值用其余符号代替了,而用户输入手机号时倒是完整地输入,下面就经过Python()函数来实现这种转换功能。
def change_number(number):
hiding_number = number.replace(number[3:7],'*'*4)
print(hiding_number)
change_number('15648929354')
# result 156****9354
注意:这里的手机号码是随意输入的,不是真实的号码。
代码说明以下:
定义了一个名为change_number的函数。
对输入的参数进行切片,把参数的[3:7]部分替换为‘*’号,并打印出来。
调用函数。
2. 判断语句
在爬虫实战中也会常用判断语句,Python的判断语句格式以下:
if condition:
do
else:
do
# 注意:冒号和缩进不要忘记了
# 再看一下多重条件的格式
if condition:
do
elif condition:
do
else:
do
在平时使用密码时,输入的密码正确便可登陆,密码错误时就须要再次输入密码。
def count_login():
password = input('password:')
if password == '12345':
print('输入成功!')
else:
print('错误,再输入')
count_login()
count_login()
程序说明以下:
运行程序,输入密码后按Enter键。
若是输入的字符串为12345,则打印“输入成功!”,程序结束。
若是输入的字符串不是12345,则打印“错误,再输入”,继续运行程序,直到输入正确为止。
读者也能够将程序设计得更为有趣,例如,“3次输入失败后,退出程序”等。
3. 循环语句
Python的循环语句包括for循环和while循环,代码以下:
#for循环
for item in iterable:
do
#item表示元素,iterable是集合
for i in range(1,11):
print(i)
#其结果为依次输出1到10,切记11是不输出的,range为Python内置函数
#while循环
while condition:
do
例如,设计一个小程序,计算1~100的和:
i = 0
sum = 0
while i < 100:
i = i + 1
sum = sum + i
print(sum)
# result 5050
04 Python数据结构
数据结构是存放数据的容器,本节主要讲解Python的4种基本数据结构,即列表、字典、元组和集合。
1. 列表
在爬虫实战中,使用最多的就是列表数据结构,不管是构造出的多个URL,仍是爬取到的数据,大多数都为列表数据结构。下面首先介绍列表最显著的特征:
列表中的每个元素都是可变的。
列表的元素都是有序的,也就是说每一个元素都有对应的位置(相似字符串的切片和索引)。
列表能够容纳全部的对象。
列表中的每一个元素都是可变的,这意味着能够对列表进行增、删、改操做,这些操做在爬虫中不多使用,所以这里再也不给读者添加知识负担。
列表的每一个元素都有对应的位置,这种用法与字符串的切片和索引很类似。
list = ['peter', 'lilei', 'wangwu', 'xiaoming']
print(list[0])
print(list[2:])
# result
peter
['wangwu', 'xiaoming']
若是为切片,返回的也是列表的数据结构。
列表能够容纳全部的对象:
list = [
1,
1.1,
'string',
print(1),
True,
[1, 2],
(1, 2),
{'key', 'value'}
]
列表中会常常用到多重循环,所以读者有必要去了解和使用多重循环。如今,摆在读者面前有两个列表,分别是姓名和年龄的列表:
names = ['xiaoming','wangwu','peter']
ages = [23,15,58]
这时能够经过多重循环让name和age同时打印在屏幕上:
names = ['xiaoming','wangwu','peter']
ages = [23,15,58]
for name, age in zip(names, ages):
print(name,age)
# result
xiaoming 23
wangwu 15
peter 58
注意:多重循环先后变量要一致。
在爬虫中,常常请求多个网页,一般状况下会把网页存到列表中,而后循环依次取出并访问爬取数据。这些网页都有必定的规律,若是是手动将这些网页URL存入到列表中,不只花费太多时间,也会形成代码冗余。这时可经过列表推导式,构造出这样的列表,例如某个网站每页的URL是这样的(一共13页):
http://bj.xiaozhu.com/search-duanzufang-p1-0/http://bj.xiaozhu.com/search-duanzufang-p2-0/http://bj.xiaozhu.com/search-duanzufang-p3-0/http://bj.xiaozhu.com/search-duanzufang-p4-0/……
经过如下代码便可构造出13页URL的列表数据:
urls = ['http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(number) for number in range(1,14)]
for url in urls:
print(url)
经过一行代码便可构造出来,经过for循环打印出每一个URL,如图1.5所示。
▲图1.5 列表推导式构造URL列表
注意:本网站为小猪短租网。
2. 字典
Python的字典数据结构与现实中的字典相似,以键值对('key'-'value')的形式表现出来。本文中只讲解字典的创造,字典的操做在后面会详细介绍。字典的格式以下:
user_info = {
'name':'xiaoming',
'age':'23',
'sex':'man'
}
注意:插入MongoDB数据库需用字典结构。
3. 元组和集合
在爬虫中,元组和集合不多用到,所以这里只作简单介绍。元组相似于列表,可是元组的元素不能修改只能查看,元组的格式以下:
tuple = (1,2,3)
集合的概念相似数学中的集合。每一个集合中的元素是无序的,不能够有重复的对象,所以能够经过集合把重复的数据去除。
list = ['xiaoming','zhangyun','xiaoming']
set = set(list)
print(set)
# result {'zhangyun', 'xiaoming'}
注意:集合是用大括号构建的。
05 Python文件操做
在爬虫初期的工做中,经常会把数据存储到文件中。本节主要讲解Python如何打开文件和读写数据。
1. 打开文件
Python中经过open()函数打开文件,语法以下:
open(name[, mode[, buffering]])
open()函数使用文件名做为惟一的强制参数,而后返回一个文件对象。模式(mode)和缓冲(buffering)是可选参数。在Python的文件操做中,mode参数的输入是有必要的,而buffering使用较少。
若是在本机上有名为file.txt的文件(读者能够在本机中新建一个文本文件),其存储路径为C:UsersAdministratorDesktop,那么能够经过下面代码打开文件:
f = open('C:/Users/Administrator/Desktop/file.txt')
注意:此代码为Windows系统下的路径写法。
若是文件不存在,则会出现如图1.6所示的错误。
▲图1.6 文件不存在报错信息
若是open()函数只是加入文件的路径这一个参数,则只能打开文件并读取文件的相关内容。若是要向文件中写入内容,则必须加入模式这个参数了。下面首先来看看open()函数中模式参数的经常使用值,如表1.1所示。
▲表1.1 open()函数中模式参数的经常使用值
2. 读写文件
上一节中有了名为f的类文件对象,那么就能够经过f.write()方法和f.read()方法写入和读取数据了。
f = open('C:/Users/Administrator/Desktop/file.txt','w+')
f.write('hello world')
这时,在本机上打开file.txt文件,能够看到如图1.7所示的结果。
▲图1.7 Python写文件
注意:若是没有创建文件,运行上面代码也能够成功。
若是再次运行程序,txt文件中的内容不会继续添加,能够修改模式参数为'r+',即可一直写入文件。
Python读取文件经过read()方法,下面尝试把f的类文件对象写入的数据读取出来,使用以下代码便可完成操做:
f = open('C:/Users/Administrator/Desktop/file.txt','r')
content = f.read()
print(content)
# result hello world
3. 关闭文件
当完成读写工做后,应该牢记使用close()方法关闭文件。这样能够保证Python进行缓冲的清理(出于效率考虑而把数据临时存储在内存中)和文件的安全性。经过下面代码便可关闭文件。
f = open('C:/Users/Administrator/Desktop/file.txt','r')
content = f.read()
print(content)
f.close()
06 Python面向对象
Python做为一个面向对象的语言,很容易建立一个类和对象。本节主要讲解类的定义及其相关使用方法。
1. 定义类
类是用来描述具备相同属性和方法的对象集合。人能够经过不一样的肤色划分为不一样的种族,食物也有不一样的种类,商品也是形形色色。但划分为同一类的物体,确定具备类似的特征和行为方式。
对于同一款自行车而言,它们的组成结构都是同样的,如车架、车轮和脚踏板等。经过Python能够定义这个自行车的类:
class Bike:
compose = ['frame','wheel','pedal']
经过使用class定义一个自行车的类,类中的变量compose称为类的变量,专业术语为类的属性。这样,顾客购买的自行车组成结构就是同样的了。
my_bike = Bike()
you_bike = Bike()
print(my_bike.compose)
print(you_bike.compose) #类的属性都是同样的
结果如图1.8所示。
▲图1.8 类属性引用
在左边写上变量名,右边写上类的名称,这个过程称之为类的实例化,而my_bike就是类的实例。经过“.”加上类的属性,就是类属性的引用。类的属性会被类的实例共享,因此结果都是同样的。
2. 实例属性
对于同一款自行车来讲,有些顾客买回去后会改造下,如加一个车筐能够放东西等。
class Bike:
compose = ['frame','wheel','pedal']
my_bike = Bike()
my_bike.other = 'basket'
print(my_bike.other) #实例属性
结果如图1.9所示。
▲图1.9 实例属性
说明:经过给类的实例属性进行赋值,也就是实例属性。compose属性属于全部的该款自行车,而other属性只属于my_bike这个类的实例。
3. 实例方法
读者是否还记得字符串的format()方法。方法就是函数,方法是对实例进行使用的,因此又叫实例方法。对于自行车而言,它的方法就是骑行。
class Bike:
compose = ['frame','wheel','pedal']
def use(self):
print('you are riding')
my_bike = Bike()
my_bike.use()
结果如图1.10所示。
▲图1.10 实例方法
注意:这里的self参数就是实例自己。
和函数同样,实例方法也是能够有参数的。
class Bike:
compose = ['frame','wheel','pedal']
def use(self,time):
print('you ride {}m'.format(time*100))
my_bike = Bike()
my_bike.use(10)
结果如图1.11所示。
▲图1.11 实例方法多参数
Python的类中有一些“魔法方法”,_init_()方法就是其中之一。在咱们创造实例的时候,不须要引用该方法也会被自动执行。
class Bike:
compose = ['frame','wheel','pedal']
def __init__(self):
self.other = 'basket'
def use(self,time):
print('you ride {}m'.format(time*100))
my_bike = Bike()
print(my_bike.other)
结果如图1.12所示。
▲图1.12 魔术方法
4. 类的继承
共享单车的出现,方便了人们的出行。共享单车和原来的自行车组成结构相似,但多了付费的功能。
class Bike:
compose = ['frame','wheel','pedal']
def __init__(self):
self.other = 'basket' #定义实例的属性
def use(self,time):
print('you ride {}m'.format(time*100))
class Share_bike(Bike):
def cost(self,hour):
print('you spent {}'.format(hour*2))
bike = Share_bike()
print(bike.other)
bike.cost(2)
结果如图1.13所示。
▲图1.13 类的继承
在新的类Share_bike后面的括号中加入Bike,表示Share_bike继承了Bike父类。父类中的变量和方法能够彻底被子类继承,在特殊状况下,也能够对其覆盖