导读:本文立足基础,讲解Python和PyCharm的安装,及Python最简单的语法基础和爬虫技术中所需的Python语法。

作者:罗攀 蒋仟

如需转载请联系华章科技

本文涉及的主要知识点如下:

  • Python和PyCharm的安装:学会Python和PyCharm的安装方法
  • 变量和字符串:学会使用变量和字符串的基本用法
  • 函数与控制语句:学会Python循环、判断语句、循环语句和函数的使用
  • Python数据结构:理解和使用列表、字典、元组和集合
  • Python文件操作:学习使用Python建立文件并写入数据
  • Python面向对象:了解Python中类的定义和使用方法

01 Python与PyCharm安装

“工欲善其事,必先利其器”,本节介绍Python环境的安装和Python的集成开发环境(IDE)PyCharm的安装。

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,请参照下面的步骤进行。

  1. 打开浏览器,访问Python官网(https://www.python.org/)。
  2. 光标移动至Downloads链接,单击Windows链接。
  3. 根据自己的Windows版本(32位或64位),下载相应的Python 3.5版本,如为Windows 32位系统,应下载Windows x86 executable installer,如果为Windows 64位系统,应下载Windows x86-64 executable installer。
  4. 单击运行文件,勾选Add Python 3.5 to PATH,然后单击Install Now按钮即可完成安装。

在计算机中打开命令提示符(cmd)窗口,输入python,如图1.1所示,说明Python环境安装成功。

▲图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代码。

  1. 打开PyCharm,在菜单栏中选择File ∣ Defalut Settings命令。
  2. 在弹出的对话框中选择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 = 4b = 5t = 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 Iprint(a[0:5]) #取字符串第一个到第五个元素#result I lovprint(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

注意:这里的手机号码是随意输入的,不是真实的号码。

代码说明如下:

  1. 定义了一个名为change_number的函数。
  2. 对输入的参数进行切片,把参数的[3:7]部分替换为‘*’号,并打印出来。
  3. 调用函数。

2. 判断语句

在爬虫实战中也会经常使用判断语句,Python的判断语句格式如下:

if condition: doelse: do# 注意:冒号和缩进不要忘记了
# 再看一下多重条件的格式if condition: doelif condition: doelse: do

在平时使用密码时,输入的密码正确即可登录,密码错误时就需要再次输入密码。

def count_login():  password = input('password:')  if password == '12345':  print('输入成功!')  else:  print('错误,再输入')  count_login()count_login()

程序说明如下:

  1. 运行程序,输入密码后按Enter键。
  2. 如果输入的字符串为12345,则打印“输入成功!”,程序结束。
  3. 如果输入的字符串不是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 = 0sum = 0while i < 100: i = i + 1 sum = sum + iprint(sum)# result 5050

04 Python数据结构

数据结构是存放数据的容器,本节主要讲解Python的4种基本数据结构,即列表、字典、元组和集合。

1. 列表

在爬虫实战中,使用最多的就是列表数据结构,不论是构造出的多个URL,还是爬取到的数据,大多数都为列表数据结构。下面首先介绍列表最显著的特征:

  1. 列表中的每一个元素都是可变的。
  2. 列表的元素都是有序的,也就是说每个元素都有对应的位置(类似字符串的切片和索引)。
  3. 列表可以容纳所有的对象。

列表中的每个元素都是可变的,这意味着可以对列表进行增、删、改操作,这些操作在爬虫中很少使用,因此这里不再给读者添加知识负担。

列表的每个元素都有对应的位置,这种用法与字符串的切片和索引很相似。

list = ['peter', 'lilei', 'wangwu', 'xiaoming']print(list[0])print(list[2:])# resultpeter['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)# resultxiaoming 23wangwu 15peter 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:甥敳獲AdministratorDesktop,那么可以通过下面代码打开文件:

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父类。父类中的变量和方法可以完全被子类继承,在特殊情况下,也可以对其覆盖。

关于作者:罗攀,知名论坛Python爬虫专题管理员。擅长Python爬虫技术,并对Python数据分析与挖掘也有研究。曾经在CSDN等多个知名博客网站发表多篇技术文章,深受读者的喜爱。目前从事线上Python网络爬虫的培训工作。蒋仟,喜爱并擅长Python编程,并将Python作为学术研究手段。在数据采集、数据分析等方面均有较为深入的研究。对Python网络爬虫技术应用也颇有心得。目前从事林业遥感技术的研究,并利用业余时间兼职从事Python培训方面的工作。

本文摘编自《从零开始学Python网络爬虫》,经出版方授权发布。

延伸阅读《从零开始学Python网络爬虫》

推荐语:爬虫畅销书,上市1年畅销万余册!带小白一周掌握Python网络爬虫。涵盖爬虫的3大方法/爬取数据的4大存储方式/22个实战案例/30个网站信息提取/64个避坑技巧/2500行代码详解/源代码/PPT。

python split函数 空格_最易懂的Python新手教程:从基础语法到代码详解相关推荐

  1. python split函数 空格_Python随笔29:Python基础编程练习题23~24

    注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. Python编程 Python基础练习题23:求三角形斜边上的高 输入直角三角形两直角边a.b的值,输出斜边上的高,最后结果使用 ...

  2. python split函数 空格_python上手--10行代码读懂红楼梦

    取名10行代码看懂红楼梦,是将介绍使用python代码来读红楼梦获取其主要人物.这里的思想就是词频统计,通过分析红楼梦小说文字中出现最多的词语,来概括说明红楼梦的核心人物和事情.实际上如果你能跟着往下 ...

  3. python split函数用法 (清晰易懂)

    split() 函数,将一个字符串分割成多个子字符串. 其参数split(f,num)) f -- 分隔符,将字符串按照怎样的形式划分,默认为所有的空字符,包括空格,换行等 num -- 按照f分隔符 ...

  4. Python基础语法day02字符串详解和列表

    今天是python基础语法入门第二天,大概总共会有四天左右.四天后就是对于python的numpy库的详细文章.那话不多说,我们开始. 目录 字符串详解 字符串独有功能 检测头尾字符 判断输入结果是否 ...

  5. oracle split函数用法_「干货」Python字符串中的split方法

    前面的文章我们有简单的介绍过什么是字符串.Python字符串的输入方式.Python字符串的拼接方法等今天我们主要分享一下Python字符串中split方法! Python字符串中的方法有很多种,其中 ...

  6. python补齐空格_如何提高使用Python填补时间序列和数据列表中空白的性能

    我有一个时间序列数据集,由几年来的10赫兹数据组成.一年来,我的数据大约有3.1*10^8行数据(每行有一个时间戳和8个浮点值).我的数据有空白,我需要确定并用"NaN"填充.下面 ...

  7. python url编码 空格_使用请求和python时URL中的空格

    URL不能有空格.您使用的curl命令实际上是用一些命令行参数向url https://api.spark.io/v1/devices/xxxxxxxxxxxxxxx/led发出请求(使用-d) -d ...

  8. python索引取值_对pandas的层次索引与取值的新方法详解

    1.层次索引 1.1 定义 在某一个方向拥有多个(两个及两个以上)索引级别,就叫做层次索引. 通过层次化索引,pandas能够以较低维度形式处理高纬度的数据 通过层次化索引,可以按照层次统计数据 层次 ...

  9. python入门2——基础语法2——字符串详解

    目录 前言 字符串 拼接字符串 字符串索引 字符串切片 字符串不可变性 字符串大小转换方法 字符串分割.组合与移除 字符串定位与替换方法 总结 前言 字符串是 Python 中最常用的数据类型.我们可 ...

