python 3.x 爬虫基础
python 3.x 爬虫基础---http headers详解
python 3.x 爬虫基础---Urllib详解
python 3.x 爬虫基础---Requersts,BeautifulSoup4(bs4)
python 3.x 爬虫基础---正则表达式
前言正则表达式是对字符串的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则的字符串”,此字符串用来表示对字符串的一种“过滤”逻辑。正在在很多开发语言中都存在,而非python独有。对其知识点进行总结后,会写一个demo。
1.正则表达式python是自1.5开始引进re模块进行处理正则的。我先把正则的匹配规则总结一下,再总结re模块相应的方法。
1.1匹配规则 语法 解释 表达式 成功匹配对象一般字符 匹配自身相对应的字符 abc abc
. 匹配除换行符(\n)以外的任意字符 a.c abc
\ 转义字符,可以改变原字符的意思 a.c a.c
\d 匹配数字:0~9 \dabc 1abc
\w 匹配单词字符,a~z;A~Z;0~9 \w\w\w oX2
\s 匹配空格字符(\t,\n,\r,\f,\v) a\sc a c
\D 匹配非数字字符 \Dabc aabc
\W 匹配非单词字符 a\Wc a c
\S 匹配非空格字符 \S\Sc 1bc
[] 字符集,对应位置上可以是字符集里的任意字符 a[def]c aec
[^] 对字符集当中的内容进行取反 a[^def]c a2c
[a-z] 指定一个范围字符集 a[A-Z]c aBc
* 允许前一个字符可以出现0次或者无限次 a*b aaab或b
+ 前一个字符至少出现1次 a+b aaab或ab
? 前一个字符只能出现一次或者不出现 a?b ab或b
{m} 允许前一个字符只能出现m次 a{3}b aaab
{m,n} 允许前一个字符至少出现m次,最多出现n次(如果不写n,则代表至少出现m次) a{3,5}b和a{3,} aaaab和aaaaaab
^ 匹配字符串的开始,多行内容时匹配每一行的开始 ^abc abc
$ 匹配字符串的结尾,多行内容时匹配每一行的结尾 abc& abc
\A 匹配字符串开始位置,忽略多行模式 \Aabc abc
\Z 匹配字符串结束位置,忽略多行模式 abc\Z abc
\b 匹配位于单词开始或结束位置的空字符串 hello \bworld hello world
\B 匹配不位于单词开始或结束位置的空字符串 he\Bllo hello
| 表示左右表达式任意满足一种即可 abc|cba abc或cba
(…) 将被括起来的表达式作为一个分组,可以使用索引单独取出 (abc)d abcd
(?P<name>…) 为该分组起一个名字,可以用索引或名字去除该分组 (?P<id>abc)d abcd
\number 引用索引为number中的内容 (abc)d\1 abcdabc
(?P=name) 引用该name分组中的内容 (?P<id>abc)d(?P=id) abcdabc
(?:…) 分组的不捕获模式,计算索引时会跳过这个分组 (?:a)b(c)d\1 abcdc
(?iLmsux) 分组中可以设置模式,iLmsux之中的每个字符代表一个模式 (?i)abc Abc
(?#…) 注释,#后面的内容会被忽略 ab(?#注释)123 ab123
(?=…) 顺序肯定环视,表示所在位置右侧能够匹配括号内正则 a(?=\d) a1最后的结果得到a
(?!…) 顺序否定环视,表示所在位置右侧不能匹配括号内正则 a(?!\w) a c最后的结果得到a
(?<=…) 逆序肯定环视,表示所在位置左侧能够匹配括号内正则 1(?<=\w)a 1a
(?<!…) 逆序否定环视,表示所在位置左侧不能匹配括号内正则 1 (?<!\w)a 1 a
(?(id/name)yes|no) 如果前面的索引为id或者名字为name的分组匹配成功则匹配yes区域的表达式,否则匹配no区域的表达式,no可以省略 (\d)(?(1)\d|a) 32
上面表格中(?iLmsux)这里的”i”, “L”, “m”, “s”, “u”, “x”,它们不匹配任何字串,而对应re模块中(re.S|re.S):