网络爬虫笔记【5】 信息解析与提取和正则表达式

前面我们学了爬虫,可以成功的爬取整个网页的内容,但是通常而言,网页中差不多 90% 的内容对于我们来说都是没有用的。所以后面我们会去学习如何从爬到的数据中,准确地找到我们所需要的数据,掌握信息解析和提取的方法。

一、信息解析与提取的一般方法(思路)

1. 完整解析信息的标记形式,再提取关键信息

- 需要标记解析器
- 优点是解析准确
- 缺点是解析过程繁琐/速度慢

2. 不解析全文,直接搜索信息

- 需要文本查找函数
- 优点是提取过程简洁,速度快
- 缺点是提取结果准确性和信息内容相关

3. 适应性方法

- 结合上述两种方法

二、不同类型信息的解析方法

有一些信息或数据是不需要进行内容解析的,例如图片、音频、视频等,而更常见的网页、文本或表格数据等是需要进行内容解析和提取的。需要解析和提取的信息可分为三类:无结构文本信息、半结构化标记型文本信息、结构化的信息。

针对不同类型的信息,有不同的信息解析方法。需要注意的是,文本信息解析不是指对全局的理解,而是指在文本中找到所需的内容,这是由于网络爬虫程序的目标是获取有价值的信息。

1. 无结构的文本信息(例如:txt文本)

- 利用正则表达式进行模式匹配

2. 半结构化的标记型文本信息(例如:html网页、json数据、xml数据等)

- html
    * 正则表达式是进行模式匹配
    * 利用 xpath 进行 html 标签检索
    * 利用 css 选择器进行 html 标签检索
- xml
    * 转化成 python 类型(xmltodict)
    * xpath
    * css 选择器
    * 正则表达式
- json
    * 利用json path 进行检索
    * 利用 python 类型转换为 json 类
- yaml

3. 结构化的信息(例如:数据库文件、电子表格文件等)

- 数据库文件
    * 对于 Mysql 数据库文件,可以使用 pymysql 库
    * 对于 Sqllite 数据库文件,可以使用 Sqllite3 库
    * 对于 MS SqlServer 数据库文件,可以使用 pyodbc+pymssql 库
    * 对于 Oracle 数据库文件,可以使用 cx_oracle 库
    * ......
- excel文件
    * xlwings:简单强大,可替代VBA; 
    * openpyxl:简单易用,功能广泛; 
    * pandas:数据处理功能强大; 
    * win32com:还可以处理office其他类型文件;
    * Xlsxwriter:易于生成Excel文档; 
    * DataNitro:内嵌于excel中,可替代VBA; 
    * xlutils:结合xlrd/xlwt使用。

三、正则表达式

- 内容匹配
    i.  \d  数字【0-9】
    ii. \w  字母、数字或下划线
    iii.  .  任意字符
    iv.  []  从里面选择任意一个值来匹配
- 数量匹配
    i .  *   0 - ∞ 次
    ii.  +   1 - ∞ 次
    iii.  ?    0 - 1 次
    iv.  {n,m}  n - m 次      
# 正则表达式 - 实例

# 匹配中文
'[\u4e00-\u9fa5]'

# 匹配双字节字符(含汉字)
'[^\x00-\xff]'

# 匹配空白行 
'\n\s*\r' 

# 匹配Email 
"[\w!#$%&'*+/=?^_`{|}~]+(?:\.[\w!#$%&'*+/=?^_`{|}~]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?"

# 匹配URL
'[a-zA-z]+://[^\s]*' 
    
# 匹配国内电话号码 
'\d{3}-\d{8}|\d{4}-\{7,8}' 

# 匹配腾讯QQ号 
'[1-9][0-9]{4,}'

# 匹配中国邮政编码 
'[1-9]\d{5}(?!\d)'

# 匹配18位身份证号 
'^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$'

# 匹配年-月-日格式日期
'''([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][09]{2}|[1-9][0-9]{3})
    -(((0[13578]|1[02])-(0[1-9]|[12][09]|3[01]))|((0[469]|11)
    -(0[1-9]|[12][0-9]|30))|(02-(0[19]|[1][0-9]|2[0-8]))) '''

# 匹配负整数
'^-[1-9]\d*$'

# 匹配整数 
'^-?[1-9]\d*$'

# 匹配正浮点数 
'^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$' 

#匹配负浮点数 
'^-[1-9]\d*\.\d*|-0\.\d*[1-9]\d*$'
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页