Python中xPath技术和BeautifulSoup的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中xPath技术和BeautifulSoup的使用相关的知识,希望对你有一定的参考价值。
xpath基本知识
XPath语法:使用路径表达式来选取XML或HTML文档中的节点或节点集
路径表达式
nodename:表示选取此节点的所有子节点
/ : 表示从根节点选取
// :选择任意位置的某个节点。
. :选取当前节点
.. :选取当前节点的父节点
@ :选取属性
谓语实例
实现效果 路劲表达式
选取属于classroom子元素的第一个student元素 /classroom/student[1]
选取属于classroom子元素的最后一个student元素 /classroom/student[last()]
选取属于classroom子元素的倒数第二个stduent元素 /classroom/stduent[last()-1]
选取最前面的两个属于classroom元素的子元素的student元素 /classroom/stduent[position()<3]
选取所有拥有名为lang的属性的name元素 //name[@lang]
选取所有name元素,且这些元素拥有值为eng的lang属性 //name[@lang=‘en‘]
选取classroom元素的所有student元素,且其中的age元素的值须大于20 .classroom.stduent[age>20]
选取classroom元素中的student元素的所有name元素,且其中的age元素的值须大于20 /classroom/stduent[age>20]/name
通配符“*”与“|”操作
实现效果 路径表达式
选取classroom元素的所有子元素 /classroom/*
选取文档中的所有元素 //*
选取所有带有属性的name元素 //name[@*]
选取stduent元素的所有name和age元素 //stduent/name | //stduent/age
选取属于classroom元素的student元素的所有name元素,以及文档中所有的age元素 /classroom/stduent/name | //age
XPath轴 步的语法为 轴名称:节点测试[谓语]
轴名称 含义
child 选取当前节点的所有子节点
parent 选取当前节点的父节点
ancestor 选取当前节点的所有先辈(父、祖父等)
ancestor-or-self 选取当前节点的所有先辈以及当前节点本身
descendant 选取当前节点的所有后代节点
descendant-or-self 选取当前节点的所有后代节点以及当前节点本身
preceding 选取文档中当前节点的开始标记之前的所有节点
following 选取文档中当前节点的结束标记之后的所有节点
preceding-sibling 选取当前节点之前的所有同级节点
following-sibling 选取当前节点之后的所用同级节点
self 选取当前节点
attribute 选取当前节点的所有属性
namespace 选取当前节点的所有命名空间
XPath轴示例分析
实现效果 路径表达式
选取当前classroom节点中子元素的teacher节点 /classroom/child::teacher
选取所有id节点的父节点 //id/parent::*
选取所有以classid为子节点的祖先节点 //classid/ancestor::*
选取classroom节点下的所有后代节点 /classroom/descendant::*
选取所有以student为父节点的id元素 //student/descendant::id
选取所有classid元素的祖先节点及本身 //classid/ancestor-or-self::*
选择/classroom/student本身及其所有后代元素 /classroom/student/descendant-or-self::*
选取/classroom/teacher之前的所有同级节点,结果就是选所有的student节点 /classroom/teacher/preceding-sibling::*
选取/classroom中第二个stduent之后的所有同级节点 /classroom/student[2]/following-sibling::*
选取/classroom/teacher节点所有之前的节点(除其祖先外),不仅仅是student节点,还有里面的子节点 /classroom/teacher/preceding::*
选取/classroom中第二个student之后的所有节点,结果就是选择了teacher节点及其子节点 /classroom/student[2]/following::*
选取student节点,单独使用没有什么意思 //stduent/self::*
选取/classroom/teacher/name节点下的所有属性 /classroom/teacher/name/attribute::*
XPath运算符示例分析
含义 实例
选取classroom元素的所有student元素 /classroom/student[age=19+1] /classroom/stduent[age=5*4] /classroom/student[age=21-1]
且其中的age元素的值须等于20 /classroom/student[age=40div2]
类似可以选取 大于、小于、不等于等操作
or 运算实例 /classroom/stduent[age<20 or age>25] .................age小于20或者大于25
and 运算实例 /classroom/stduent[age>20 and age<25] ..................age在20 到25 之间
mod 计算除法的余数
实例代码
from lxml import etree contentStream = open(r‘xpathText.xml‘, ‘rb‘) content = contentStream.read().decode(‘utf-8‘) root = etree.XML(content) print(content) print(‘-------‘) em = root.xpath(‘/classroom/student[2]/following::*‘) print(em[0].xpath(‘./name/text()‘))#获取name标签中文本的内容 print(em[0].xpath(‘./name/@lang‘)) #获取name标签中属性名为lang的属性值
BeautifulSoup基础知识
以上是关于Python中xPath技术和BeautifulSoup的使用的主要内容,如果未能解决你的问题,请参考以下文章