zoukankan      html  css  js  c++  java
  • 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不唯一的情况)

  • 相关阅读:
    Oracle创建序列,删除序列
    java base58
    百度地图 显示,定位,轮廓图
    百度地图 圈出省份轮廓图并高亮
    基于双向链表的增删改查和排序(C++实现)
    统计字母出现次数
    线程安全
    C++面试秘笈笔记
    牛客选择题刷题
    new delete 浅析
  • 原文地址:https://www.cnblogs.com/jpapplication/p/10290704.html
Copyright © 2011-2022 走看看