【Python网络蜘蛛 · 7】:数据提取之xpath(附操作源码)

目录

一、数据提取之xpath

1、为什么要学习xpath和lxml?

2、什么是xpath?

3、lxml的树结构

4、xpath的节点关系

 5、xpath的语法使用

6、代码演示


一、数据提取之xpath

1、为什么要学习xpath和lxml?

lxml是一款高性能的 Python HTML/XML 解析器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息。

2、什么是xpath?

XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言,可用来在 HTML\XML 文档中对元素和属性进行遍历。

3、lxml的树结构

text = ''''<bookstore> 
            <book category="COOKING"> 
                <title lang="en">Everyday Italian</title> 
                <author>Giada De Laurentiis</author> 
                <year>2005</year> 
                <price>30.00</price> 
            </book> 
            <book category="CHILDREN"> 
                <title lang="en">Harry Potter</title> 
                <author>J K. Rowling</author> 
                <year>2005</year> 
                <price>29.99</price> 
            </book> <book category="WEB"> 
                <title lang="en">Learning XML</title> 
                <author>Erik T. Ray</author> 
                <year>2003</year>
                <price>39.95</price> 
            </book> 
            </bookstore>
        '''
  •  上面的xml内容可以表示为下面的树结构 
        
上面的这种结构关系在xpath被进一步细化

4、xpath的节点关系

每个XML的标签我们都称之为节点,其中最顶层的节点称为根节点。

 5、xpath的语法使用

XPath 使用路径表达式来选取 XML 文档中的 节点或者节点集 。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
使用chrome插件选择标签时候,选中时,选中的标签会添加属性class="xh-highlight"
  • 下面列出了最有用的表达式:
表达式描述
nodename选中该元素。
/从根节点选取、或者是元素和元素间的过渡。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。
text()选取文本。

6、代码演示

先安装lxml模块,安装命令:pip install lxml

# 以下是lxml的树结构
text = ''''<bookstore> 
            <book category="COOKING"> 
                <title lang="en">Everyday Italian</title> 
                <author>Giada De Laurentiis</author> 
                <year>2005</year> 
                <price>30.00</price> 
            </book> 
            <book category="CHILDREN"> 
                <title lang="en">Harry Potter</title> 
                <author>J K. Rowling</author> 
                <year>2005</year> 
                <price>29.99</price> 
            </book> <book category="WEB"> 
                <title lang="en">Learning XML</title> 
                <author>Erik T. Ray</author> 
                <year>2003</year>
                <price>39.95</price> 
            </book> 
            </bookstore>
        '''
  • 获取所有book下面title的文本值

  • 获取所有book下面title的lang属性值

  • 注意:

  • 属性值需使用@+属性名获取

  • 获取第二个book下面author的文本值

  • 其他路径表达式和结果

路径表达式结果
bookstore选择bookstore元素。
/bookstore选取根元素bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book选择属于bookstore元素的后代的所有book元素,而不管它们位于bookstore 之下的
bookstorel/book
什么位置。
//book选取所有book子元素,而不管它们在文档中的位置。
bookstorel/book选择属于bookstore元素的后代的所有book元素,而不管它们位于bookstore 之下的什么位置。
//book/title/@lang选择所有的book下面的title中的lang属性的值。
l/book/title/text()选择所有的book下面的title的文本。

  • 通过找到父节点遍历子节点获取信息

text = ''''<div> 
                <book category="COOKING"> 
                    <title lang="en">Everyday Italian</title> 
                    <author>Giada De Laurentiis</author> 
                    <year>2005</year> 
                    <price>30.00</price> 
                </book> 
                <book category="CHILDREN"> 
                    <title lang="en">Harry Potter</title> 
                    <author>J K. Rowling</author> 
                    <year>2005</year> 
                    <price>29.99</price> 
                </book> <book category="WEB"> 
                    <title lang="en">Learning XML</title> 
                    <author>Erik T. Ray</author> 
                    <year>2003</year>
                    <price>39.95</price> 
                </book> 
            </div>
        '''

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值