导读:本文立足基础,讲解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。

pycharm输入不了代码_最易懂的Python新手教程:从基础语法到代码详解相关推荐

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

    导读:本文立足基础,讲解Python和PyCharm的安装,及Python最简单的语法基础和爬虫技术中所需的Python语法. 作者:罗攀 蒋仟 如需转载请联系华章科技 本文涉及的主要知识点如下: P ...

  2. python 图像分析自然纹理方向与粗细代码_数字图像处理与Python实现笔记之基础知识...

    数字图像处理与Python实现笔记之基础知识 摘要 绪论 1 数字图像处理基础知识 1.1 数字图像简介 1.1.1 数字图像处理的目的 1.1.2 数字图像处理的应用 1.1.3 数字图像处理的特点 ...

  3. python 动态编译代码_使用PyQt(Python+Qt)+动态编译36行代码实现的计算器

    PyQt是基于跨平台的图形界面C++开发工具Qt加Python包装的一个GPL软件(GPL是GNU General Public License的缩写,是GNU通用公共授权非正式的中文翻译),Qt基于 ...

  4. python底层源码_大师兄的Python机器学习笔记:统计学基础之底层代码实现(一)...

    一.中心趋势度量(Measure of Central Tendency) 1.众数(mode) 符号: 一组数据中出现最多的值. 纯python代码实现: >>>def calcu ...

  5. 用python函数画德国国旗代码_求一段python中用class方法绘制国旗的代码!记得不是常见的海龟做法!这个星期给我再加送财富点!...

    展开全部 from matplotlib import patches, pyplot as plt from math import sin, cos, pi fig = plt.figure(fi ...

  6. 搜索不包含关键词_新手教程!百度关键词规划师功能详解

    SEM拓词方式有很多种,比如各平台自带的拓词工具.SEO工具如5118.艾奇拓词工具.搜索词报告等等.但其中,百度平台的拓词工具-关键词规划师应该说效率是最高的,除了拓展相关词外,百度关键词规划师还罗 ...

  7. markdown python整段话_(7)python少儿编程之基础语法(二)

    五.缩进 程序是有层次关系的 比如我们判断一个结果为是的时候要干什么 而干什么这个内容就要写在判断语句下 而python 约定4个空格缩进 为一个层次关系 我先写一个简单的语句 看不懂 没关系 理解这 ...

  8. [转载] Python新手写出漂亮的爬虫代码1——从html获取信息

    参考链接: Python中从用户获取多个输入 Python新手写出漂亮的爬虫代码1 初到大数据学习圈子的同学可能对爬虫都有所耳闻,会觉得是一个高大上的东西,仿佛九阳神功和乾坤大挪移一样,和别人说&qu ...

  9. C语言代码示范与讲解+C语言编程规范及基础语法+编程实战

    上一篇文章:C语言程序设计概述+C语言简介+算法概述 C语言代码示范与讲解+C语言编程规范及基础语法+编程实战 一:代码示范集加讲解 1.C语言第一个代码:打印"This is the fi ...

  10. python当型循环_对python while循环和双重循环的实例详解

    废话不多说,直接上代码吧! #python中,while语句用于循环执行程序,即在某个条件下,循环执行某段程序,以处理需要重复处理的相同任务. #while是"当型"循环结构. i ...

最新文章

  1. ultraedit26 运行的是试用模式_如何并行运行你的自动化测试?
  2. Install OpenCV-Python in Ubuntu
  3. 吐血解决python中文写入文件问题
  4. C++ Socket 编程
  5. 综述:关系抽取,挑战与机遇并存!
  6. Django框架基础之session
  7. fiddler的设置与简单使用
  8. CIS 流程图 UML
  9. 从零开始搭建ABP框架(Asp .Net Boilerplate)+Oracle(11 g)
  10. python把正整数翻译成英文_将Python整数转换为单词
  11. linux服务器常用命令
  12. 抖音返利分销模式及代理系统开发
  13. PHP算术题,阶乘相加
  14. revit服务器维护,Revit server是什么?Revit Server 管理有问题,谁来解决、怎么解决?...
  15. 抖音电商副总裁木青:抖音电商正在成为服饰行业的增量风口
  16. 1 buffers were freed while being dequeued
  17. 【汇编小白】关于masm5.0 显示 Unable to open input file
  18. Laravel技巧集锦(30):使用api_toke前后端分离
  19. 考驾照之考科目一二体验
  20. BT、电骡、迅雷等P2P下载原理

热门文章

  1. C#操作XML的完整例子——XmlDocument篇(转载,仅做学习之用)
  2. 【hdu - 2568】ACM程序设计期末考试081230
  3. 关于JSP表单的一些技巧和经验
  4. Navicat - 导入CSV注意事项
  5. linux设置系统环境变量的天坑
  6. GO -- 一个经验
  7. 或许是介绍Android Studio使用Git最详细的文章
  8. 【我评】——关于《中國化風格的淺析》
  9. 机器人防火墙出击 提升在线业务的安全未来
  10. Ansible Loops