最新文章

  1. 文档相似度之词条相似度word2vec、及基于词袋模型计算sklearn实现和gensim
  2. Nginx10m+高并发内核优化详解
  3. HRNet-Facial-Landmark-Detection 人脸关键点
  4. STL之函数对象和谓词
  5. python的print函数输出带颜色字体
  6. 设置Cookie请求头报错(Refused to set unsafe header “Cookie“)
  7. 影响机器视觉光源效果的因素有哪些?
  8. 明天发布一个基于Silverlight的类Visio小型绘图工具项目。
  9. python的输出语句
  10. 微信自定义菜单以及自动回复
  11. 阿里云ddns过程记录
  12. 清明:直面骄阳、向死而生
  13. 谈一谈我使用AI得贤招聘官的AI面试体验之旅
  14. 机器学习(一) 贝叶斯法则与概念学习
  15. 打王者荣耀还不过瘾,腾讯绝悟AI这次还拿下了足球世界冠军
  16. 网络爬虫:网页信息获取
  17. The Linux Kernel Module Programming Guide 2.4 中文版
  18. 教资初级中学计算机真题,初中信息技术教资面试真题:VB程序设计语言的操作环境...
  19. 字节跳动寒假日常实习一面面经
  20. Type interface XXXMapper is not known to the MapperRegistry

热门文章

  1. leetcode547. 省份数量
  2. html body不定宽居中,纯CSS实现元素垂直水平居中-非固定宽度
  3. python写一个类方法_python中如何写类
  4. Vue 页面加载闪现出现{{xxx}}问题
  5. 面试系列-JVM性能优化相关内容
  6. Dubbo源码分析笔记-一(工程目录介绍)
  7. SOFA RPC 详细介绍
  8. 计算机考研要过六级吗,本科考研英语过几级 有四六级要求吗
  9. 十大经典排序C++实现及动图演示
  10. Go 除了泛型外最值得期待的新功能,模糊测试