Python爬虫:数据解析和提取——XPath(简洁少字版)

一.安装

pip3 install lxml

二.导入与实例化

  导入

from lxml import etree

  实例化

  • 本地对象
html=etree.parse(fliepath)
  • 网页对象(page_text为requests请求获得)
html=etree.HTML(page_text)

三.XPath规则

代码实例

page_text='''

'''

1.所有节点

result=html.xpath('//*')
#运行结果
[, , , , , , , , , , , , , ]

2.子节点

  2.1 子孙节点

result=html.xapth('//li')
#运行结果
[, , , , ]

  2.2 直接子节点

result=html.xapth('//li/a')
#运行结果
[, , , , ]

3.父节点

result=html.xpath('//li[@class="item-0"]/..')
result=html.xpath('//div[@class="mb-nav"]/parent::*')
#运行结果
[]

 4.文本获取

result=html.xpath('//li[@class="item-0"]/text()')
#运行结果
['\n     ']
result=html.xpath('//li[@class="item-0"]//text()')
#运行结果
['first item', 'fifth item', '\n     ']
result=html.xpath('//li[@class="item-0"]//text()')[0]
#运行结果
first item
result=html.xpath('//a[@href="link1.html"]/text()')
#运行结果
['first item']
result=html.xpath('//a[@href="link1.html"]/text()')[0]
#运行结果
first item

5.属性匹配

result=html.xpath('//li[@class="item-0"]')
#运行结果
[, ]

6.属性多值匹配

  • 1个属性多个值时使用contais
  • contais(@属性名称href,"属性值link1.html或link11.html")
#实例
  • first item
  • result=html.xpath('//a[contains(@href,"link11.html")]/text()') #运行结果 ['first item']

    7.多属性匹配

    • 两个属性之间用and连接并置于中括号内
    #实例
    
  • first item
  • result=html.xpath('//a[contains(@href,"link11.html") and @name="href"]/text()') #运行结果 ['first item']

    8.属性获取

    • 注意与属性匹配的区别:属性匹配 a[@href="link1.html"] —— 获取属性 a/@href
    result=html.xpath('//li/a/@href')
    #运行结果
    ['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']

    9.按序选择

    result=html.xpath('//li[1]//text()')
    #运行结果
    ['first item']
    result=html.xpath('//li[last()]//text()')
    #运行结果
    ['fifth item', '\n     ']
    result=html.xpath('//li[position()<3]//text()')
    #运行结果
    ['first item', 'second item']
    result=html.xpath('//li[last()-2]//text()')
    #运行结果
    ['third item']

    10.节点轴选择

      10.1 获取所有祖先节点

    result=html.xpath('//li[1]/ancestor::*')
    #运行结果
    [, , , ]

      10.2 获取特定祖先节点 

    result=html.xpath('//li/ancestor::ul')
    #运行结果
    []

      10.3 获取所有属性值

    result=html.xpath('//li/attribute::*')
    #运行结果
    ['item-0', 'item-1', 'item-inactive', 'item-1', 'item-0']

      10.4 获取所有子节点

    result=html.xpath('//li/child::*')
    #运行结果
    [, , , , ]

      10.5 获取特定子节点

    result=html.xpath('//li/child::a[@href="link2.html"]')
    #运行结果
    []

      10.6 获取所有子孙节点

    result=html.xpath('//ul/descendant::*')
    #运行结果
    [, , , , , , , , , , ]

      10.7 获取特定子孙节点

    result=html.xpath('//ul/descendant::li')
    #运行结果
    [, , , , ]

      10.8 获取当前节点之后的节点

    result=html.xpath('//li[1]/following::*[2]')
    #运行结果
    []

      10.9 获取当前节点之后的所有同级节点

    • li[1]即第一个li标签
    result=html.xpath('//li[1]/following-sibling::*')
    #运行结果
    [, , , ]

    你可能感兴趣的:(python爬虫,python,爬虫)