- Python:Scrapy分布式爬虫打造搜索引擎集合篇 -(一)
- Scrapy分布式爬虫打造搜索引擎-(五)爬虫与反爬虫的战争
- Scrapy分布式爬虫打造搜索引擎-(七)scrapy-redi
- Scrapy分布式爬虫打造搜索引擎-(六)scrapy进阶开发
- Scrapy分布式爬虫打造搜索引擎-(八)elasticsear
- Scrapy分布式爬虫打造搜索引擎 - (四)通过CrawlSp
- Scrapy分布式爬虫打造搜索引擎 - (一)基础知识
- Scrapy分布式爬虫打造搜索引擎 -(二)伯乐在线爬取所有文章
- Scrapy分布式爬虫打造搜索引擎 - (三)知乎网问题和答案爬
- 37、Python快速开发分布式搜索引擎Scrapy精讲—将bl
XPATH
任意打开伯乐在线的一篇文章如下,我们想要提取标红的部分。
image.png
但是一个页面的源码千千万万,如何只提取一部分呢?就需要用到xpath表达式
。
xPath是什么?它是一种路径表达式,可以选择XML 文档中的节点。
我们首先来看一下xpath语法中存在哪几种节点。
xpath中的角色
在HTML页面中,每个"<>"括起来的东西都叫节点,而且他们是有层次关系的。
下面是一段HTML代码,其中<meta>
就叫节点,而charset
就叫属性,UTF-8
是属性的值。
<!--[if !IE]><!--> <html> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no">
<!-- Start of Baidu Transcode -->
<meta http-equiv="Cache-Control" content="no-siteapp" />
<meta http-equiv="Cache-Control" content="no-transform" />
<meta name="applicable-device" content="pc,mobile">
<meta name="MobileOptimized" content="width"/>
<meta name="HandheldFriendly" content="true"/>
-
父节点:上一层节点
-
子节点:
-
兄弟节点:也叫同胞节点
-
先辈节点:父节点,爷爷节点
-
后代节点:儿子,孙子
基本上与树中的各种角色相契合
然后我们来介绍一下xpath语法
xpath的语法
前面提到了xPath是使用路径表达式在XML文档中选取节点,而节点是沿着路径来选取的。
基本元素
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
下表中article
指的一种元素
表达式 | 选取哪些 |
---|---|
article | 获取 article的所有子节点 |
/article | 选取根元素article |
article/a | 选取article的后代中的所有a元素 |
//div | 获取所有div元素(不管出现在文档里的任何地方) |
article//div | 选取article后代的所有div元素,不管它们位与aritcle下的什么位置 |
//@class | 选取所有名为class的所有属性
|
我们知道在HTML中,class
用得非常多。比如如下这种形式,而//@class
就是要取所有名为class
的属性。
<div class="user">
谓语
我们还可以获得更具体
一点的定位。
要获取article子元素中的div元素。
表达式 | 选取 哪些 |
---|---|
/article/div[1] | 获取article子元素的第一个div元素 |
/article/div[last()] | 获取article子元素的最后一个div元素 |
/article/div[last()-1] | 获取article子元素中倒数第二个div元素 |
要获取拥有某种属性的div元素
表达式 | 选取 |
---|---|
//div[@color] | 获取所有拥有color属性的div元素 |
//div[@color='red'] | 获取所有color属性值为red的div元素 |
选取未知节点
表达式 | 选取 |
---|---|
/div/* | 属于div元素的所有子节点 |
//* | 所有元素 |
//div[@*] | 所有带属性的div 元素 |
选取若干路径
可以在路径表达式里面使用"|"运算符,这样就可以选取若干个路径。
image.png image.png
网友评论