XPath 的基本用法

使用chrome_Xpath_v2.0.2

  • 打开百度首页, Shift + Ctrl +x 激活
  • 当前页进入需要使用chrome_Xpath的页面

XPath 语法

1.路径查询

  • / 表示 当前 文档的 一级 子元素,HTML中从‘< html >开始的
    XPath 的基本用法_第1张图片
  • // 查找 所有的子孙节点,不考虑层级关系
    XPath 的基本用法_第2张图片
  • ./ 当前路径下的a元素的文本内容
    XPath 的基本用法_第3张图片
  • 父级下的span的文本内容
    XPath 的基本用法_第4张图片
  • *通配符
  1. /* 任意一个子节点
    XPath 的基本用法_第5张图片
  2. //* 任意子孙节点(该HTML下有952个子孙节点)
    XPath 的基本用法_第6张图片

2.谓词查询

  • //div[@id] 查询都有带id属性的div标签
  • //div[@id=“maincontent”] 查询id属性为maincontent的div标签

3.属性查询

  • //@class 查询所有标签的class属性
    XPath 的基本用法_第7张图片

4.模糊查询

  • //div[contains(@id, “he”)] 查询所有id属性中包含he的div标签
    XPath 的基本用法_第8张图片

5.内容查询

  • //div/h1/text() 查找所有div标签下的直接子节点h1的内容

6.逻辑运算XPath 的基本用法_第9张图片

XPath 使用

1.安装

pip install lxml

2.code:

con = '''

'''

from lxml import etree

# 通过etree.HTML 方法加载 需要解析的文档 类型:lxml.etree._Element
html = etree.HTML(con)

# html_tree = etree.parse('XX.html') # 解析外部文件

# 所有的非标准文档会被 xpath 加载为一个标准的文档,就是含有 html 和 body 标签
# print(etree.tostring(html))

# 通过返回对象的 xpath 方法 找到需要的数据
# xptah 返回的元素 对象是一个列表
# / 是表示 当前 文档的 一级 子元素
ele = html.xpath('/html')
print(ele) # []

# // 查找 当前文档的 任何子孙 元素
ele = html.xpath('//li')
print(len(ele)) # 6

# 
for e in ele:
    print(etree.tostring(e)) # 举例 b'
  • lllllll
  • \n '
    # print(type(etree.tostring(ele[0]))) # 查看元素对象的内容 # ./ 表示 查找 当前元素 的直接 元素 ele = html.xpath('//ul') li = ele[0].xpath('./li') li2 = ele[0].xpath('../ul') print(len(li),li2) # 5 [] # 找 含有 id属性的 li标签 # ele = html.xpath('//li[@id]') # 找 li 标签 的 class 的值 是 item-inactive # ele = html.xpath('//li[@class="item-inactive"]') # 找 含有 id属性的 li标签的 class 属性的值 ele = html.xpath('//li[@id]/@class') # ['item-1', 'item-1'] # ele = html.xpath('//li[@id]/@style') # ['width:20px;'] # 查找 li 元素 的 class=item-1 并且 id=abc # ele = html.xpath('//li[@class="item-1" and @id="abc"]') # 查找 li 元素 的 class=item-1 或者 id=abc # ele = html.xpath('//li[@class="item-1" or @id="abc"]') # 查找 不含有 id 属性的 li 标签 # ele = html.xpath('//li[not(@id)]') # 同时找到 ul 和 span 标签 # ele = html.xpath('//ul | //span') # for e in ele: # print(etree.tostring(e)) # 查找 li 标签中 class 属性 包含 1 # ele = html.xpath('//li[contains(@class, "1")]') # 查找 li 标签中 id 属性 以 w 开头 # ele = html.xpath('//li[starts-with(@id, "w")]') # for e in ele: # print(etree.tostring(e)) # 查找 li 标签中 id 属性 以 c 结尾 XPath2.0语法 # ele = html.xpath('//li[ends-with(@id, "c")]') # 查找最后一个li标签 ele = html.xpath('//li[last()]') for e in ele: ''' b'
  • fifth item
  • \n ' b'
  • lllllll
  • \n ' '''
    print(etree.tostring(e)) # 查找第一个li标签 # ele = html.xpath('//li[position()=1]') # 中括号中的下标位置 是从 1 开始的 ele = html.xpath('//li[1]') # =》 ele = html.xpath('//li[position()=1]') for e in ele: ''' b'
  • first item
  • \n ' b'
  • lllllll
  • \n ' '''
    print(etree.tostring(e)) # 从第三个li 标签 找 所有的 li 元素 # ele = html.xpath('//li[position()>=3]') # for e in ele: # print(etree.tostring(e)) # 查找 最后一个 a 标签中 的 内容 # ele = html.xpath('//li[last()]/a/text()') # print(ele) # for e in ele: # print(etree.tostring(e))

    你可能感兴趣的:(HTML,spider,其他)