作业
学习笔记:
本次学习遇到的函数汇总:
abs(number) 返回指定数的绝对值
bytes(string, encoding[, errors]) 对指定的字符串进行编码,并以指定的方式处理错误
cmath.sqrt(number) 返回平方根;可用于负数
float(object) 将字符串或数字转换为浮点数
help([object]) 提供交互式帮助
input(prompt) 以字符串的方式获取用户输入
int(object) 将字符串或数转换为整数
math.ceil(number) 以浮点数的方式返回向上圆整的结果
math.floor(number) 以浮点数的方式返回向下圆整的结果
math.sqrt(number) 返回平方根;不能用于负数
pow(x, y[, z]) 返回 x 的 y 次方对 z 求模的结果
print(object, ...) 将提供的实参打印出来,并用空格分隔
len(seq) 返回序列的长度
list(seq) 将序列转换为列表
max(args) 返回序列或一组参数中的最大值
min(args) 返回序列和一组参数中的最小值
reversed(seq) 让你能够反向迭代序列
sorted(seq) 返回一个有序列表,其中包含指定序列中的所有元素
tuple(seq) 将序列转换为元组
pow(x,y) x**y, x的y次方
round() 浮点数圆整为与之最接近的整数。
特殊说明:整数总是向下圆整,而 round 圆整到最接近的整数,并在两个整数一样近时圆整到偶数
一、Python入门的基本了解
1、关于数的简单运算
[if !supportLists]l [endif]除法运算的结果为小数,即浮点数(float或floating-point number)
>>> 1 / 2
0.5
[if !supportLists]l [endif]丢弃小数部分,即执行整除运算,可使用双斜杠
>>> 5.0 // 2.4
2.0
[if !supportLists]l [endif]求余(求模)运算符。 x
% y 的结果为 x 除以 y 的余数
>>> 10 // 3
3
>>> 10 3 %
1
应用:在需要执行之前菜谱指定的“每10分钟检查一次”之类的操作时,这种运算可能很有用:只需检查 minute 10 % 是否为0
[if !supportLists]l [endif]最后一个运算符是乘方(求幂)运算符
>>> 2 ** 3
8
2、变量
变量是表示(或指向)特定值的名称。使用Python变量前必须给它赋值,因为Python变量没有默认值
>>> x = 3 赋值(assignment),我们将值 3 赋给了变量x
3、语句
所有语句的一个根本特征:执行修改操作
If语句:在交互式解释器中输入 if 语句后,需要按两次回车键才能执行它
注意:相等运算符就是两个等号。(一个等号用于赋值)
4、模块:
要导入模块命令可使用import
例:>>> import math
>>> math.floor(32.9)
32
工作原理:我们使用 import 导入模块,再以 module.function 的方式使用模块
中的函数。
Python标准库提供了一个专门用于处理
复数的模块。(1j 是个虚数,虚数都以 j (或 J )结尾)
>>> import cmath
>>> cmath.sqrt(-1)
1j
二、字符串(与数一样,是一种值):
1.某些特殊作用字符
[if !supportLists]l [endif]单引号字符串以及对引号转义
python中使用单引号和双引号(字符串开始或结束的标志)一般情况下差别不大,但为了避免字符串中出现引号引起解释器无法解释的状况,可视具体情况使用单、双引号。除此之外,可使用反斜杠(\ )对引号进行转义,且在字符串同时包含单引和双引时必须这么做。
>>>"Let's go!"
"Let's go!"
>>>'"Hello, world!" she said'
'"Hello,world!" she said'
>>> 'Let\'s go!'
"Let's go!"
>>> "\"Hello, world!\" she said"
'"Hello, world!" she said'
[if !supportLists]l [endif]拼接字符串
依次输入了两个字符串,Python自动将它们拼接起来。更为常用的方法是使用“+”
>>>
"Hello, " + "world!"
'Hello,
world!'
>>>
x = "Hello, "
>>>
y = "world!"
>>>
x + y
'Hello, world!'
[if !supportLists]l [endif]字符串表示 str 和 repr
str 能以合理的方式将值转换为用户能够看懂的字符串
使用 repr 时,通常会获得值的合法Python表达式表示
>>> "Hello,\nworld!"
'Hello,\nworld!'
>>> print("Hello,\nworld!")
Hello,
world!
其中“\n”为换行符编码
[if !supportLists]l [endif]长字符串、原始字符串和字节
长字符串可用三引号表示”””
原始字符串让字符串包含的每个字符都保持原样 r’
2. 通用的字符串操作:
索引
[if !supportLists]l [endif]索引:用于获取元素
>>> greeting = 'Hello'
>>> greeting[0]
'H'
[if !supportLists]l [endif]使用负数索引时,Python将从右(即从最后一个元素)开始往左数,因此1是最后一个元素的位置。
[if !supportLists]l [endif]对于字符串字面量(以及其他的序列字面量),可直接对其执行索引操作
>>> greeting[-1]
'o'
切片:
[if !supportLists]l [endif]切片(slicing)来访问特定范围内的元素
第一个索引是包含的第一个元素的编号,但第二个索引是切片后余下的第一个元素的编号
>>>
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
numbers[3:6] [4, 5, 6]
>>> numbers[0:1] [1]
>>> numbers[-3:-1]
[8, 9]
>>> numbers[-3:] 如果切片结束于序列末尾,可省略第二个索引
[8, 9, 10]
>>> numbers[:3] 如果切片始于序列开头,可省略第一个索引
[1, 2, 3] 要复制整个序列,可将两个索引都省略
>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[if !supportLists]l [endif]你显式或隐式地指定起点和终点,但通常省略另一个参数,即步长。在普通切片中,步长为1。可以设置步长为除0外的数字。
>>> numbers[0:10:2]
[1, 3, 5, 7, 9]
>>> numbers[8:3:-1]
[9, 8, 7, 6, 5]
序列相加:
>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> 'Hello,' + 'world!'
'Hello, world!'
注意:。一般而言,不能拼接不同类型的序列
序列相乘:
序列与数x相乘时,将重复这个序列x次来创建一个新序列(区分于数与数哦)
>>> 'python' * 5
'pythonpythonpythonpythonpython'
>>> [42] * 10
[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
3、split()、replace()、 strip()
[if !supportLists]l [endif]方法 replace 将指定子串都替换为另一个字符串,并返回替换后的结果。
[if !supportLists]l [endif]split 是一个非常重要的字符串方法,其作用与 join 相反,用于将字符串拆分为序列。
如果没有指定分隔符,将默认在单个或多个连续的空白字符(空格、制表符、换行符等)处进行拆分。
[if !supportLists]l [endif]方法 strip 将字符串开头和末尾的空白(但不包括中间的空白)删除,并返回删除后的结果。这种方法可在一个字符串参数中指定要删除哪些字符。
三、列表
1.修改列表值:
[if !supportLists]l [endif]使用索引表示法给特定位置的元素赋值
>>> x = [1, 1, 1]
>>> x[1] = 2
>>> x
[1, 2, 1]
[if !supportLists]l [endif]删除元素使用 del 语句
[if !supportLists]l [endif]给切片赋值
>>>
name = list('Perl')
>>>
name
['P',
'e', 'r', 'l']
>>>
name[2:] = list('ar')
>>>
name
['P',
'e', 'a', 'r']
使用切片赋值还可在不替换原有元素的情况下插入新元素
>>>
numbers = [1, 5]
>>>
numbers[1:1] = [2, 3, 4]
>>>
numbers
[1, 2, 3, 4, 5]
2.列表方法:
方法是与对象(列表、数、字符串等)联系紧密的函数。
方法调用与函数调用很像,只是在方法名前加上了对象和句点
[if !supportLists]l [endif]append 用于将一个对象附加到列表末尾
>>> lst = [1, 2, 3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]
[if !supportLists]l [endif]clear 就地清空列表的内容
[if !supportLists]l [endif]copy 复制列表
要让 a 和 b 指向不同的列表,就必须将 b 关联到 a 的副本。
[if !supportLists]l [endif]方法 count 计算指定的元素在列表中出现了多少次
[if !supportLists]l [endif]方法 extend 让你能够同时将多个值附加到列表末尾
[if !supportLists]l [endif]index 在列表中查找指定值第一次出现的索引
[if !supportLists]l [endif]方法 insert 用于将一个对象插入列表。
[if !supportLists]l [endif]方法 pop 从列表中删除一个元素(末尾为最后一个元素),并返回这一元素。
方法 pop 和 append 的效果相反,因此将刚弹出的值压入(或附加)后,得到的栈将与原来相同。
[if !supportLists]l [endif]方法 remove 用于删除第一个为指定值的元素
[if !supportLists]l [endif]方法 reverse 按相反的顺序排列列表中的元素
[if !supportLists]l [endif]方法 sort 用于对列表就地排序
方法 sort 接受两个可选参数: key 和 reverse 。这两个参数通常是按名称指定的,称为关键字参数,将参数 key 相当于参数cmp; 参数reverse ,只需将其指定为一个真值
四、元组
与列表一样,元组也是序列,唯一的差别在于元组是不能修改的
只要将一些值用逗号分隔,就能自动创建一个元组,元组还可用圆括号括起
>>> 1, 2, 3
(1, 2, 3)
注:只包含一个值的元组,需在其之后加上逗号
函数 tuple:将一个序列作为参数,并将其转换为元组
五、字典
键可能是数、字符串或元组。
字典(日常生活中的字典和Python字典)旨在让你能够轻松地找到特定的单词(键),以获悉其定义(值)。
字典由键及其相应的值组成,这种键—值对称为项(item)。每个键与其值之间都用冒号( : )分隔,项之间用逗号分隔,而整个字典放在花括号内。空字典(没有任何项)用两个花括号表示,类似于下面这样: {} 。
函数 dict:可使用函数 dict 从其他映射(如其他字典)或键—值对序列创建字典。
>>>items = [('name', 'Gumby'),
('age', 42)]
>>> d = dict(items)
>>> d
{'age': 42, 'name': 'Gumby'}
还可使用关键字实参来调用这个函数,如下所示:
>>> d = dict(name='Gumby', age=42)
>>> d
{'age': 42, 'name': 'Gumby'}
len(d) 返回字典 d 包含的项(键值对)数。
d[k] 返回与键 k 相关联的值。
d[k] = v 将值 v 关联到键 k 。
del d[k] 删除键为 k 的项。
k in d 检查字典 d 是否包含键为 k 的项。
[if !supportLists]l [endif]字典与键的区别:
键的类型:字典中的键可以是任何不可变的类型,如浮点数(实数)、字符串或元组
即便是字典中原本没有的键,也可以给它赋值,这将在字典中创建一个新项
自动添加:即便是字典中原本没有的键,也可以给它赋值,这将在字典中创建一个新项
成员资格:表达式 k in d (其中 d 是一个字典)查找的是键而不是值,而表达式 v in l (起其中 l 是一个列表)查找的是值而不是索引。
字典方法使用(近似于列表):
[if !supportLists]l [endif]方法 clear 删除所有的字典项
[if !supportLists]l [endif]方法 copy 返回一个新字典,其包含的键—值对与原来的字典相同(这个方法执行的是浅复制,深复制可使用deepcopy
[if !supportLists]l [endif]方法 fromkeys 创建一个新字典,其中包含指定的键,且每个键对应的值都是 None 。
[if !supportLists]l [endif]方法 get 为访问字典项提供了宽松的环境。
[if !supportLists]l [endif]方法 items 返回一个包含所有字典项的列表,其中每个元素都为 (key, value) 的形式。字典项在列表中的排列顺序不确定。
[if !supportLists]l [endif]方法 keys 返回一个字典视图,其中包含指定字典中的键。
[if !supportLists]l [endif]方法 pop 可用于获取与指定键相关联的值,并将该键值对从字典中删除
[if !supportLists]l [endif]方法 popitem 类似于 list.pop ,但 list.pop 弹出列表中的最后一个元素,而 popitem 随机地弹出一个字典项,因为字典项的顺序是不确定的,没有“最后一个元素”的概念。
[if !supportLists]l [endif]方法 setdefault有点像 get ,因为它也获取与指定键相关联的值,但除此之外, setdefault还在字典不包含指定的键时,在字典中添加指定的键_值对
[if !supportLists]l [endif]方法 update 使用一个字典中的项来更新另一个字典
[if !supportLists]l [endif]方法 values 返回一个由字典中的值组成的字典视图。不同于方法 keys ,方法 values 返回的视图可能包含重复的值。
六、文件操作
[if !supportLists]l [endif]打开文件,可使用函数open ,它位于自动导入的模块 io 中。
要打开文件,可使用函数 open ,它位于自动导入的模块 io 中。函数 open 将文件名作为唯一必不可少的参数,并返回一个文件对象。如果当前目录中有一个名为somefile.txt的文本文件(可能是使用文本编辑器创建的),则可像下面这样打开它:
>>> f = open('somefile.txt')
[if !supportLists]l [endif]读取和写入文件
f.write 来写入数据,还可使用 f.read 来读取数据在 bash 等shell中,可依次输入多个命令,并使用管道将它们链接起来,其中,管道将一个命令的标准输出链接到下一个命令的标准输入。
somescript.py
import sys
text = sys.stdin.read()
words = text.split()
wordcount = len(words)
print('Wordcount:', wordcount)
成行地读取。要读取一行(从当前位置到下一个分行符的文本),可使用方法 readline 。
方法 writelines 与 readlines 相反:接受一个字符串列表(实际上,可以是任何序列或可迭代对象),并将这些字符串都写入到文件(或流)中。请注意,写入时不会添加换行符,因此你必须自行添加。
[if !supportLists]l [endif]关闭文件
调用方法 close 将文件关闭,避免无意义地锁定文件以防修改。对于写入过的文件,一定要将其关闭,因为Python可能缓冲你写入的数据(将数据暂时存储在某个地方,以提高效率)。
如果要重置缓冲,让所做的修改反映到磁盘文件中,但又不想关闭文件,可使用方法 flush 。
要确保文件得以关闭,可使用一条 try / finally 语句,并在 finally 子句中调用 close 。
七、语句
循环和判断语句
根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做。也可以给if添加一个else语句,意思是,如果if判断是False,不要执行if的内容,去把else执行了。更进一步可以使用elif
Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,看例子:
names = ['Michael',
'Bob', 'Tracy']
for name in
names:
print(name)
我们想计算1-10的整数之和,可以用一个sum变量做累加
sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
sum = sum + x
print(sum)
range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。
八、爬虫原理
爬虫原理
(1)模拟计算机对服务器发起的Request请求
(2)接收服务器端的Response内容并解析、提取所需的信息
HTTP协议:
HTTP协议是Hyper Text
Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。在这份协议中:规定了客户端应该按照什么格式给服务器发送请求约定了服务端返回的响应结果应该是什么格式。
HTML知识:
HTML全称Hyper Text Mark-up
Language(超文本标记语言),它不是一种
编程语言,而是一种标记语言 (markup language)。标记语言是一套标记
标签 (markup tag),HTML 使用标记标签来描述网页。
HTML的语法:文本+标签。