Python爬虫开发从入门到实战:正则表达式与文件操作

分类: 开发语言 > Python

第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):删除文件路径
        (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