zoukankan      html  css  js  c++  java
  • python爬虫笔记(2-1)Xpath解析

    Xpath是在XML文档中搜索内容的一门语言,可以通过属性或节点路径来查找内容
    Xpath选择器教程及参考手册:https://www.w3school.com.cn/xpath/index.asp
     
    1、安装:
    pip install lxml
     
    2、导入:
    etree中包含了xpath功能,要导入etree
    from lxml import etree
     
    3、语法:
    /:  表示层级关系,第一个/表示根节点
    ./:  表示相对路径
    //:  搜索后代,如"/div/content/name//nick/text()" # 取name中所有nick中的文本
    *:  通配符:如"/div/content/*/nick/text()" # 取content中所有nick中的文本(nick的父节点可以是name也可以是其它的)
    text():提取文本
     
    4、例子:
    from lxml import etree
    tree = etree.HTML("a.html")
     
    # 拿到a标签的内容
    result = tree.xpath("/html/body/ul/li/a/text()")
     
    # 拿到第1个li中a标签的内容
    result = tree.xpath("/html/body/ul/li[1]/a/text()")
     
    # 拿到第a标签中属性href的值为dapao的内容,[@xxx='xxx']是属性的筛选
    result = tree.xpath("/html/body/ul/li/a[@href = 'dapao']/text()")
     
    # 拿到第a标签中属性href的值,@属性:拿到属性值
    result = tree.xpath("/html/body/ul/li/a/@href")
     
    # 相对路径查找 ./ (或者说是在某个元素内部使用xpath查找)
    li_list = tree.xpath("/html/body/ul/li")
    for li in li_list:
      result = li.xpath("./a/text()")     # ./表示相对查找,在li中继续查找
     
    # 找到网页中所有的div(等于CSS选择器中直接写div)
    //div
     
    # 找到网页中所有div里所有的p标签(等于CSS选择器中的div p)
    //div//p
     
    # 找到网页中所有div里的直接子节点p(等于CSS选择器中的div > p)
    //div/p
     
    # 通配符*的使用   
    :选择属性id为111的元素(不管元素的标签名是什么,只要属性id=111)
    //*[@id='111']
    :选择具有id属性的所有页面元素
    //*[@id]
    :div中任何类型的第2个元素
    //div/*[2]
     
    # 选择属性值包含某个字符串的元素,例:选择href属性值包含baidu
    //*[contains(@href,'baidu')]
     
    # 选择属性值以某个字符串开头的元素,例:href属性以http开头
    //*[starts-with(@href,'http')]
     
    # 选择属性值以某个字符串结尾的元素,例:href属性以cn结尾
    //*[ends-with(@href,'cn')]
     
    # 范围选择:正数用position()函数;倒数时position()和last()配合使用,last()表示最后一个元素
    :选择option类型第1到2个子元素
    //option[position()<3]
    :选择class属性为red的前3个子元素
    //*[@class='red']/*[position()<4]
    :选择class属性为red的后3个子元素
    //*[@class='red']/*[position()>=last()-2]
     
    # 组选择,如,两种条件满足其一即可,两条件之间用 | 关联
    :选择所有id=111或class=t的元素(等于CSS选择器中的 #1,.t)
    //*[@id='111'] | //*[@class='t'] 
     
    # 选择父节点  /..
    :选择id=111的父节点
    //*[@id='111']/..
     
    # 选择兄弟节点  前面的兄弟节点:preceding-sibling::   后续兄弟节点:following-sibling::   
    :选择id=111的元素的所有前面的兄弟节点
    //*[@id='111']/preceding-sibling::*
    :选择id=111的元素的所有后续的兄弟节点(等于CSS选择器中的 ~)
    //*[@id='111']/following-sibling:: *
     
     
     
     
     
     

  • 相关阅读:
    图形化编程娱乐于教,Kittenblock scratch实例,造型制作和属性调整
    图形化编程娱乐于教,Kittenblock scratch实例,最大公约数
    图形化编程娱乐于教,Kittenblock scratch实例,迭代法求数相加之和
    图形化编程娱乐于教,Kittenblock scratch实例,画坐标轴
    图形化编程娱乐于教,Kittenblock scratch实例,变量调整扇形
    Android实战设计模式-----状态模式
    设计模式汇总
    Java设计模式之责任链模式
    Java设计模式之状态模式
    git常用命令
  • 原文地址:https://www.cnblogs.com/testerhappy/p/15117001.html
Copyright © 2011-2022 走看看