本专栏是以杨秀璋老师爬虫著作《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 面向对象
Python是Guido Van Rossum在1989年开发的一种脚本新解释语言,是ABC语言的一种继承。
由于作者是Monty Python喜剧团的一名爱好者,故将其命名为Python(蟒蛇)
Python作为当下一种热门语言,具有以下特点:
根据Tiobe编程语言最新排行榜(部分),其中Python排名第三,并且随着大数据、数据分析、深度学习、人工智能的迅速发展,Python收到的关注程度越来越高。
利用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
1 缩进
不同于其他语言,Python 是通过缩进来标明代码的层次关系的。
其中,1个缩进等于4个空格,它是 Python 语言中标明程序框架的唯一手段。
前面提到的的 PyCharm 提供了快捷键 Tab 用于快速缩进,Shift + Tab用于返回缩进的上一部操作。
2 注释
注释是用于说明代码信息的,注释代码不执行。
Python 注释主要包括两种:
块注释:即多行注释,常用“ ''' ”或“ """ ”开头和结尾,如:
'''
这里是多行注释
……
这里是多行注释
'''
这里需要注意的是:
python 中“ ”与‘ ’在表示字符串时是没有区别的
在输出时,输出内容有“ ”(双引号)则在单引号内使用双引号,即‘ “要输出内容” ’;
输出内容有‘ ’(单引号)则在双引号内使用单引号,即“ ‘要输出内容‘ “;
''' (三引号)用法:1、用作多行注释;2、用作表示一个字符串
★python中并没有提供专门的多行注释的符号,当一串字符被三引号引用时,但它不作为字符串被操作时,这个三引号内引用的内容就被视为注释。
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异常。
2 变量
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'))
1 赋值
Python中赋值语句是使用等号(=)直接给变量赋值,如“a=10”,如果需要同时给多个变量进行赋值,则表达式如下:
a, b, c = 10, 20, (10+20)/2
print(a, b, c)
# 先运算右侧3个表达式,然后同时将表达式结果赋给左侧变量
表达式是程序中产生或计算新数据值的一行代码,通常由变量、常量或操作符号产生,赋值表达式如 a = 10。
Python中常见的数字类型包括整数类型、浮点数类型、复数类型。
z = -12.3 + 8j
print('复数:', z, '类型:', type(z))
print('实部:', z.real)
print('虚部:', z.imag)
在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))
在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]
元组是与列表类似的一种数据类型,它采用括号定义一个或多个元素的集合,其返回类型为tuple。
tuple1 = (1, 2, 'Python')
print(tuple1)
print(type(tuple1))
print(tuple1[2])
注:当元组定义后就不能进行更改,也不能删除,这不同于列表,由于其有不变性,因为它的代码更加安全。
在Python中,字典是针对非序列集合提供的,由键值对(
键是字典的索引,一个键对应一个值,通过键值可查找字典中的信息,这个过程叫做映射。
dict = {"1":"Python", "2":"Java", "3":"C++"}
print(dict)
print(dict["2"])
if
判断为真就执行
i =1
if i == 1:
print(True)
if
else:
如果条件语句
i = 2
if i == 1:
print(True)
else:
print(False)
if多分支由 if-elif-else 组成,其中 elif 相当于 else if
if
elif
elif
……
else:
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!')
while
else:
如果条件表达式
例1:
i = 1
s = 0
while i <= 100:
s = s + i
i = i + 1
else:
print('over')
print('sum=', s)
# 本例中代码是调用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')
for in
自定义循环变量var遍历sequence序列中的每一个值,每个值都执行一次循环的语句块。
sequence表示序列,常见类型有list(列表)、tuple(元组)、strings(字符串)、files(文件)。
# 输出星号三角形
for i in range(10):
print('*' * i)
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)
continue跳出本次循环,下一次继续判断执行
# 当为偶数时continue跳出当前循环,所以for循环中只输出偶数
for num in range(10):
if num % 2 == 0:
print('even number', num)
continue
print('odd number', num)
当我们要完成特定功能的语句块时,就需要调用函数来完成相应的功能。
为了简化编程,提高代码的复用性,可以自定义函数。
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)
Python系统内部提供了一些库函数供大家使用,常用的有:str字符串库函数、math数学库函数、os操作系统库函数、socket网络套接字库函数
Python作为一门开源语言,他支持各种第三方提供的开源库供用户使用
常用格式:module_name.method(parametes)表示“第三方库函数名.方法(参数)”
使用第三方库之前需要安装,如果没有安装就会报错。
文件是指存储在外部介质上数据的集合,文本文件的编码方式包括ASCII码格式、Unicode码、UTF-8码和GBK码等。
文件操作流程为打开文件——读/写文件——关闭文件
打开文件是通过调用 open() 函数实现的,函数原型如下:
其中,
返回结果为一个文件对象
infile = open('test.txt', 'r')
读文件常用方法:
写文件常用方法:
文件读/写结束后,一定要记住使用close()方法关闭文件。
为了安全起见,常用try-except-finally异常捕获语句,并在finally子句中关闭文件
try:
# 文件操作
except:
# 异常处理
finally:
file.close()
在数据爬取或数据分析中,常常会用到文件遍历(常常采用for循环遍历文件内容)
#!/usr/bin/env python
fd = open('F:/test1.txt', 'r', encoding='UTF-8')
for line in fd:
print(line)
fd.close()
不同于面向过程编程,面向对象编程需要使用“类”和“对象”来实现,将函数进行封装,是更接近真实生活的一种编程方式。
面向对象的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)
感谢阅读