笔记-爬虫-XPATH

1.      xpath

XPath是W3C的一个标准。它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计。目前有XPath1.0和XPath2.0两个版本。其中Xpath1.0是1999年成为W3C标准,而XPath2.0标准的确立是在2007年

XPath 是一门在 XML 文档中查找信息的语言

全称为XML Path Language 一种小型的查询语言

XPath 是一门在 XML 文档中查找信息的语言。

XPath 是 XSLT 中的主要元素。

XQuery 和 XPointer 均构建于 XPath 表达式之上

XPath属于lxml库模块,所以首先要安装库lxml

2.      节点

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

请看下面这个 XML 文档:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>

<title lang="en">Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

</bookstore>

上面的XML文档中的节点例子:

<bookstore> (文档节点)

<author>J K. Rowling</author> (元素节点)

lang="en" (属性节点)

基本值(或称原子值,Atomic value)

基本值是无父或无子的节点。

项目(Item)

项目是基本值或者节点。

2.1.    节点关系

2.1.1.   父(Parent)

每个元素以及属性都有一个父。

在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

2.1.2.   
子(Children)

元素节点可有零个、一个或多个子。

在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

2.1.3.   
同胞(Sibling)

拥有相同的父的节点

在下面的例子中,title、author、year 以及 price 元素都是同胞:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

2.1.4.   
先辈(Ancestor)

某节点的父、父的父,等等。

在下面的例子中,title 元素的先辈是 book 元素和 bookstore 元素:

<bookstore>
<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
</bookstore>

2.1.5.   
后代(Descendant)

某个节点的子,子的子,等等。

某个节点的子,子的子,等等。

在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素:

<bookstore>

<book>

<title>Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

</bookstore>

3.     
XPath 语法

XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。

3.1.1.  
常用的路径表达式:

表达式

描述

实例

nodename

选取nodename节点的所有子节点

