###markdown table演示
Tables
Tables | Are | Cool |
---|---|---|
col 3 is | right-aligned | $1600 |
col 2 is | centered | $12 |
zebra stripes | are neat | $1 |
GFM Task Lists
- a task list item
- list syntax required
- normal formatting, @mentions, #1234 refs
- incomplete
- completed
01、正则表达式
![正则表达式匹配规则.png](resources/B269D9AA59174DA6258D6E963049CF98.png =1200x2578)
###正则表达式
字符 | 含义 | 表达式实例 | 完整匹配的字符串 |
---|---|---|---|
. | 匹配任意一个字符 | abc. | abcd、abc9 |
[] | 匹配括号中的任意一个字符 | [abc]d | ad、bd、cd |
- | 在[]括号内表示字符范围 | [0-9a-fA-F] | 可以匹配一位十六进制的数字 |
^ | 在[]括号内的开头,匹配除括号中的字符之外的任意一个字符 | [^xy] | 匹配除xy之外的任一字符,因此[^xy]1可以匹配a1、b1 |
[:xxx:] | grep工具预定义的一些命名字符类 | [[:alpha:] / [[:digit:]]] | 匹配一个字母 / 匹配一个字母 |
###数量限定符
字符 | 含义 | 表达式实例 | 完整匹配的字符串 |
---|---|---|---|
? | 紧跟在它前面的单元应匹配 零次或一次 | [0-9]?.[0-9] | 匹配0.0、2.3、5等 |
+ | 紧跟在它前面的单元应匹配 一次或多次 | [a-zA-Z0-9_]+@[a-zA-Z0-9_]+.[a-zA-Z0-9_.-]+ | 匹配email地址 |
* | 紧跟在它前面的单元应匹配 零次或多次 | [0-9][0-9]* 匹配至少一位数字,等价于[0-9]+,[a-zA-Z_]+[a-zA-Z_0-9]* | 匹配C语言的标识符 |
{n} | 紧跟在它前面的单元应 精准匹配n次 | [1-9][0-9]{2} | 匹配从100到999的证书 |
{n,} | 紧跟在它前面的单元应匹配 至少n次 | [1-9][0-9]{2,} | 匹配三位以上(含三位)的整数 |
{,m} | 紧跟在它前面的单元应匹配 最多m次 | [0-9]{,1} 相当于[0-9]? | |
{n,m} | 紧跟在它前面的单元应匹配 至少n次,最多m次 | [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} | 匹配IP地址 |
###其他特殊字符
字符 | 含义 | 表达式实例 | 完整匹配的字符串 |
---|---|---|---|
\ | 转义字符,普通字符转义为特殊字符,特殊字符转义为普通字符 | a.c | a.c |
() | 将正则表达式的一部分括起来组成一个单元,可以对整个单元使用数量限定符 | [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} | 匹配IP地址 |
| |
连接两个子表达式,表示或的关系 | n(0/` | `either) |
###预定义字符集
字符 | 含义 | 表达式实例 | 完整匹配的字符串 |
---|---|---|---|
\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 |
###模式修饰符
字符 | 含义 | 表达式实例 | 完整匹配的字符串 |
---|---|---|---|
?s | Singleline(单行模式)表示更改.的含义。使它与每一个字符匹配(包括换行符\n) | 0 | 0 |
.*? | 是一个单元分组。“,”匹配任意字符。“*?”表示重复>=0次匹配 | 0 | 0 |
- 将(?s:(.*?))元组放置于某一特征字串中,可以提取带有这一特征字串的内容。
Go实现的是RE2标准。
02、Go语言使用正则表达式
解析、编译正则表达式
- 使用regex.**MustCompile()**函数 Compile:编译
- func MustCompile(str string) *Regexp
- 函数的主要作用是将正则表达式中,奇形怪状的符号(如.*?\[…)转换成Go语言能识别的格式,并将其存成结构体格式,方便编译器识别。
- 参数:正则表达式字串。建议使用反引号。
- 返回值:编译后的结构体。解析失败时会产生panic错误。
根据解析好的规则(结构体形式),从指定字符串中提取需要的信息。
- 使用**FindAllStringSubmatch()**函数
- func (re *Regexp) FindAllStringSubmatch(s string,n int)[] []string
- 参数1: 待解析的字符串
- 参数2: 匹配的次数。 通常传-1,表示匹配所有。
- 返回值:返回成功匹配的[][]string
[][] string说明
1 | [ |
01、双向爬取练习——爬取豆瓣电影
横向爬取
- 以页为单位
纵向爬取
- 以一个页面内的条目为单位
纵向爬取
- 电影名称
- <img width=“100” alt=“电影名称”—————>
\<img width=“100” alt=“(?s:(.\*?))"
- <img width=“100” alt=“电影名称”—————>
- 分数
- <span class=“rating_num” property=“v:average”>分数</span>—————>
\<span class=“rating\_num” property=“v:average”\>(?s:(.\*?))\</span\>
- <span class=“rating_num” property=“v:average”>分数</span>—————>
- 评分人数
- <span>评分人数 人评分</span>—————>
\<span\>(?s:(.\*?))人评分\</span\>
- <span>评分人数 人评分</span>—————>
- 电影名称
02、段子爬虫练习
- 目标分析
- 爬取段子
- 并发实现
![QQ截图20210913092814.png](resources/023ACFFD02CF5E5D3A139D3DA72BC6AB.png =1291x749)
综上分析,爬取“捧腹网”段子内容,大致可以分为三步实现。
- 第一,先获取网页规律,根据用户指定起始、终止页打开要爬取的网页。并获取每一个网页中单个段子所对应网页的URL。
- 第二,依次将每一个段子对应的网页打开,读取标题和正文内容。
- 第三,将一个网页内容(10个段子)保存成一个.txt文件。
03、斗鱼图片下载器练习
1 |
****
- 本文作者: 梁俊可
- 本文链接: http://ljk3d.com/2021/10/19/goLangNote/goLangAdvance/06_GoLang语言正式课_Go网络编程_正则表达式—爬虫项目练习/
- 版权声明: 梁俊可工作室