「Python爬虫系列讲解」二、Python知识初学

本专栏是以杨秀璋老师爬虫著作《Python网络数据爬取及分析「从入门到精通」》为主线、个人学习理解为主要内容,以学习笔记形式编写的。
本专栏不光是自己的一个学习分享,也希望能给您普及一些关于爬虫的相关知识以及提供一些微不足道的爬虫思路。
专栏地址:Python网络数据爬取及分析「从入门到精通」

目录

1 Python简介

2.1 Python的特点

2.2 安装及第三方库导入过程

2 基本语法

2.1 缩进与注释

2.2 常量与变量

2.3 输入与输出

 2.4 赋值与表达式

3 数据类型

3.1 数字类型

3.2 字符串类型

3.3 列表类型

 3.4 元组类型

3.5 字典类型

4 条件语句

4.1 单分支

​ 4.2 二分支

​ 4.3 多分支

5 循环语句

 5.1 While循环

5.2 for循环

​ 5.3 break和continue语句

6 函数

6.1 自定义函数

6.2 常见内部库函数

 6.3第三方库函数

7 文件操作

7.1 打开文件

7.2 读/写文件

7.3 关闭文件

7.4 循环遍历文件 

8 面向对象

 


1 Python简介

2.1 Python的特点

Python是Guido Van Rossum在1989年开发的一种脚本新解释语言,是ABC语言的一种继承。
由于作者是Monty Python喜剧团的一名爱好者,故将其命名为Python(蟒蛇)

Python作为当下一种热门语言,具有以下特点:

  • 语法清晰,代码友好,易读
  • 应用广泛,具有大量的第三方库(尤其是机器学习、人工智能相关库)支持
  • Python可移植性强,易于操作各种存储数据的文本文件和数据库
  • Python是一种面向对象语言,支持开源思想

根据Tiobe编程语言最新排行榜(部分),其中Python排名第三,并且随着大数据、数据分析、深度学习、人工智能的迅速发展,Python收到的关注程度越来越高。

2.2 安装及第三方库导入过程

利用Python编程之前,首先需要安装Python软件:包括搭建Python环境、学会安装Python第三方库等

关于Python安装及第三方库导入过程可参考我之前的博文
文章地址链接:https://blog.csdn.net/IT_charge/article/details/105586808

搭建好Python环境之后是这个样子的(同时可以打印输出进行进一步的测试)

当编写大段代码或自定义函数时,在command命令行中编写是不太现实的,因此可以进一步选择合适的编译器进行编译,我在这里用的是JetBrains PyCharm 2018.1.2 x64

大家可以去这里下载使用:https://pan.baidu.com/s/1zunmfSfHVDF9VP1qVDQ8Gg   提取码:4558

2 基本语法

2.1 缩进与注释

1 缩进

不同于其他语言,Python 是通过缩进来标明代码的层次关系的。
其中,1个缩进等于4个空格,它是 Python 语言中标明程序框架的唯一手段。
前面提到的的 PyCharm 提供了快捷键 Tab 用于快速缩进,Shift + Tab用于返回缩进的上一部操作。

2 注释

注释是用于说明代码信息的,注释代码不执行。
Python 注释主要包括两种:

  • 行注释:采用“#”开头进行单行注释,如:“# 这里是单行注释”
  • 块注释:即多行注释,常用“ ''' ”或“ """ ”开头和结尾,如:
    '''       
    这里是多行注释
    ……
    这里是多行注释
    '''

这里需要注意的是:

python 中“ ”与‘ ’在表示字符串时是没有区别的
在输出时,输出内容有“ ”(双引号)则在单引号内使用双引号,即‘ “要输出内容” ’;
输出内容有‘ ’(单引号)则在双引号内使用单引号,即“ ‘要输出内容‘ “;

''' (三引号)用法:1、用作多行注释;2、用作表示一个字符串
★python中并没有提供专门的多行注释的符号,当一串字符被三引号引用时,但它不作为字符串被操作时,这个三引号内引用的内容就被视为注释。

2.2 常量与变量

1 常量

常量是指程序中值不发生代表的元素,一旦初始化后就不能对其进行修改的固定值,它是内存中用来保存固定值的单元。

事实上,Python并未提供如C/C++/Java一样的const修饰符,换言之,python中没有常量,python程序一般通过约定俗成的变量名全大写的形式表示这是一个常量。然而这种方式并没有真正实现常量,其对应的值仍然可以被改变。后来,python提供了新的方法实现常量:即通过自定义类实现常量。这要求符合“命名全部为大写”和“值一旦被绑定便不可再修改”这两个条件。

