Xpath学习笔记

from lxml import etree
import os
os.path.abspath('.')
text='''
<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>
     </ul>
 </div
'''
html = etree.HTML(text)#也可以读取文本文件 html=etree.parse('.text',etree.HTMLParser())
result = etree.tostring(html)#tostring()输出被补全过的网页。
print(result.decode('utf-8'))


result = html.xpath('//li')#//选中
print(result)
print(result[0])

result= html.xpath('//li/a')#li之中的a(直接子节点。
print(result)

result= html.xpath('//ul//a')#ul中的所有a(不是直接子节点

result = html.xpath('//a[@href="link4.html"]/../@class')#@选取属性,。。选取父节点[这里是属性匹配,是限制]
print(result)

#文本获取
result = html.xpath('//li[@class="item-0"]/a/text()')
print(result)

#属性获取
result = html.xpath('//li/a/@href')


#若属性里有很多值,可以使用contains()来选取包含某属性的所有节点

#多属性匹配

text1 = '''
<li class="li li-first" name="item"><a href="link.html">first item</a><li>
'''
html1 = etree.HTML(text1)
result = html1.xpath('//li[contains(@class,"li") and @name="item"]/a/text()')#选取即包含li属性,而且name=item的a节点的文本,用的and连接。
print(result)

#按序选择(使用索引),比如下面在众多li节点中把需要的给取出来
result = html.xpath('//li[1]/a/text()')
print(result)
result = html.xpath('//li[last()]/a/text()')
print(result)
result = html.xpath('//li[position()<3]/a/text()')
print(result)
result = html.xpath('//li[last()-2]/a/text()')
print(result)



#使用节点器选择节点
result = html.xpath('//li[1]/ancestor::*') #ancestor是选父亲节点,*是所有。
print(result)
result = html.xpath('//li[1]/ancestor::div')#选标签为div的父亲节点。
print(result)
result = html.xpath('//li[1]/attribute::*')#获取本节点的所有属性
print(result)
#类似,child是选直接子节点,descendant是获取所有子节点,following是获取当前节点后的所有节点,,following-sibling 是获取当前节点之后的同级节点。

遇到了从文件读取text那报错,而且不会解决,群里面说是为了方便才写./的,但还是不咋懂,以后再看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值