经历了爬取豆瓣电影TOP250数据我们会发现使用正则表达式其实并没有多么方便,有没有更加好的工具呢?答案当然是有的。接下来将使用三个篇幅分别介绍XPath,Beautiful Soup和pyquery这三个解析库。
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。 起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSLT间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。[来自360百科] 现在我们使用它对HTML文档进行搜索。
lxml库是Python的一个解析库,支持HTML和XML的解析,支持XPath。下面介绍在Windows,Linux和Mac上的安装。
安装好这些必要的类库后重试命令进行安装。
以下是一段HTML:
显然,这段HTML中的节点没有闭合,我们可以使用lxml中的etree模块进行补全。
除了直接读取文本进行解析,etree也可以读取文件进行解析。
根据XPath常用规则可以知道通过//可以查找当前节点下的子孙节点,以上面的html为例获取所有节点。
如果我们不要获取所有节点而是指定获取某个名称的节点,只需要将*改为指定节点名称即可。如获取所有的li节点
根据XPath常用规则我们可以使用/或//获取子孙节点或子节点。现在我要获取li节点下的a节点。
根据XPath常用规则可以通过匹配指定的属性。我们通过class属性找最后一个li节点。
根据XPath常用规则可以通过获取当前节点的父节点。现在我要获取最后一个节点的父节点下的class属性。
很多时候我们找到指定的节点都是要获取节点内的文本信息。我们使用方法获取节点中的文本。现在获取所有a标签的文本信息。
在上面的例子中所有的属性值都只有一个,如果属性值有多个还能匹配的上吗?
属性多值匹配是节点属性有许多个值,我们根据一个值获取符合添加的节点。由于我们很多情况下无法仅仅根据一个属性值就获取到目标节点,往往要根据多个属性来获取目标节点。
也许你会说这个直接使用name的属性值就可以得到了,然而,这里只是作为演示。
下面列出了可用在 XPath 表达式中的运算符:
【上表来源:w3school运算符】
在上面的操作中我多次找第2个li节点或找最后一个li节点,使用属性值进行匹配。其实何必呢!我们可以根据顺序进行选择。
我们使用了last()和postion()函数,在XPath中还有很多函数,详情见:w3school 函数。
我们可以通过XPath获取祖先节点,属性值,兄弟节点等等,这就是XPath的节点轴。轴可定义相对于当前节点的节点集。
【上表来源:[w3school XPath轴](https://www.w3cschool.cn/xpath/xpath-axes.html)】使用示例:
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.xrbh.cn/tnews/11296.html