下面给出一个例子(.py文件),该文件定义了一个方法__setattr()__,和一个异常ConstError, ConstError类继承类TypeError。通过调用类自带的字典__dict__, 判断定义的常量是否包含在字典中。如果字典中包含此变量,将抛出异常,否则,给新创建的常量赋值。最后两行代码的作用是把const类注册到sys.modules这个全局字典中。

class _const:
    class ConstError(TypeError): pass
    def __setattr__(self, name, value):
        if name in self.__dict__:
            raise self.ConstError("Can't rebind const (%s)" % name)
        self.__dict__[name] = value


import sys
sys.modules[__name__] = _const()

如果上面对应的模块名为const,使用的时候只要 import const,便可以直接定义常量了,例如

import const
const.PI=3.14
print(const.PI)

我们运行test.py,就可打印出常量的值,如果再次修改const.PI=4.13,则会抛出const.constError异常。 

  1. python常量:内存中用于保存固定值的单元、在程序中、常量的值不能发生改变的
  2. python常量命名规范:通常是以大写字母开头进行区分-Chy常量 chy变量
  3. python常量的赋值:数字 字符串 布尔值 空值
  4. 举例:Aa=123、Ab='chy'、Ac=True和False、Ad=' ';

2 变量

  1. python变量:占用内存中一块空间、用来存放变量的值(或地址)、存放的值是可以发生改变的
  2. python变量命名规范:变量名是由大小写字符、数字和下划线(_)组合而成的;第一个字符必须是字母或下划线开始(_)不可用数字开头,不要用中文开头;Python中的变量是区分大小写的;在赋值时单引号、双引号的效果是一样的。
  3. 注意Python中已经被使用的一些关键词不能用于声明变量,如下:

2.3 输入与输出

1 输入

Python的输入函数主要是:input()

str1 = input('input:')
print(str1)

number = input('input:')
print(number)

2 输出

Python的输入函数主要是:print()

print(3)

print('Hello World!')

同时,Python 还支持格式化输出数据,这是调用format()函数来实现。

# 输出6位数值的浮点数,小数点后精确到2位
print(format(12.3456, '6.2f'))

 2.4 赋值与表达式

1 赋值

Python中赋值语句是使用等号(=)直接给变量赋值,如“a=10”,如果需要同时给多个变量进行赋值,则表达式如下:

a, b, c = 10, 20, (10+20)/2
print(a, b, c)
# 先运算右侧3个表达式,然后同时将表达式结果赋给左侧变量

2 表达式

表达式是程序中产生或计算新数据值的一行代码,通常由变量、常量或操作符号产生,赋值表达式如 a = 10。

3 数据类型

3.1 数字类型

Python中常见的数字类型包括整数类型、浮点数类型、复数类型。

  • 整数类型:对应数学中的整数,其返回值类型为int型,如10,25等
  • 浮点数类型:带有小数点的数字,其返回类型为float型,如3.14,2.1e2等
  • 复数类型:Python复数分为两部分,例如a+bj,其中a是实部,b是虚部,其返回类型为complex。其中,复数可通过.real获得实部数据,通过.imag获得虚部数据
z = -12.3 + 8j
print('复数:', z, '类型:', type(z))
print('实部:', z.real)
print('虚部:', z.imag)

 :Python中的数字类型是可以相互转换的。

  • 浮点数转整数:int()
  • 整数转小数:float()
  • 浮点数转复数:complex()

3.2 字符串类型

在Python中,字符串类型是指需要用单引号或双引号括起来的一个字符或字符串。
字符串表示一个字符的序列,其最左端表示字符串的起始位置,下标为0,然后依次递增。

# 字符串格式化输出需要引入百分号(%)实现
print('My name is %s' % ('ZZR'))

str1 = 'abcdefg'
str2 = 'Hello World!'
str3 = '1+2+3'
str4 = '    I love Python   '
str5 = ['Thank', 'you']
# 字符串求长度
print(len(str1))
# 字符串切片
print(str1[3:6])
# 字符串反向切片
print(str1[-1:-4:-1])
# 字符串查找子字符串,若未找到返回-1
print(str1.find('def'))
print(str1.find('opq'))
# 字符串分割成序列,亦可设置分隔符
print(str2.split())
print(str3.split('+'))
# strip()函数用于去除开头结尾空格,lstrip()函数去除左侧空格,rstrip()函数去除右侧空格
print(str4.strip())
print(str4.lstrip())
print(str4.rstrip())
# join()函数用于拼接字符串
sep = " "  # 采用空格拼接
print(sep.join(str5))

 

