zoukankan      html  css  js  c++  java
  • python3学习-lxml模块

    在爬虫的学习中,我们爬取网页信息之后就是对信息项匹配,这个时候一般是使用正则。但是在使用中发现正则写的不好的时候不能精确匹配(这其实是自己的问题!)所以就找啊找。想到了可以通过标签来进行精确匹配岂不是比正则要快。所以找到了lxml。

    因为lxml是对xml格式的解析,支持html格式,而对于xml格式的解析有一门专用的语言,XPath。XPath用于在xml文档中通过元素和属性进行导航。lxml库也是解析xml文件,所以也应用了XPath语法。我们先学习一下XPath 的标准语法,然后将这些语法知识应用到lxml之中。

    大家应该对xml或者是html都不陌生,默认大家都知道,所以就简单介绍。

    节点关系

    父子节点(Parent children)

    <div class="all">
        <div class="sub"></div>
    </div>
    

    无需解释。

    兄弟节点(sibling)

    <div class="all">
        <div class="sibling"></div>
        <div class="sibling"></div>
    </div>
    

    无需解释。

    先辈(Ancestor)后代(Descendant)

    <div class="grandpa">
        <div class="all">
            <div class="sibling"></div>
            <div class="sibling"></div>
        </div>
    </div>
    

    节点选择

    表达式 描述
    nodename 选取此节点的所有子节点
    / 此路径运算符出现在模式开头时,表示应从根节点选择
    // 从当前节点开始递归下降,此路径运算符出现在模式开头时,表示应从根节点递归下降。
    . 选取当前节点
    .. 选取当前节点的父节点
    @ 选取属性
    * 通配符.选择所有元素节点与元素名无关
    @ 选取属性
    @* 选取所有属性
    : 命名空间分隔符;将命名空间前缀与元素名或属性名分隔
    () 括号运算符(优先级最高),强制运算优先级
    [] 应用筛选模式(即谓词,包括”过滤表达式”和”轴(向前/向后)”)
    | 两个节点集合的联合,eg:/div/a | //div/span
    @ 选取属性

    匹配未知节点

    通配符 描述
    * 匹配任何节点
    @* 匹配任何属性节点
    node() 匹配任何类型的节点

    实例

    下面我们通过一些例子看一下谓词+表达式的综合:

    路径表达式 结果
    /node() 根元素下所有的节点(包括文本节点,注释节点等)
    /text() 查找文档根节点下的所有文本节点
    /div/a[1] 选取属于div的第一个a元素
    /div/a[1] 选取属于div的第一个a元素
    /div/a[last()] 选取属于div的子元素中倒数第一个a元素
    /div/a[last()-1] 选取属于div的子元素中倒数第二个a元素
    /div/a[position()
  • 相关阅读:
    linux离线安装nodejs ,配置环境,离线配置全局包
    前端项目路由使用browserHistory不能刷新,页面刷新错误,
    手机uc浏览器打不开本地网页,网页一片空白
    display:flex兼容性,
    react生产环境样式丢失问题 在浏览器中看到标签有类名,但没有样式
    redux使用redux-thunk中间件处理异步状态管理请求
    配置Redux DevTools
    flex-grow属性在文本过长时会超出父窗体长度
    react配置代理,解决跨域
    react修改状态
  • 原文地址:https://www.cnblogs.com/rickiyang/p/11074215.html
Copyright © 2011-2022 走看看