第3章 正则表达式与文件操作
在爬虫的开发中,需要把有用的信息从一大段文本中提取出来。正则表达式是提取信息的方法之一。
正则表达式虽然不是最简单的也不是最高效的数据提取方法,但它是最直接的。而且在某些情况下,只有使用正则表达式才能达到目的。学好正则表达式,是开发爬虫的第一步。
通过这一章的学习,你将会掌握如下知识。
(1)正则表达式的基本符号。
(2)如何在Python中使用正则表达式。
(3)正则表达式的提取技巧。
(4)Python读写文本文件和CSV文件。
3.1 正则表达式
正则表达式(Regular Expression)是一段字符串,它可以表示一段有规律的信息。Python自带一个正则表达式模块,通过这个模块可以查找、提取、替换一段有规律的信息。
在程序开发中,要让计算机程序从一大段文本中找到需要的内容,就可以使用正则表达式来实现。
使用正则表达式有如下步骤。
(1)寻找规律。
(2)使用正则符号表示规律。
(3)提取信息。
3.1.1 正则表达式的基本符号
1.点号“.”
一个点号可以代替除了换行符以外的任何一个字符,包括但不限于英文字母、数字、汉字、英文标点符号和中文标点符号。
2.星号“*”
一个星号可以表示它前面的一个子表达式(普通字符、另一个或几个正则表达式符号)0次到无限次。
3.问号“?”
问号表示它前面的子表达式0次或者1次。注意,这里的问号是英文问号。
4.反斜杠“\”
反斜杠在正则表达式里面不能单独使用,甚至在整个Python里都不能单独使用。反斜杠需要和其他的字符配合使用来把特殊符号变成普通符号,把普通符号变成特殊符号。
5.数字“\d”
正则表达式里面使用“\d”来表示一位数字。为什么要用字母d呢?因为d是英文“digit(数字)”的首字母。
6.小括号“()”
小括号可以把括号里面的内容提取出来。
3.1.2 在Python中使用正则表达式
Python的正则表达式模块名字为“re”,也就是“regular expression”的首字母缩写。在Python中需要首先导入这个模块再进行使用。导入的语句为:import re
1.findall
(1)Python的正则表达式模块包含一个findall方法,它能够以列表的形式返回所有满足要求的字符串。
(2)findall的函数原型为:re.findall(pattern, string, flags=0),pattern表示正则表达式,string表示原来的字符串,flags表示一些特殊功能的标志。
(3)findall的结果是一个列表,包含了所有的匹配到的结果
(4)函数原型中有一个flags参数。这个参数是可以省略的。当不省略的时候,具有一些辅助功能,例如忽略大小写、忽略换行符等
2.search
(1)search()的用法和findall()的用法一样,但是search()只会返回第1个满足要求的字符串。一旦找到符合要求的内容,它就会停止查找。
(2)search()的函数原型为:re.search(pattern, string, flags=0),使用.group()来获取search()方法找到的结果,.group()的参数最大不能超过正则表达式里面括号的个数。参数为1表示读取第1个括号中的内容
3.1.3 正则表达式提取技巧
1. 先抓大再抓小
2. 贪婪模式
(1)“.*”:贪婪模式,获取最长的满足条件的字符串
(2)“.*?”:非贪婪模式,获取最短的满足条件的字符串
3.2 Python文件操作
Python的文件操作涉及对文件的读/写与编码的处理,是学习爬虫的必备知识。
3.2.1 使用Python读/写文本文件
(1)open():打开一个文件,并创建一个对象【with open('文件路径', '文件操作方式', encoding='编码') as f:】
(2)f.read([size]):从文件读取指定的字节数,默认读取所有
(3)f.readline([size]):读取整行,包括 "\n" 字符
(4)f.readlines([sizeint]):读取所有行并返回列表
(5)f.write(str):将字符串写入文件,返回的是写入的字符长度
(6)f.writelines(sequence):向文件写入一个序列字符串列表
3.2.2 文件/目录模块:os
(1)os.access(path, mode):检验权限模式
(2)os.chmod(path, mode):更改权限
(3)os.chown(path, uid, gid):更改文件所有者
(4)os.close(fd):关闭文件描述符 fd
(5)os.mkdir(path[, mode]):以数字mode的mode创建一个名为path的文件夹
(6)os.open(file, flags[, mode]):打开一个文件
(7)os.read(fd, n):从文件描述符 fd 中读取最多 n 个字节
(8)os.remove(path):删除路径为path的文件
(9)os.rename(src, dst):重命名文件或目录
(10)os.rmdir(path):删除path指定的空目录
(11)os.unlink(path):删除文件路径
(11)os.unlink(path):删除文件路径
(12)os.utime(path, times):返回指定的path文件的访问和修改的时间
(13)os.write(fd, str):写入字符串到文件描述符 fd中
(14)os.path() 模块
3.2.3 使用Python读/写CSV文件
1.Python读CSV文件
要读取CSV文件,首先需要导入Python的CSV模块:import csv
with open('result.csv', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
2.Python写CSV文件
(1)writer.writeheader():写入CSV文件的列名行
(2)writer.writerows(包含字典的列表):将包含字典的列表全部写入到CSV文件中
(3)writer.writerow(字典) :写入单个字典
来源:原创
发布时间:2022-05-18 17:31:00