3.3 列表类型

在Python中,列表是一个非常重要的数据类型,它是中括号([ ])中用逗号分隔的元素集合。

list = [1, 2, 'a', 'Python']
print(list)
print(list[3])
print(type(list))

 列表中也可以用加号(+)拼接,用乘号(*)重复显示,也可以进行切片等操作

list1 = [1, 2, 3, 4]
list2 = [5, 6, 7]
print(list1 + list2)
print(list2 * 3)
print(list1[1:3])

 下标列举了一些列表中的常用方法,假设有列表list1 = [4, 2, 1, 5, 3]

 3.4 元组类型

元组是与列表类似的一种数据类型,它采用括号定义一个或多个元素的集合,其返回类型为tuple。

tuple1 = (1, 2, 'Python')
print(tuple1)
print(type(tuple1))
print(tuple1[2])

注:当元组定义后就不能进行更改,也不能删除,这不同于列表,由于其有不变性,因为它的代码更加安全。

3.5 字典类型

在Python中,字典是针对非序列集合提供的,由键值对(<Key><Value>)组成。其类型是dict。

键是字典的索引,一个键对应一个值,通过键值可查找字典中的信息,这个过程叫做映射。

dict = {"1":"Python", "2":"Java", "3":"C++"}
print(dict)
print(dict["2"])

字典与列表主要存在以下几点不同:

  • 列表中的元素是顺序排列的,字典中的数据时无序排列的
  • 映射方式不同,列表通过地址映射到值,字典通过键值对映射到值
  • 列表只能通过数字下表或索引进行访问,字典可以用各种对象类型作为键进行访问 

4 条件语句

4.1 单分支

if <condition>:
    <statement>
    <statement>

判断为真就执行<statement>语句,如果为假就跳过<statement>语句,执行下一条语句。

i =1
if i == 1:
    print(True)

 4.2 二分支

if <condition>:
    <statement>
    <statement>
else:
    <statement>
    <statement>

如果条件语句<condition>为真,执行if语句块,如果<condition>为假,执行else语句块

i = 2
if i == 1:
    print(True)
else:
    print(False)

 4.3 多分支

if多分支由 if-elif-else 组成,其中 elif 相当于 else if

if <condition1>:
    <case1 statements>
elif <condition2>:
    <case2 statements>
elif<condition3>:
    <case3 statements>
……
else:
    <defult statements>

course = 88
if course >= 90:
    print('A')
elif course >= 80:
    print('B')
elif course >= 70:
    print('C')
elif course >= 60:
    print('D')
else:
    print('No Pass!')

 

5 循环语句

 5.1 While循环

while <condition>:
    <statement>
else:
    <statement>

如果条件表达式<condition>为真,则重复执行循环体,直到条件判断为假,循环体终止;如果第一次判断条件就为假,则直接跳出训话执行else中的语句(注意else语句可以省略)。

例1

i = 1
s = 0
while i <= 100:
    s = s + i
    i = i + 1
else:
    print('over')
print('sum=', s)

 例2

# 本例中代码是调用webbrowser库中的open_new_tab函数打开百度网页5次
# 本段代码可用于循环增加刷阅读量等
import webbrowser as web
import time
import os
i = 0
while i<5:
    web.open_new_tab('http://www.baidu.com')
    i = i + 1
    time.sleep(0.8)
else:
    # /F 表示强行终止程序;/IM 表示图像
    os.system('taskkill /F /IM iexplore.exe')
print('close IE')

 

5.2 for循环

for <var> in <sequence>:
    <statement>
    <statement>

自定义循环变量var遍历sequence序列中的每一个值,每个值都执行一次循环的语句块。
sequence表示序列,常见类型有list(列表)、tuple(元组)、strings(字符串)、files(文件)。

# 输出星号三角形
for i in range(10):
    print('*' * i)

 5.3 break和continue语句

break和continue语句是两个常用的跳出循环的语句

1 break语句

break语句跳出整个循环

# 当求和变量s大于100时,进入if判断语句,执行break语句跳出循环,最后输出和
s = 0
num = 0
while num < 20:
    num += 1
    s  += num
    if s> 100:
        break
print('The sum is', s)

 2 continue语句

