• python应用:爬虫框架Scrapy系统学习第一篇——xpath详解


    HTML的三大概念:标签、元素以及属性

    标签:尖括号中的文本       例:<head>……</head> 标签通常成对出现

    元素:标签中的所有内容        元素中可包含元素

    属性:标签的特殊标注等     例:<a href="http:\www.baidu.com">……</a>  其中,href部分称为属性

    使用XPath选择HTML元素

    使用‘/’+标签名定位

    例: /html/body        将定位到body部分

    当某便签下出现多个同标签元素时,使用类似数组的方式定位到最准确的位置

    切记:此处下标从1开始,而不是编程中常见的从0开始

    例:/html/body/div/p[1]         返回相应位置的第一个p元素

           /html/body/div/p             返回相应位置的所有p元素

    对于大型文档,精确定位往往需要一个非常大的XPath表达式,为避免这种问题,我们可以使用‘//’语法

    例://p         将会选择HTML中所有的p元素

      //a         将会选择HTML中所有的链接

    同时,//语法可用于层次结构

    例://div//a       得到div元素下所有链接

      //div/a        得到div元素直接下级的所有链接

    注意:元素下与元素直接下级的区别

    此外,可通过符号@来直接定位标签属性

    例://a/@href          得到所有链接中的href属性

    使用text()函数,只选取文本

    例://a/text()           得到所有链接中的文本信息

    使用符号*选择指定层级的所有元素

    //*[@itemprop="name"]           得到包含itemprop="name"的所有元素

    选择包含某个特定属性或特定属性值的标签时使用如下结构

    例://a[@href]      得到包含href属性的所有链接

      //a[@href="http://www.baidu.com"]      得到href值为“http://www.baidu.com”的所有链接

    此外,还可以使用以特定子字符起始或包含的能力

    例://a[starts-with(@href, "http://")]           得到href属性以http://为起始的所有链接

      //a[contains(@href, "baidu")]              得到href属性包含baidu的所有链接

      //a[not (contains(@href, "baidu"))]     得到所有href属性不包含baidu的链接

    更多类似函数,参照http://www.w3schools.com/xsl/xsl_functions.asp

    在使用XPath时,应尽量

      避免使用数组索引;

      避免使用与数据关系不密切的类名;

      使用面向数据的类名;

      ID通常都比较可靠(例外情况:以编程方式生成的包含唯一标记的ID     如“order-F5568”;此外,还需注意部分HTML中ID不唯一的情况)

  • 相关阅读:
    leetcode(85)最大矩形
    红黑树
    查询学生成绩表中大于60分的每一个成绩的人数
    聚合函数以及SQL中的一些小知识
    Oracle的JDBC
    StringBuffer的reverse方法
    查询时报第一页没有数据,第二页有数据的异常
    普通人如何从平庸到优秀,在到卓越
    HDMI、DVI、VGA等这些接口
    显卡上的VGA接口和高清接口有什么区别?
  • 原文地址:https://www.cnblogs.com/jpapplication/p/10290704.html
Copyright © 2020-2023  润新知