Xpath基础

1.什么是xpath

XPath是一门在XML文档中查找信息的语言

2.xpath中的节点关系

例子:

<bookstore>

<book>

        <title>HarryPotter</title>

        <author>JK.Rowling</author>

        <year>2022</year>

        <price>1</price>

</book>

</bookstore>

1.父(Parent)

每个元素以及属性都有一个父。

在例子中,book元素是title、author、year以及price元素的父:

2.子(Children)

元素节点可有零个、一个或多个子。

在例子中,title、author、year以及price元素都是book元素的子:

3.同胞(Sibling)

拥有相同的父的节点

在例子中,title、author、year以及price元素都是同胞:

4.先辈(Ancestor)

某节点的父、父的父,等等。

在例子中,title元素的先辈是book元素和bookstore元素:<bookstore>

5.后代(Descendant)

某个节点的子,子的子,等等。

在例子中,bookstore的后代是book、title、author、year以及price元素:

3.节点的选取

 

4.Xpath语法

from lxml import etree
wb_data='''
        <div>
            <ul>
                 <li class="item-0"><a href="link1.html">first item</a></li>
                 <li class="item-1"><a href="link2.html">second item</a></li>
                 <li class="item-inactive"><a href="link3.html">third item</a></li>
                 <li class="item-1"><a href="link4.html">fourth item</a></li>
                 <li class="item-0"><a href="link5.html">fifth item</a> # 注意,此处缺少一个 </li> 闭合标签
             </ul>
         </div>
        '''
#解析字符串为html对象,自动补全html,body
html=etree.HTML(wb_data)

#解析数据,a标签的文本
#写法一:text属性
data1=html.xpath('/html/body/div/li/a')
for i in data1:
    print(i.text)
#写法二:text()函数
data2=html.xpath('//a/text()')
print(data2)

#解析文件:html文件,但是自定义解析器,因为etree默认是xml解析器
#自定义解析器
parser=etree.HTMLParser('utf-8')
#解析html的文件为html的对象
html2=etree.parse('123.html',parser=parser)

#将对象html2变为字符串,解码,打印输出
# html_data=etree.tostring(html2,pretty_print=True)
# res=html_data.decode('utf-8')
# print(res)

#任意匹配
# data3=html.xpath('//*')
# for i in data3:
#     if hasattr(i,'text'):
#         print(i.text)

#打印电影名字
data4=html2.xpath('//div[@title]')
for i in data4:
    #. 当前节点div,寻找title属性
    title=i.xpath('./@title)')
    #寻找当前节点文本
    desc=i.xpath('./')
    print(title,'\t\t\t\t',desc)

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值