1、XPath

XPath 即 XML 路径语言 (XML Path Language),他是一种用来确定 xml 文档中某部分位置的语言。

  xml文档(html 属于 xml)是由一系列节点构成的树,例如:

  

<html>
<body>
<div>
<p>Hello world</p>
<a href = '/home'>Click here</a>
</div>
</body>
</html>

xml 文档的节点有多种类型,其中最常用的有一下几种:

  (1)根节点   整个文档树的根

  (2)元素节点  html、body、div、p、a

  (3)属性节点   href

  (4)文本节点  Hello world、Click here

  节点间的关系有以下几种:

    (1)父子        body 是 html 的子节点,p 和 a 是div的子节点,反过来,div是p和a的父节点

    (2)兄弟  p 和 a 是兄弟节点

    (3)祖先、后裔  body、div、p、a 都是html的后裔节点,反过来 html 是body、div、p、a的祖先节点

2、基础语法

  XPath 常用的基本语法

表达式     描述    
/ 选中文档的根(root)  
. 选中当前节点
.. 选中当前节点的父节点
ELEMENT                     选中子节点中所有 ELEMENT 元素节点       
//ELEMENT 选中父点节点中所有 ELEMENT 元素节点  
* 选中所有元素子节点
text() 选中所有文本子节点
@ATTR 选中所有 ATTR 的属性节点
@* 选中所有属性节点
[谓语] 谓语是用来查找某个特定节点或者包含某个特定值的节点     

接下来,我们通过一些例子展示 XPath 的使用

  

>>> from scrapy.selector import Selector
>>> from scrapy.http import HtmlResponse
>>> body = '''
...<html>
... <head>
... <base href='http://example.com'/>
... <title>Example website</title>
... </head>
... <body>
... <div id = 'images'>
... <a href = 'image1.html'>Name: Image <br/>
... <a href = 'image2.html'>Name: Image <br/>
... <a href = 'image3.html'>Name: Image <br/>
... <a href = 'image4.html'>Name: Image <br/>
... <a href = 'image5.html'>Name: Image <br/>
... </div>
... </body>
... </html>
>>> response = HtmlResponse(url = 'http://www.example.com')

3、常用函数

  XPath 还提供了许多函数,如数字、字符串、时间、日期、统计等。

  下面介绍两种十分常用的字符串函数

  (1)string(arg):返回传参数字符串值

  (2)contains(str1, str2):判断 str1 中是否包含 str2,返回布尔值

4、CSS

  CSS 即层叠样式表,其选择器是一种用来确定 HTML 文档中某部分位置的语言

  CSS 选择器的语法比 XPath 更简单一些,但功能不如 XPath 强大,实际上,当我们电泳 Selector 对象的 CSS 方法时,在其内部会使用 Python库 cssselect 将CSS 选择器表达式翻译成 XPath 表达式,然后电泳 Selector 对象的 XPath 方法。

最新文章

  1. mysq l错误Table ‘./mysql/proc’ is marked as crashed and should be repaired
  2. PowerDesigner最基础的使用方法入门学习
  3. 无法为目标平台“Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider”创建扩展管理器
  4. jquery 多选框的问题
  5. Extjs读取本地下拉选框数据源,分为text和value,显示text,传值value
  6. mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?
  7. centos下如何用SMplayer播放WMV格式文件
  8. logstash 贪婪匹配
  9. Hexo 官方主题 landscape-plus 优化
  10. HDU 1147 Pick-up sticks
  11. Linux gcc/g++下GDB调试及其调试脚本的使用
  12. ZOJ Problem Set - 2563 Long Dominoes 【如压力dp】
  13. Windows下效率必备软件
  14. Python内置函数(52)——getattr
  15. Java之视频读取IO流解帧实施方案
  16. Velocity常用语法详解
  17. Java知多少(101)图像缓冲技术
  18. MySQL 基础 事务
  19. linux ssh的安装与配置以及实现密钥登录
  20. centos上yum安装nodeJS

热门文章

  1. 理解Spring 容器、BeanFactory 以及 ApplicationContext
  2. 【PAT甲级】1075 PAT Judge (25 分)
  3. R语言 plot()函数
  4. 反编译 java
  5. Vue-项目搭建时的常用配置
  6. 22 严格模式&amp;this关键词&amp;let&amp;const
  7. CF10D LCIS 最长公共上升子序列
  8. Visual Studio 2017安装MSDN
  9. mark mark mark
  10. mybatis源码探索笔记-2(构建SqlSession并获取代理mapper)