本节讲解网页解析神器----XPath

  1. lxml下载

  2. xpath基本用法

  3. xpath插件

Xpath及XML路径语言,它是一门在XML文档查找信息的语言。

一:lxml下载以及安装

首先需要解决lxml的安装问题,在Windows下我们可以尝试使用pip install lxml 下载,如果没有任何报错的,恭喜安装成功,下面可以进行骚操作了;如果出现报错,出现的提示出现libxml2库等信息,可以采用wheel安装。

wheel的安装方法:推荐去 http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml下载对应的lxml文件,切换到下载文件的目录下,进入cmd,pip install {文件名}.wheel进行安装。

二:xpath的使用方法

介绍一下xpath的常用规则:

表达式 描述 示例 结果
nodename 选取此节点的所有子节点 xbhog 选取xbhog下所有的子节点
/ 如果是在最前面,代表从根节点选取。否则选择某节点下的某个节点 /xbhog 选取根元素下所有的xbhog节点
// 从全局节点中选择节点,随便在哪个位置 //xbhog 从全局节点中找到所有的xbhog节点
@ 选取某个节点的属性 //xbhog[@price] 选择所有拥有price属性的xbhog节点
. 当前节点 ./a 选取当前节点下的a标签
路径表达式 描述
/bookstore/book[1] 选取bookstore下的第一个子元素
/bookstore/book[last()] 选取bookstore下的倒数第二个book元素。
bookstore/book[position()<3] 选取bookstore下前面两个子元素。
//book[@price] 选取拥有price属性的book元素
//book[@price=10] 选取所有属性price等于10的book元素

这些基本规则基本上满足日常需求了,如果还有其他问题,百度是个好东西你值得拥有。

下面举个例子实战一下:

下面是我博客的内容,我们需要做的就是爬取这一页的标题内容:[两个数组的交集.......],想一下!

我们先打开开发者模式,找到标题所在的网页源代码:

我们从最里面一步一步往外推,<a> --> <h4> --> <div class="article-item-box csdn-tracking-statistics"> --><div class="article-list">

<div class="article-list"> 是  <h4> 标签的父节点

<div class="article-list"> 是  <a> 标签的孙节点

<h4> 是 <a> 标签的父节点

所以我们可以参照上面的常用规则写出://div[@class='article-list']//h4表达式,我们看到下图中的标题都已经选中了,这就证明我们写的表达式正确。

三:插件介绍

有人会发现我图片中出现黑色的框,这是谷歌的一个插件(xpath helper), 在chrome浏览器安装好xpath helper插件后(科学访问,人人有责), 点击 Ctrl + Shift + X 激活 XPath Helper 的控制台,然后您可以在 Query 文本框中输入相应 XPath 进行调试了,提取的结果将被显示在旁边的 Result 文本框中,可以实时检测自己的表达式是否正确。

最后有个小补充,如果你不想写xpath语法,你还可以F12,选中你想要的信息右击,copy--copy xpath,缺点是没有手写的简洁,copy的比较繁琐,不利于阅读。

爬虫系列----未完待续.......

分享及成功,你的报应就是我,记得关注!

