Xpath、正则表达式、Re的使用
Xpath:
XPath 是一门在 XML 文档中查找信息的语言。
XPath 是 XSLT 中的主要元素。
XQuery 和 XPointer 均构建于 XPath 表达式之上
- 在XPath中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点
- XML文档是被作为节点树来对待的。
- XPath使用路径表达式在XML文档中选取节点。节点是通过沿着路径选取的。下面列出了最常用的路径表达式:
- nodename 选取此节点的所有子节点。
- / 从根节点选取。
- // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
- . 选取当前节点。
- .. 选取当前节点的父节点。
- @ 选取属性。
- /text() 提取标签下面的文本内容
- 如:
- /标签名 逐层提取
- /标签名 提取所有名为<>的标签
- //标签名[@属性=“属性值”] 提取包含属性为属性值的标签
- @属性名 代表取某个属性名的属性值
LXML库:
- 导入库:from lxml import etree
- lxml将html文本转成xml对象
- tree = etree.HTML(html)
- 用户名称:tree.xpath(’//div[@class=“auth”]/a/text()’)
- 回复内容:tree.xpath(’//td[@class=“postbody”]’) 因为回复内容中有换行等标签,所以需要用string()来获取数据。
- string()的详细见链接:https://www.cnblogs.com/CYHISTW/p/12312570.html
- Xpath中text(),string(),data()的区别如下:
- text()仅仅返回所指元素的文本内容。
- string()函数会得到所指元素的所有节点文本内容,这些文本讲会被拼接成一个字符串。
- data()大多数时候,data()函数和string()函数通用,而且不建议经常使用data()函数,有数据表明,该函数会影响XPath的性能。
Re库:
Re库又称为正则表达式库,是Python的标准库,主要用于字符串的匹配。
Re库使用raw string 类型(原生字符串类型),表示为r'test',例如:r'[1-9]\d{5}'表示大陆的邮政编码
应用:当正则表达式中包含转义字符时,用raw string来表达
python中re库的函数:
- re.findall():搜索所有满足条件的字符串
- re.match():从第一个字符开始匹配模式
- re.search():搜索第一个满足条件的字符串,查找到第一个停止
- re.sub():替换满足条件的字符串
- re.search(pattern,string,flags=0)
- 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象。
- pattern:正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
- re.I(re.IGNORECASE):忽略正则表达式的大小写,[A-Z]能够匹配小写字符
- re.M(re.MULTILINE):正则表达式中的^操作符能够将给定字符串的每行当作匹配开始
- re.S(re.DOTALL):正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符
- re.match(pattern,string,flags=0)
- 从一个字符串的开始位置起匹配正则表达式,返回match对象。
- pattern:正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
- re.findall(pattern,string,flags=0)
- 搜索字符串,以列表类型返回全部能匹配的子串。
- pattern:正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
- re.sub(pattern,repl,string,count=0,flags=0)
- 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串。
- pattern:正则表达式的字符串或原生字符串表示
- repl:替换匹配字符串的字符串
- string:待匹配字符串
- count:匹配的最大替换次数
- flags:正则表达式使用时的控制标记