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

1、快速开始

  XPath是一种可以快速在HTML文档中选择并抽取元素、属性和文本的方法。

  在Chrome,打开开发者工具,可以使用$x工具函数来使用XPath来选择元素,比如选中所有的超链接。

  

1.1、XPath的基本格式

  XPath通过"路径表达式"(Path Expression)来选择节点。

  在形式上,"路径表达式"与传统的文件系统非常类似。

  

  比如我们依次获得Html节点(即最根节点)、Html下的Body节点、Html下的Body下的所有Div节点。

单斜杠与双斜杠:  

  在这里我们使用了单斜杠(/)作为最开始的元素,表示从根节点选取。如果我不想每次都从HTML元素出发,想直接取到Body元素,可以使用双斜杠(//),它表示直接命中待选择元素,而不考虑位置,如//body可以直接取到Body元素。

  

  获取到节点的属性,可以使用@符号

  [例1]

    //h1/a/@id :获取所有h1元素直接子元素a的id属性。

  获取节点的文本,使用text()函数

  [例1]

    //h1/a/text():获取所有h1元素直接子元素a的文本内容。

1.2、XPath的基本实例

  我们以一个简易的类HTML文档,来进行实例分析。

<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>

  [例1]

    bookstore :选取 bookstore 元素的所有子节点。

  [例2]

    /bookstore :选取根节点bookstore,这是绝对路径写法。

  [例3]

    bookstore/book :选取所有属于 bookstore 的子元素的 book元素,这是相对路径写法。

  [例4]

    //book :选择所有 book 子元素,而不管它们在文档中的位置。

  [例5]

    bookstore//book :选择所有属于 bookstore 元素的后代的 book 元素,而不管它们位于 bookstore 之下的什么位置。

  [例6]

    //@lang :选取所有名为 lang 的属性。

2、XPath的谓语条件

  谓语用来在查询的时候设置条件,来达到筛选的效果。

2.1、设置返回的节点数量

  

2.2、根据节点的属性或属性值来返回节点

  [例1]

    //div[@class] :选择文档中的所有拥有class属性的div节点。

  [例2]

    //div[@class='postTitle']:选择文档中的所有拥有class属性且值为postTitle的div节点。

2.3、根据节点是否有特点子元素来返回节点

  [例1]

    //div[a] :选择文档中的所有拥有a子元素的div节点。

3、XPath的通配符

  "*"表示匹配任何元素节点。"@*"表示匹配任何属性值。node()表示匹配任何类型的节点。

  [例1]

    //* :选择文档中的所有元素节点。

  [例2]

    /*/* :表示选择所有第二层的元素节点。

  [例3]

    /HTML/* :表示选择HTML的所有元素子节点。

  [例4]

    //title[@*] :表示选择所有带有属性的title元素。

  [例5]

    //book/title | //book/price :表示同时选择book元素的title子元素和price子元素。

Scrapy:学习笔记(1)——XPath的更多相关文章

  1. Scrapy:学习笔记(2)——Scrapy项目

    Scrapy:学习笔记(2)——Scrapy项目 1.创建项目 创建一个Scrapy项目,并将其命名为“demo” scrapy startproject demo cd demo 稍等片刻后,Scr ...

  2. scrapy 学习笔记1

    最近一段时间开始研究爬虫,后续陆续更新学习笔记 爬虫,说白了就是获取一个网页的html页面,然后从里面获取你想要的东西,复杂一点的还有: 反爬技术(人家网页不让你爬,爬虫对服务器负载很大) 爬虫框架( ...

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

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

  4. scrapy学习笔记(1)

    初探scrapy,发现很多入门教程对应的网址都失效或者改变布局了,走了很多弯路.于是自己摸索做一个笔记. 环境是win10 python3.6(anaconda). 安装 pip install sc ...

  5. Scrapy学习笔记(5)-CrawlSpider+sqlalchemy实战

    基础知识 class scrapy.spiders.CrawlSpider 这是抓取一般网页最常用的类,除了从Spider继承过来的属性外,其提供了一个新的属性rules,它提供了一种简单的机制,能够 ...

  6. scrapy 学习笔记2

    本章学习爬虫的 回调和跟踪链接 使用参数 回调和跟踪链接 上一篇的另一个爬虫,这次是为了抓取作者信息 # -*- coding: utf-8 -*- import scrapy class Myspi ...

  7. scrapy学习笔记一

    以前写爬虫都是直接手写获取response然后用正则匹配,被大佬鄙视之后现在决定开始学习scrapy 一.安装 pip install scrapy 二.创建项目 scrapy startprojec ...

  8. Scrapy 学习笔记(一)数据提取

    Scrapy 中常用的数据提取方式有三种:Css 选择器.XPath.正则表达式. Css 选择器 Web 中的 Css 选择器,本来是用于实现在特定 DOM 元素上应用花括号内的样式这样一个功能的. ...

  9. scrapy 学习笔记

    1.scrapy 配合 selenium.phantomJS 抓取动态页面, 单纯的selemium 加 Firefox浏览器就可以抓取动态页面了, 但开启窗口太耗资源,而且一般服务器的linux 没 ...

随机推荐

  1. mybatis由浅入深day01_4.9删除用户_4.10更新用户

    4.9 删除用户 4.9.1 映射文件 4.9.2 代码: 控制台: 4.10 更新用户 4.10.1 映射文件 4.10.2 代码 控制台:

  2. UITextField 全属性

    //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...

  3. Python IDLE背景设置与使用

    相信刚进入python学习之路的朋友们,都还是挺喜欢python自带的IDLE,但是白的代码背景色以及其它的代码色确实让人看着有点不舒服,所以当时也琢磨着能不能自己给它换换颜色,这个当然可以,废话不多 ...

  4. 关于直播学习笔记-004-nginx-rtmp、srs、vlc、obs

    1.采集端:OBS RTMP推流地址:rtmp://192.168.198.21:1935/live 流密钥:livestream(任意-但播放地址与此一致) 2.播放端:nginx-rtmp-win ...

  5. PHP-006

    Q:应用程序执行时的路径 "D:\*******\protected\runtime" 是无效的. 请确定它是一个可被 Web server process 写入资料的目录. A: ...

  6. Hash表(hash table ,又名散列表)

    直接进去主题好了. 什么是哈希表? 哈希表(Hash table,也叫散列表),是根据key而直接进行访问的数据结构.也就是说,它通过把key映射到表中一个位置来访问记录,以加快查找的速度.这个映射函 ...

  7. php学习二:表达式

    1.  可变变量$$ 在php中,可变变量可以用$$来表示, 代码如下: $name = "zhangSan"; $$name = "liSi"; //相当于$ ...

  8. Linux性能监控——CPU,Memory,IO,Network

    版权声明:本文由刘爽原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/107 来源:腾云阁 https://www.qclou ...

  9. 真机远程页面调试工具spy-debugger 3.x:集成weinre+AnyProxy,页面调试+抓包。调试生产HTTPS页面。

    .页面调试+抓包 2.操作简单 3.支持HTTPS. 4.spy-debugger内部集成了weinre.node-mitmproxy.AnyProxy. 5.自动忽略原生App发起的https请求, ...

  10. Unity3D 笔记二 3D模型基础

    一.3D模型基础 1.Hierarchy 显示的是界面上的游戏对象(GameObject),每个游戏对象都有.至少要有一个Camera,点击Camera就可以在Preview中看到摄像机的视角画面.每 ...