xpath(‘//div’)

选取了div节点的所有子节点

/

从根节点选取

xpath(‘/div’)

从根节点上选取div节点

//

选取所有的匹配节点,不考虑他们的位置

xpath(‘//div’)

选取所有的div节点

.

选取当前节点

xpath(‘./div’)

选取当前节点下的div节点

..

选取当前节点的父节点

xpath(‘..’)

回到上一个节点

@

选取属性

xpath(’//@calss’)

选取所有的class属性

                 

3.1.2.  
谓语

谓语被嵌在方括号内,用来查找某个特定的节点或包含某个制定的值的节点

表达式

结果

xpath(‘/body/div[1]’)

选取body下的第一个div节点

xpath(‘/body/div[last()]’)

选取body下最后一个div节点

xpath(‘/body/div[last()-1]’)

选取body下倒数第二个div节点

xpath(‘/body/div[positon()<3]’)

选取body下前两个div节点

xpath(‘/body/div[@class]’)

选取body下带有class属性的div节点

xpath(‘/body/div[@class=”main”]’)

选取body下class属性为main的div节点

xpath(‘/body/div[price>35.00]’)

选取body下price元素值大于35的div节点

         

3.1.3.  
通配符

Xpath通过通配符来选取未知的XML元素

表达式

结果

xpath(’/div/*’)

选取div下的所有子节点

xpath(‘/div[@*]’)

选取所有带属性的div节点

node()

匹配任何类型的节点

       

3.1.4.  
取多个路径

使用“|”运算符可以选取多个路径

表达式

结果

xpath(‘//div|//table’)

选取所有的div和table节点

         

3.1.5.  
Xpath轴

轴可以定义相对于当前节点的节点集

轴名称

表达式

描述

ancestor

xpath(‘./ancestor::*’)

选取当前节点的所有先辈节点(父、祖父)

ancestor-or-self

xpath(‘./ancestor-or-self::*’)

选取当前节点的所有先辈节点以及节点本身

attribute

xpath(‘./attribute::*’)

选取当前节点的所有属性

child

xpath(‘./child::*’)

返回当前节点的所有子节点

descendant

xpath(‘./descendant::*’)

返回当前节点的所有后代节点(子节点、孙节点)

following

xpath(‘./following::*’)

选取文档中当前节点结束标签后的所有节点

following-sibing

xpath(‘./following-sibing::*’)

选取当前节点之后的兄弟节点

parent

xpath(‘./parent::*’)

选取当前节点的父节点

preceding

xpath(‘./preceding::*’)

选取文档中当前节点开始标签前的所有节点

             

preceding-sibling

xpath(‘./preceding-sibling::*’)

选取当前节点之前的兄弟节点

self

xpath(‘./self::*’)

选取当前节点

             

3.1.6.  
XPATH函数

使用函数能够更好的进行模糊搜索

函数

用法

解释

starts-with

xpath(‘//div[starts-with(@id,”ma”)]‘)

选取id值以ma开头的div节点

contains

xpath(‘//div[contains(@id,”ma”)]‘)

选取id值包含ma的div节点

and

xpath(‘//div[contains(@id,”ma”) and
contains(@id,”in”)]‘)

选取id值包含ma和in的div节点

text()

xpath(‘//div[contains(text(),”ma”)]‘)

选取节点文本包含ma的div节点

             

笔记-爬虫-XPATH的更多相关文章

  1. Scrapy:学习笔记(1)——XPath

    Scrapy:学习笔记(1)——XPath 1.快速开始 XPath是一种可以快速在HTML文档中选择并抽取元素.属性和文本的方法. 在Chrome,打开开发者工具,可以使用$x工具函数来使用XPat ...

  2. 笔记-爬虫-去重/bloomfilter

    笔记-爬虫-去重/bloomfilter 1.      去重 为什么要去重? 页面重复:爬的多了,总会有重复的页面,对已爬过的页面肯定不愿意再爬一次. 页面更新:很多页面是会更新的,爬取这种页面时就 ...

  3. 笔记-爬虫-selenium常用方法

    笔记-爬虫-selenium常用方法 1.      查找元素 常用的查找方法 find_element_by_name find_element_by_xpath find_element_by_l ...

  4. 笔记-爬虫-js代码解析

    笔记-爬虫-js代码解析 1.      js代码解析 1.1.    前言 在爬取网站时经常会有js生成关键信息,而且js代码是混淆过的. 以瓜子二手车为例,直接请求https://www.guaz ...

  5. 笔记-爬虫-scrapy-srcapy-redis组件

    笔记-爬虫-scrapy-srcapy-redis组件 1.      简介 scrapy是一个爬虫框架,但不支持分布式,scrapy-redis是为了更方便的实现scrapy分布式爬虫的组件. 可以 ...

  6. 笔记-爬虫-robots.txt

    笔记-爬虫-robots.txt 1.      robots.txt文件简介 1.1.    是什么 robots.txt是用来告诉搜索引擎网站上哪些内容可以被访问.哪些不能被访问.当搜索引擎访问一 ...

  7. 笔记-爬虫部署及运行工具-scrapydweb

    笔记-爬虫部署及运行工具-scrapydweb 1.      简介 scrapyd是爬虫部署工具,但它的ui比较简单,使用不是很方便. scrapydweb以scrapyd为基础,增加了ui界面和监 ...

  8. XML学习笔记6——XPath语言

    在上一篇笔记的结尾,我们接触到了两个用于选择XML文档中特定范围的元素<selector>和<field>,这两个元素的取值都是XPath表达式,那么,什么是XPath呢?简单 ...

  9. python爬虫xpath

    又是一个大晴天,因为马上要召开十九大,北京地铁就额外的拥挤,人贴人到爆炸,还好我常年挤地铁早已练成了轻功水上漂,挤地铁早已经不在话下. 励志成为一名高级测试工程师的我,目前还只是个菜鸟,难得有机会,公 ...

随机推荐

  1. libmysqlclient.so.16未找到方法

    用mysql命令登录的时候报错: [root@iZ www]# mysql -uroot -p mysql: error while loading shared libraries: libmysq ...

  2. selenium grid 使用方法

    代码和selenium driver相同 只是 启动环境方式不同.至少启动一个hub 一个 node .如需要多个,可以使用端口进行区分. java -jar selenium-server-stan ...

  3. Odoo (OpenERP/TinyERP)-10.0 (Debian 8)

    平台: Ubuntu 类型: 虚拟机镜像 软件包: odoo-10.0 commercial erp odoo open source openerp tinyerp 服务优惠价: 按服务商许可协议 ...

  4. 关于 supersocket 不能通过Bootstrap 启动

    App.config内容   <configSections> <section name="superSocket" type="SuperSocke ...

  5. 第四章 T-SQL编程

    1.前言->此T-SQL编程是基于sql server开发环境->关键字:T-SQL编程:游标:视图和索引 2.T-SQL编程基础->标识符:常规标识符必须以汉字.字母.下划线_.@ ...

  6. 搭建Web开发环境JavaEE_Eclipse

    1. 下载和安装1.1 下载JDK在Java官方网站下载最新版本的 Java SE:  http://www.oracle.com/technetwork/java/javase/downloads/ ...

  7. 如何在SecureCRT中给linux上传和下载文件

    方法/步骤     需要上传或者下载,需要使用rz和sz命令.如果linux上没有这两个命令工具,则需要先安装.可以使用yum安装.运行命令yum install lrzsz.   安装完成后就可以使 ...

  8. oracle11g在CentOS6.9上启动脚本

    #!/bin/bash# chkconfig:2345 99 10# description: Startup Script for oracle Database# /etc/init.d/orac ...

  9. Linux Mint,Ubuntu 18 ,Deepin15.7 安装mysql 没有提示输入密码,修改root用户密码过程

    刚刚装Deepin15.7 和 MySQL5.7 发现没有提示用户输入密码的过程(近日发现Linux Mint 和 Ubuntu18 也适用) 百度了一大堆如何修改root密码 也没什么卵用,终于这篇 ...

  10. android+nutz后台如何上传和下载图片

    android+nutz后台如何上传和下载图片  发布于 588天前  作者 yummy222  428 次浏览  复制  上一个帖子  下一个帖子  标签: 无 最近在做一个基于android的ap ...