08XPath解析数据

XPath解析数据

提取页面中整片整片数据时使用,但是必须确定当前

元素内容与响应的数据一致时才用xpath

1.什么是xpath

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

2. XML(可扩展标记语言)

被设计为传输和存储数据,其焦点是数据的内容

3. xpath选择节点(标签)工具
  • Chrome插件 XPath Helper
  • Windows下开源的XPath表达式编辑工具:XML Quire(XML格式文件可用)
  • Firefox插件 XPath Checker
4. xpath语法
'''
/        -     从根节点选取
//       -     从匹配选择当前节点选择文档中任意位置的节点(不考虑它们的位置)
.        -     选取当前节点
..       -     选取当前节点的父节点
@        -     选取属性/定位元素       # //ul[@id="detail-list"]
'''

# 学习重点:
# 1)获取文本
# 'a/text()'     # 获取a下的文本
# 'a//text()'    # 获取a下的所有标签的文本
# '//a[text()='下一页']'  # 选择文本为下一页的a标签

# 2)‘@符号’
# 'xx/@href'                   # 获取标签对应的href地址
# '//ul[@id="detail-list"] '   # 获取属性值为特定值的标签    

# 2)‘//’
# 'li//a'      # 表示li下任何一个a标签

Chorme浏览器选择对应路径的节点时被选中节点有一个属性’class=xh-highlight’

5. xpath节点选择语法

1)选择特定节点

# '/a[1]'   '/a[last()]' '/a[last()-1]'  # 获取第一个a标签;最后一个a标签;倒数第二个a标签
# '/a[position()>4]'   # 从第五个a标签开始选

2)选择未知节点

# 通配符
*       匹配任何元素节点
@*      匹配任何属性节点
node()  匹配任何类型的节点
//title | //price    匹配所有title或price元素
6. lxml库的使用
from lxml import etree
  
# lxml能够修正HTML代码,但是可能会改错。使用etree.tostring观察修改之后的html的样子,根据修改之后的html字符串写xpath  
# lxml 能够接收bytes和str的字符串
text = '''<div><ul><li>xxxx</li></ul></div>'''

# 将字符串转化为element对象
html = etree.HTML(text)

# 查看element对象中包含的字符串
print(etree.tostring(html).decode())

# 获取class为item-1 li下的a的href
ret1 = html.xpath("//li[@class='item-1']/a/@href")

ret3 = html.xpath("//li[@class='item-1']")
for i in ret3:
    item = {}
    item['title'] = i.xpath("./a/text()")[0] if len(i.xpath("./a/text()"))>0 else None
    item['href'] = i.xpath("./a/@href")[0] if len(i.xpath("./a/@href"))>0 else None
    print(item)

"""

提取页面数据思路:
1)先分组,取到一个包含分组标签的列表
2)遍历,取其中每一组进行数据的提取不会造成数据对应的错乱

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值