第五章 对象带你飞
5.1 储存
1.文件
·Python必须把数据储存在磁盘中。
·磁盘以文件为单位储存数据,在python中,我们可以通过内置函数open来创建文件对象。在调用open时,需要说明文件名以及文件打开方式:f=open(文件名,方式)
·打开文件的常用方式有:“r”:读取已存在的文件,“w”:新建文件并写入,“a”:如果文件存在,那么写入到文件的结尾。如果文件不存在,则新建文件并写入。
·通过以上返回的对象,我们可以读取文件:
content = f.read(10) #只读取10个字节的数据
content = f.readline() #读取一行
content =f.readlines() #读取所有行,储存在列表中,每个元素是一行
f.white() #写入一行,用/r/n为分行符,括号内为输入内容
f.close() #关闭文件
2.上下文管理器
·上下文管理器用于规定某个对象的使用范围。一旦进入或者离开该使用范围,则会有特殊操作被调用(关闭文件)。
3.pickle包
·文本可以被存于文件,Python中最常见的是对象,当程序结束或者计算机关机时,这些存于内存的对象便会消失,利用Python和pickle包可以做到把对象存到磁盘上。
·分为两部:1.将对象在内存中的数据直接抓取出来,转换成一个有序的文本(序列化 Serialization) 2.将文本存入文件。
·读取上面保存的文件时,首先,我们从文件中读出文本,然后使用pickle的loads()方法,将字符串形式的文本转化为对象。
5.2 一寸光阴
1.time包
·Python可以替我们管理日期和时间。
·借助模块time测量程序运行时间。
·程序可以休眠。
·time包中还定义了struct_time对象。(tm_year、tm_mon、tm_mday...)
2.datetmie包
·datetime包分为两类:datetime.date类和datetmie.time类,你也可以把日期和时间结合在一起使用:datetime.datetime。
·对象t属性:hour、minute、millisecond、microsecond、year、month、day、weekday
·我们还可以进行时间间隔的运算。
·在传递参数时,还可以是天、小时、毫秒、微秒;两个datetime对象能进行比较运算,以确定哪个时间间隔更长。(print(t>t_next)#打印False)
3.日期格式
·包含有时间信息的字符串,我们可以借助datetime包,把它们转化为datetime类对象。
·我们也可以调用datetime对象的surftime方法,将一个datetime对象转换成特定格式的字符串。
·常用的特殊符号(如想表示%本身,可以使用%%来表示):
5.3 看起来像那样的东西
1.正则表达式
·主要功能是从字符串中通过特定的格式,搜索到希望找到的内容。Python中可以使用包re来处理正则表达式。
·其他搜索方法:
m = re.search(pattern,string) #搜索整个字符串,直到发现符合的子字符串
m = re.match(pattern,string) #从头开始检查字符串是否符合正则表达式
#必须从字符串的第一个字符开始就相符
·我们还可以在搜索之后将搜索到的子字符串进行替换。
形如str = re.sub(pattern, replacement, string),replacement就是替换用的的字符串。
·常用的方法还有:
re.split是以数字为边界对字符串'one1two2three3four4'进行切分,得到['one','two','three','four','']五个字符串
re.findall是匹配字符串'one1two2three3four4'中的所有数字,得到['1','2','3','4']四个数字
2.写一个正则表达式
3.进一步提取
·群,用括号()圈起来的正则表达式的一部分,称之为群(group),一个正则表达式可以有多个群。
·我们可以用group(number)来查询群。注意:group(0)是整个正则表达式的搜索结果,group(1)是第一个群。
·还能为group命名。
5.4 Python有网瘾
1.HTTP通信简介
·HTTP工作方式:1)请求 2)回复
计算机发出请求时会遵照下面格式:
GET:用于说明想要服务器执行的操作。
/index.html: 资源的路径,这里指向服务器上的index.html文件。
HTTP/1.1协议的版本,HTTP第一个广泛使用的版本是1.0,当前版本为1.1。
Host: www.example.com:要访问的服务器地址。
·服务器在接收到请求之后,会根据程序,生成对应于该请求的回复,比如:
HTTP/1.1:协议版本 200:状态码(status code)(一切OK) OK:状态描述(对状态码200的文字描述)
·其他状态码:(1)302,重新定向(Redirect):我这里没有你想要的资源,但我知道另一个地方xxx有,你可以去那找 (2)404,无法找到(Not Found):我找不到你想要的资源,无能为力
Content-type说明了主体所包含的资源的类型,根据类型的不同,客户端可以启动不同的处理程序(如:显示图像,播放声音),下面是常见的一些资源:
text/plain:普通文本
text/html:HTML文本
image/jpeg:jpeg图片
image/gif:gif图片
Content-length说明了主体部分的长度,以字节(byte)为单位
·剩下的是主体部分,包含了主要的文本数据。
2.http.client包
·在明确了主机地址、请求方法和资源路径,再加上http.client包的帮助,就可以发出http请求。
5.5 写一个爬虫
第一步:访问博客首页,作者的博客地址是www.cnblogs.com/vamei,主机是www.cnblogs.com,资源位置是/vamei。这个页面是一个超文本文件,所以我们用 HTTPS协议访问:
第二部:清洗数据,爬取我们想要的信息