continue跳出本次循环,下一次继续判断执行

# 当为偶数时continue跳出当前循环,所以for循环中只输出偶数
for num in range(10):
    if num % 2 == 0:
        print('even number', num)
        continue
    print('odd number', num)

 

6 函数

 当我们要完成特定功能的语句块时,就需要调用函数来完成相应的功能。

6.1 自定义函数

为了简化编程,提高代码的复用性,可以自定义函数。

def funtion_name([para1, para2,……, paraN]):
    statement1
        statement2
    …
    [return value1, value2, ……, valueN]

函数调用时,新参被赋予真实的参数,然后执行函数体,并在函数结束调用时返回结果。
return语句表示退出函数并返回到函数被调用的地方,返回值传递给调用程序。

def fun(a, b):
    print(a, b)
    c = a + b
    print('sum:', c)
fun(3, 4)

def fun(a, b, c=10):
    print(a, b)
    sum = a + b + c
    print('sum:', sum)
fun(3, 4)
fun(3, 4, 5)

 

6.2 常见内部库函数

Python系统内部提供了一些库函数供大家使用,常用的有:str字符串库函数、math数学库函数、os操作系统库函数、socket网络套接字库函数

 6.3第三方库函数

Python作为一门开源语言,他支持各种第三方提供的开源库供用户使用
常用格式:module_name.method(parametes)表示“第三方库函数名.方法(参数)”
使用第三方库之前需要安装,如果没有安装就会报错。

7 文件操作

文件是指存储在外部介质上数据的集合,文本文件的编码方式包括ASCII码格式、Unicode码、UTF-8码和GBK码等。
文件操作流程为打开文件——读/写文件——关闭文件

7.1 打开文件

打开文件是通过调用 open() 函数实现的,函数原型如下:
<variable> = open(<name>, <mode>)
其中,<name>表示打开文件名称;<mode>表示文件打开模式,参数有r(只读)、w(只写)、a(最佳末尾)、rb(只读二进制文件)、wb(只写二进制文件)、ab(附加到二进制文件末尾)、w+(追加写文件)
返回结果为一个文件对象

infile = open('test.txt', 'r')

7.2 读/写文件

 读文件常用方法:

  • read()的返回值为包含整个文件内容的一个字符串
  • readline()的返回值为文件内容的下一行内容的字符串
  • reallines()的返回值是整个文件内容的列表,列表中的每一项都为一行字符串

写文件常用方法:

  • write()用于把含有文本数据或二进制数据集的字符串写入文件中
  • writelines()针对列表操作,接收一个字符串列表参数,并写入文件

7.3 关闭文件

文件读/写结束后,一定要记住使用close()方法关闭文件。
为了安全起见,常用try-except-finally异常捕获语句,并在finally子句中关闭文件

try:
    # 文件操作
except:
    # 异常处理
finally:
​​​​​​​    file.close()

7.4 循环遍历文件 

在数据爬取或数据分析中,常常会用到文件遍历(常常采用for循环遍历文件内容)

#!/usr/bin/env python
fd = open('F:/test1.txt', 'r', encoding='UTF-8')
for line in fd:
    print(line)
fd.close()

 

8 面向对象

 不同于面向过程编程,面向对象编程需要使用“类”和“对象”来实现,将函数进行封装,是更接近真实生活的一种编程方式。

面向对象的3个基本特征:

  • 封装:把客观事物封装成抽象的类,类中的数据和方法让类或对象进行操作;
  • 继承:子类继承父类后,可以使用父类的所有功能,而无需重新编写原有的类,并且可以对功能进行扩展;
  • 多态:类中定义的属性或行为被特殊类继承后,可以具有不同的数据类型或表现不同的行为。各个类能表现不同的语义,其实现的方法有两种,分别为覆盖和重载。

在Python中类就是一个模板,模板里可以包含多个函数,函数可实现一些功能,对象则是根据模板创建的实例,通过实例对象可以执行类中的函数。

class Rect:
    def __init__(self, length, width):
        self.length = length
        self.width = width

    def detail(self):
        print(self.length, self.width)

    def showArea(self):
        area = self.length * self.width
        return area
    
    def showCir(self):
        cir = (self.length + self.width) * 2
        return cir

rect = Rect(4, 5)
rect.detail()
area = rect.showArea()
cir = rect.showCir()
print('面积:', area)
print('周长:', cir)

 


欢迎留言,一起学习交流~

感谢阅读

END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章