xpath相关用法及技巧的更多相关文章

  1. MFC总结之CListCtrl用法及技巧(一)

    本文根据本人在项目中的应用,来谈谈CListCtrl的部分用法及技巧.当初学习时,查了很多资料,零零碎碎的作了些记录,现在主要是来做个总结,方便以后查阅.主要包括以下十三点内容:基本操作.获取选中行的 ...

  2. slf4j log4j logback关系详解和相关用法

    slf4j log4j logback关系详解和相关用法 写java也有一段时间了,一直都有用slf4j log4j输出日志的习惯.但是始终都是抱着"拿来主义"的态度,复制粘贴下配 ...

  3. $.ajax等相关用法

    下面是jquery一些方法的相关用法: $.ajax: $.ajax({ type: "GET", url: "url", data: {username:$( ...

  4. oradmin相关用法

    [转]oradmin相关用法 创建例程: -NEW -SID sid | -SRVC 服务 [-INTPWD 口令] [-MAXUSERS 数量] [-STARTMODE a|m] [-PFILE 文 ...

  5. #ifdef预编译相关用法

    #ifdef预编译相关用法主要有:(1)#ifdef XXX executing the corresponding xxx code #endif(2)#ifdef XXX executing th ...

  6. Java中Date各种相关用法

    Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=Calendar.getInstance(); time.clear(); time.set ...

  7. Js相关用法个人总结

    Js相关用法个人总结  js中将数组元素添加到对象中var obj = {}; var pushArr = [11,22,33,44,55,66]; for(var i=0;i<pushArr. ...

  8. Css相关用法个人总结

    Css相关用法个人总结

  9. 关于Unity中的刚体和碰撞器的相关用法(二)

    在关于Unity中的刚体和碰撞器的相关用法(一)的基础上 有一个plane平面,一个ball球体,都挂了碰撞器,ball挂了刚体Rigidbody,写了一个脚本ball挂载在球体上,球体从空中落下装机 ...

随机推荐

  1. go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包

    本篇文章是 Go 语言学习笔记之函数式编程系列文章的第二篇,上一篇介绍了函数基础,这一篇文章重点介绍函数的重要应用之一: 闭包 空谈误国,实干兴邦,以具体代码示例为基础讲解什么是闭包以及为什么需要闭包 ...

  2. [VB.NET Tips]字符串连接

    在很多应用场景下我们都需要对字符串进行拼接操作. 在每一次连接字符串时,都要在堆上分配新的内存空间,每一个分配都有一定的消耗. 较长的字符串在堆中分配,对其进行连接操作需要花费很长的时间,先连接小的字 ...

  3. [LeetCode]sum合集

    LeetCode很喜欢sum,里面sum题一堆. 1.Two Sum Given an array of integers, return indices of the two numbers suc ...

  4. 【linux】【redis】redis安装及开启远程访问

    系统环境:Centos7 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 1.yum安装过程参考:https ...

  5. 从零开始使用 Webpack 搭建 Vue 开发环境

    创建项目 先创建一个空目录,在该目录打开命令行,执行 npm init 命令创建一个项目(无法执行 npm 命令?需要先安装 Node),这个过程会提示输入一些内容,随意输入就行,完成后会自动生成一个 ...

  6. angularjs1学习笔记--持续更新

    angularJS使用的MVC为何不属于二十三种设计模式之一? MVC被GoF (Gang of Four,四人组, <Design Patterns: Elements of Reusable ...

  7. 项目管理知识点-结合Enovia项目管理模块

    核心知识域:整体管理.范围管理.进度管理.成本管理.质量管理.信息安全管理 保障域:人力资源管理.合同管理.采购管理.风险管理.信息(文档)管理.配置管理.知识产权管理.法律法规标准规范管理.职业道德 ...

  8. 生产环境项目问题记录系列(二):Docker打包镜像Nuget包因权限问题还原失败

    docker打包镜像遇到一个因为nuget权限验证问题导致镜像打包失败的问题,公司Nuget包用的是tfs管理的,tfs有权限验证,结果导致nuget还原失败,原有的NuGet.config文件如下: ...

  9. Java 上传解压zip文件,并且解析文件里面的excel和图片

    需求:上传一个zip文件,zip文件里面包含一个excel和很多图片,需要把excel里面的信息解析出来保存到表中,同时图片也转化成base64保存到数据库表中. PS:为了方便不同水平的开发人员阅读 ...

  10. ServiceStack.Redis高效封装和简易破解

    1.ServiceStack.Redis封装 封装的Redis操作类名为RedisHandle,如下代码块(只展示部分代码),它的特点: 1)使用连接池管理连接,见代码中的PooledClientMa ...