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不唯一的情况)

python应用:爬虫框架Scrapy系统学习第一篇——xpath详解的更多相关文章

  1. python应用:爬虫框架Scrapy系统学习第二篇——windows下安装scrapy

    windows下安装scrapy 依次执行下列操作: pip install wheel pip install lxml pip install PyOpenssl 安装Microsoft visu ...

  2. python应用:爬虫框架Scrapy系统学习第四篇——scrapy爬取笔趣阁小说

    使用cmd创建一个scrapy项目: scrapy startproject project_name (project_name 必须以字母开头,只能包含字母.数字以及下划线<undersco ...

  3. python应用:爬虫框架Scrapy系统学习第三篇——初识scrapy

    scrapy的最通用的爬虫流程:UR2IM U:URL R2:Request 以及 Response I:Item M:More URL 在scrapy shell中打开服务器一个网页 cmd中执行: ...

  4. 《精通Python爬虫框架Scrapy》学习资料

    <精通Python爬虫框架Scrapy>学习资料 百度网盘:https://pan.baidu.com/s/1ACOYulLLpp9J7Q7src2rVA

  5. python 网络爬虫框架scrapy使用说明

    1 创建项目scrapy startproject tutorial 2 定义Itemimport scrapyclass DmozItem(scrapy.Item):    title = scra ...

  6. python网络爬虫(7)爬取静态数据详解

    目的 爬取http://seputu.com/数据并存储csv文件 导入库 lxml用于解析解析网页HTML等源码,提取数据.一些参考:https://www.cnblogs.com/zhangxin ...

  7. 系统学习前端之FormData详解

    FormData 1. 概述 FormData类型其实是在XMLHttpRequest 2级定义的,它是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利. 2. 构造函数 创建一 ...

  8. Flask第一篇——URL详解

    原创 2018-02-14 孟船长 自动化测试实战 URL是Uniform Resource Locator的缩写,即统一资源定位符. 一个URL通常由一下几个部分组成: scheme://host: ...

  9. DevExpress控件使用方法:第一篇 gridControl详解

    GridControl (1)层次设计器 有五种视图模式,banded gridview多行表头,数据还是一行一组,最靠近数据的表头与数据一一对应:advanced banded gridview多行 ...

随机推荐

  1. vmstat uptime 系统状态脚本

    #!/bin/bash # # Command :vmstat,uptime #Capture_Stats - Gather System Performance Statistics ####### ...

  2. SlidingMenu的使用,结合Fragment(eclipse环境)

    首先下载SlidingMenu,有Library和Sample,然后在自己的项目中引入类库(引入智慧北京工作空间的Library),然后V4包会发生冲突,删掉自己项目Libs目录下的V4包即可 侧滑布 ...

  3. JavaScript设计模式_02_策略模式

    在程序设计中,我们常常遇到这种情况,要实现某一个功能我们有很多种算法可以实现.这些算法灵活多样,而且可以随意互相替换.这种解决方案就是所谓的策略模式. /* * pre:策略模式 * 示例:公司计算奖 ...

  4. vim插件ctags的安装与使用

    LINUX系统下看程序或者编程序时,看到一个函数经常需要知道该函数的定义,这时ctags就派上用场了,其安装和使用方法如下: 安装方法: sudo apt-get install ctags (ubu ...

  5. 在&lt;canvas&gt;上绘制img(drawImage())时需要注意的事

    <canvas>标签相当于是一个画布,css决定画布的样式(这块画布的背景颜色.大小等),脚本(一般使用JavaScript)就是画笔,我们可以在这个画布上绘制线条.形状.文字.图片等. ...

  6. Akka-CQRS(0)- 基于akka-cluster的读写分离框架,构建gRPC移动应用后端架构

    上一篇我们讨论了akka-cluster的分片(sharding)技术.在提供的例子中感觉到akka这样的分布式系统工具特别适合支持大量的带有内置状态的,相对独立完整的程序在集群节点上分布运算.这里重 ...

  7. FreeSWITCH添加中文语音

    1.准备中文语音包 可以到freeswitch官网下载,也可以自己录制 2.中文资源的安装路径:  英文资源的路径为conf/sounds/en/us/callie/...  类似的设置中文资源的路径 ...

  8. 【Java】 剑指offer(32) 从上往下打印二叉树

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 (一)从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺 ...

  9. 通用数据库连接池-C3PO

    C3PO是一个开放源代码的JDBC数据连接池实现项目,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.开源项目在使用:Hibernate,Spring,MYSQL等. 下载: h ...

  10. 电脑PE系统工具

    自己收集的一些PE电脑维护工具 电脑店PE工具 http://u.diannaodian.com/ 通用PE工具箱 http://www.tongyongpe.com/ 大白菜PE工具 http:// ...