一、re正则
Ⅰ:
常用的匹配规则
\w 匹配字母、数字、下划线
\W 匹配不是字母、数字及下划线的字符
\s 匹配任意空白字符,等[\t\n\r\f]
\S 匹配任意非空字符
\d 匹配任意数字,等价于[0-9]
\D 匹配任意非数字的字符
\A 匹配字符串开头
\Z 匹配字符串结尾。如果存在换行,只匹配到换行前的结束字符串
\z 匹配字符串结尾。如果存在换行,同时还会匹配换行符
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配一行字符串的开头
$ 匹配一行字符串的结尾
. 匹配任意字符,除了换行符。当re.DOTALL标记被指定时,可以匹配包括换行符的任意字符
[...] 用来表示一组字符,单独列出,例如[amk]用来匹配a、m、k
[^...] 匹配不在[]中的字符
* 匹配0个或多个表达式
+ 匹配1个或多个表达式
? 匹配0个或1个前面的正则表达式定义的片段,非贪婪方式
{n} 精确匹配n个前面的表达式
{n,} 重复n次或更多次 {0,} == * {1,} == +
{n,m} 重复n到m次
a|b 匹配a或b
() 匹配括号内的表达式,也表示一个组
Ⅱ:匹配方法
①:match
从字符串的起始位置开始匹配正则表达式,如果匹配,就返回匹配成功的结果;如果不匹配,就返回None。可以使用括号()将想提取的子字符串括起来,调用group方法传入分组的索引即可获取提取结果。
①:通用匹配符 .* 可以匹配任意字符(除换行符),*代表匹配前面字符无限次
②:span()输出匹配字符串的长度
③:.*? 匹配尽可能少的字符,通常会让位于后面的正则表达式。
④:修饰符
常用的有
re.S (使匹配内容包括换行符在内的所有字符)
re.I(使匹配对大小不敏感)
⑤:转义匹配,即在匹配方法中+r,即re.match(r"...")
二、XPath
按序选择:
①:html.xpath(r'// li[1] / a / text()')
直接选取第一个li的节点,往中括号传入数字1即可实现;注意:这里和写代码不同,序号以1开头,而非0.
②:html.xpath(r'// li [last()] / a / text()')
选取最后一个节点
③:html.xpath(r'// li [position() < 3 ] / a / text()')
选取位置小于3的li节点,也就是位置序号为1 和 2的节点
④:html.xpath(r'// li[last()-2] / a / text()')
选取倒数第三个li节点。因为lats方法代表最后一个,在次基础上减2得到的就是倒数第三个。
三、Beautiful Soup
如果返回的是单个节点,可以直接调用string(get_text)、attrs来获取其文本和属性;如果返回结果是包含多个节点的生成器,则可以将结果转为列表,再从中取出某个元素,之后再调string(get_text)、attrs来获取其文本和属性
四、pyquery
find方法查找的范围是节点的所有子孙节点
如果结果是单个节点,既可以直接打印输出,也可以直接转成字符串
如果结果是多个节点,就需要遍历获取了。需要调用items方法。
因此,在获取属性和文本时,可以观察返回的节点是一个还是多个,如果是多个,则需要遍历才能依次获取每个节点的属性和文本
获取文本
html方法返回的是第一个li节点内部的HTML文本,而text返回了所有的li节点内部的纯文本,各节点内容中间用一个空格分割开,即返回结果是一个字符串
因此,想获取所有节点的内部HTML文本,就需要遍历这些节点
而text方法不需要遍历即可获取,会对所有节点取文本之后合并成一个字符串
五、parsel
如果要提取selectorlist里面的结果,可以使用get()或getall()方法,前者会获取第一个selector对象里的内容,后者会依次获取每个selector对象对应的内容。