数据解析
- 聚焦爬虫:爬取页面中指定的页面内容;
- 编码流程:
- 指定url
- 发起请求
- 获取响应数据
- 数据解析
- 持久化存储
- 数据解析原理概述:
- 解析的局部的文本内容,都会在标签之间,或者标签对应的属性中进行存储;
- 1、进行指定标签的定位;
- 2、标签或者标签对应的属性中存储的数据值进行提取(解析)
- 解析的局部的文本内容,都会在标签之间,或者标签对应的属性中进行存储;
数据解析分类
- 正则
- bs4
- xpath
正则表达式re
- import re
- re.match #从开始位置开始匹配,如果开头没有则无
- re.search #搜索整个字符串
- re.findall #搜索整个字符串,返回一个list
- 正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。
- 多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:
可选标志修饰符
| 修饰符 | 描述 |
|---|---|
| re.I | 使匹配对大小写不敏感 |
| re.L | 做本地化识别(locale-aware)匹配 |
| re.M | 多行匹配,影响 ^ 和 $ |
| re.S | 单行匹配,使 . 匹配包括换行在内的所有字符 |
| re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
| re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
单字符
| . | 点,除换行以外所有字符(匹配任意1个字符(除了\n)) |
| [ ] | 匹配[ ]中列举的字符 |
| \d | 匹配数字,即0-9 |
| \D | 匹配非数字,即不是数字 |
| \w | 匹配单词字符,即a-z、A-Z、0-9、_,(字母,中文,数字,下划线) |
| \W | 非\w,匹配非单词字符 |
| \s | 匹配空白,所有的空字符,包括空格,制表符,换行符等,即[\f\n\r\t\v] |
| \S | 匹配非空白 |
数量修饰
| * | 任意多次 >=0(匹配前一个字符出现0次或者无限次,即可有可无) |
| + | 至少1次 >=1(匹配前一个字符出现1次或者无限次,即至少有1次) |
| ? | 可有可无 0次或者1次(匹配前一个字符出现1次或者0次,即要么有1次,要么没有) |
| {m} | 固定m次(匹配前一个字符出现m次) |
| {m,} | 至少m次 |
| {m,n} | m-n次(匹配前一个字符出现从m到n次) |
边界
| $ | 以某某结尾 |
| ^ | 以某某开头 |
其他
更多参考:https://www.cnblogs.com/dreamer-fish/p/5282679.html
| 边界 | $ | 以某某结尾 |
| ^ | 以某某开头 | |
| 分组 | (ab) | |
| 贪婪模式 | .* | |
| 非贪婪(惰性)模式 | .*? | |
| re.sub() | re.sub(正则表达式,替换内容,字符串) |
# 正则练习
import re
# 提取出python
key='javapythonc++php'
result = re.findall('python', key)[0]
print(result) # python
# 提取出hello world
key = '<html><h1>hello world</h1></html>'
result = re.findall('<h1>(.*)</h1>', key)[0]
print(result) # hello world
# 提取170
key = '我喜欢身高170米的女孩'
result = re.findall('\d+', key)[0]
print(result) # 170
# 提取出 http:// 和 https://
key = 'http://www.baidu.com and https://www.taobao.com'
result = re.findall('https?://', key) # ['http://', 'https://']
print(result)
# 提取出hello world
key = 'lalala<hTml>hello world</HtMl>hahah'
result = re.findall('<[Hh][Tt][Mm][Ll]>(.*)</[Hh][Tt][Mm][Ll]>', key)[0]
print(result) # hello world
# 提取出hitten.
key = 'bobo@hitten.edu.com'
result = re.findall('h.*?\.', key)[0]
print(result) # hitten.
# 匹配sas和saas
key = 'saas and sas and saaas'
result = re.findall('sa{1,2}s', key)
print(result) # ['saas', 'sas']
输出结果:
python
hello world
170
['http://', 'https://']
hello world
hitten.
['saas', 'sas']
图片数据爬取
需求:爬取糗事百科中糗图板块下所有的糗图图片
本文介绍了爬虫技术中的数据解析方法,包括正则表达式、Beautiful Soup 和 XPath 的使用技巧,并通过实例演示了如何从网页中提取所需数据。
1223

被折叠的 条评论
为什么被折叠?



