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