文章目录
- 1. 页面解析和数据提取
- 2. 非结构化的数据处理
- 3. 结构化的数据处理
- 4. 什么是正则表达式
- 5. 正则表达式匹配规则
- 5.1 字符
- 5.2 预定义字符集(可以写在字符集[...]中)
- 5.3 数量词(用在字符或(...)之后)
- 5.4 边界匹配(不消耗待匹配字符串中的字符)
- 5.5 逻辑、分组
- 5.6 特殊构造(不作为分组)
- 6. 案例:笔趣阁小说批量下载
1. 页面解析和数据提取
一般来说,抓取某个网站或某个应用的内容,提取有用的价值。内容一般分为2部分,非结构化数据 和 结构化数据。
- 非结构化数据:先有数据,再有结构
- 结构化数据:先有结构,再有数据
不同类型的数据,需要采用不通过的方式来处理
2. 非结构化的数据处理
- 文本、电话号码、邮箱地址:使用正则表达式
- HTML文件:可以使用正则表达式、XPath、CSS选择器
3. 结构化的数据处理
- JSON文件:可以使用JSON Path、转化成功Python类型进行操作(json类)
- XML文件:转化成功Python类型(xmltodict)、XPath、CSS选择器、正则表达式
4. 什么是正则表达式
概念:
正则表达式,通常用来检索、替换符合某个规则的文本。
正则表达式式对字符串操作的一种逻辑公式,就是用先定义好的一些特定字符,及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
应用:
- 给定的字符串是否符合正则表达式的过滤逻辑(“主要用来匹配”)
- 通过正则表达式,从文本字符串中获取我们想要的特定部分(“主要用来过滤”)
5. 正则表达式匹配规则
5.1 字符
语法 | 说明 | 表达式实例 | 完整匹配的字符串 |
---|---|---|---|
一般字符 | 匹配自身 | abc | abc |
. | 匹配任意除换行符 “\n” 外的字符。在DOTALL模式中也能匹配到换行符 | a.c | abc |
\ | 转义字符,使用后一个字符改变原来的意思。如果字符串中有字符 * 需要匹配,可以使用 * 或者字符集 [*] | a.c a\c | a.c a\c |
[…] | 字符集(字符类)。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。第一个字符如果是则表示取反,如[abc]表示不是abc的其他字符。 所有的特殊字符在字符集中和都失去原有的特殊含义。在字符集中如果使用 ] \ - 或 ^ ,可以在前面加上反斜杠,或把 ] \ - 放在第一个字符,把^放在非第一个字符 | a[bcd]e | abe ace ade |
5.2 预定义字符集(可以写在字符集[…]中)
语法 | 说明 | 表达式实例 | 完整匹配的字符串 |
---|---|---|---|
\d | 数字:[0-9] | a\dc | a1c |
\D | 非数字:[^\d] | a\Dc | abc |
\s | 空白字符:[<空格>\t\r\n\f\v] | a\sc | a c |
\S | 非空白字符:[^\s] | a\Sc | abc |
\w | 单词字符:[A-Za-z0-9_] | a\wc | abc |
\W | 非单词字符:[^\w] | a\Wc | a c |
5.3 数量词(用在字符或(…)之后)
语法 | 说明 | 表达式实例 | 完整匹配的字符串 |
---|---|---|---|
* | 匹配前一个字符0或无限次 | abc* | ab abccc |
+ | 匹配前一个字符1次或无限次 | abc+ | abc abccc |
? | 匹配前一个字符0次或1次 | abc? | ab abc |
{m} | 匹配前一个字符m次 |