第三章 网页数据的解析提取之XPath

XPath的使用

  • xpath全称XML Path Language,用来在XML文档里面查找信息,同样适用于HTML文档的搜索。
  • 常用规则
表达式 描述
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

//title[@lang='eng']
代表选择所有名称为title的同时属性lang的值为eng的节点

  • XPath的基本用法和关于轴的使用
from lxml import etree

text = '''

'''
# 调用etree的HTML类进行初始化,生成一个xpath对象
html = etree.HTML(text)
# 视同tostring()方法将HTML补充完整
result = etree.tostring(html)
print(result.decode('utf-8'))

print("---------------------------")

html = etree.parse('./text.html', etree.HTMLParser())
result = etree.tostring(html)
print(result.decode('utf-8'))

print("-------------使用轴--------------")

html = etree.HTML(text)
# ancestor: 获取所有祖先节点 (获取第一个
  • 标签的所有祖先节点) result = html.xpath('//li[1]/ancestor::*') # 获取所有标签为div的祖先节点 (获取第一个
  • 标签的所有标签为div的祖先节点) result = html.xpath('//li[1]/ancestor::div') # attribute: 获取所有属性值 (获取第一个
  • 标签的所有属性) result = html.xpath('//li[1]/attribute::*') # child: 获取所有直接子节点 (获取第一个
  • 标签的所有直接子节点,条件是a标签且属性href="link.html") result = html.xpath('//li[1]/child::a[@href="link.html"]') # descendant: 获取所有子孙节点 (获取第一个
  • 标签的所有子孙节点中标签为的) result = html.xpath('//li[1]/descendant::span') # following: 获取当前节点之后的所有节点 (获取第一个
  • 标签后的第二个后续节点) result = html.xpath('//li[1]/following::*[2]') # following-sibling: 获取当前节点之后的所有同级节点 (获取第一个
  • 标签之后的所有同级节点) result = html.xpath('//li[1]/following-sibling::*')
  • 你可能感兴趣的:(第三章 网页数据的解析提取之XPath)