网页数据解析提取

一、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对象对应的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值