非结构化数据
非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括所有格式的办公文档、文本、图片、XML, HTML、各类报表、图像和音频/视频信息等等。
结构化数据
结构化数据可以使用关系型数据库来表示和存储,如MySQL、Oracle、SQL Server等,表现二维形式的数据。可以通过固有键值获取相应信息。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。结构化的数据的存储和排列是很有规律的,这对查询和修改等操作很有帮助。但是,显然,它的扩展性不好
选择方法
可选择的方式有很多,这里介绍正则,跟xpath,其他的实际运用中哪个更好用用哪个就行了
正则
在 Python 中,使用内置的 re 模块
compile() 函数将正则表达式的字符串形式编译为一个 Pattern 对象1
2
3
4
5
6
7
8
9
10pattern = re.compile(r'正则规则')
Pattern 对象的一些常用方法
match(string[, pos[, endpos]]): 从起始位置开始查找,一次匹配
search(string[, pos[, endpos]]): 从任何位置开始查找,一次匹配
# <<<<<<成功返回Match 对象,失败返回None>>>>>>
findall(string[, pos[, endpos]]): 全部匹配,返回列表/空列表
finditer(string[, pos[, endpos]]): 全部匹配,返回(Match对象)迭代器
split(string[, maxsplit]): 能够匹配的子串进行分割,返回列表
sub(repl, string[, count]):替换
# 引用分组可以用(\6 \1', string))
Match 对象方法
group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0);
start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;
([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;
span([group]) 方法返回 (start(group), end(group))。
贪婪非贪婪模式
字符串abbbef
贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配 ( )
ab ,匹配结果: abbb
非贪婪模式:在整个表达式匹配成功的前提下结束匹配,尽可能少的匹配 ( ? )
ab*? ,匹配结果: a
xpath
lxml
lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据1
pip install lxml
1 | response = requests.get(url) #发送请求 |
json
1 | import json |
json.loads(jsonstr)
把Json格式字符串解码转换成Python对象
json.dumps(python)
把一个Python对象编码转换成Json字符串
序列化时默认使用的ascii编码 添加参数 ensure_ascii=False 禁用ascii编码,按utf-8编码
json.dump(python, open(‘src.json,w’)
将Python内置类型序列化为json对象后写入文件
json.load(open(‘src.json’)
读取文件中json形式的字符串元素 转化成python类型
xpath规则
1 | 表达式 描述 |
正则规则
1 | 字符 描述 |