Infi-chu:

http://www.cnblogs.com/Infi-chu/

XPath:

全称是 XML Path Language,XML路径语言,它是一门在XML文档中和HTML文档中查找信息的语言

1.XPath常用规则

表达式    描述

nodename  选取此节点的所有子节点

/        从当前节点选取直接子节点

//       从当前节点选取子孙节点

.        选取当前节点

..       选取当前节点的父节点

@        选取属性

2.准备工作:安装 lxml 库

3.例子:

from lxml import etree
text =
'''
<div>
<ul>
<li class="ex1"><a href="ex1.html">ex1</a></li>
<li class="ex2"><a href="ex2.html">ex2</a>
</ul>
</div>
'''
html = etree.HTML(text) # 调用HTML类进行html初始化工作
r = etree.tostring(html) # 修复HTML代码,补全其他选项
print(r.decode('utf-8')) # 结果返回是bytes,我们将其转化成UTF-8

4.所有节点

选取所有节点:

from lxml import etree
html = etree.parse('./test.html',etree.HTMLParser())
res = html.xpath('//*') # 选取所有
print(res)

5.子节点

选取li节点的所有直接a子节点:

from lxml import etree
html = etree.parse('./test.html',etree.HTMLParser())
res = html.xpath('//li/a')
print(res)

6.父节点

使用.和..

7.属性匹配

from lxml import etree
html = etree.parse('./test.html',etree.HTMLParser())
res = html.xpath('//li[@class='ex1']')
print(res)

8.文本属性

选取li节点的内部文本,两种方法,推荐第二种

a.

from lxml import etree
html = etree.parse('./test.html',etree.HTMLParser())
res = html.xpath('//li[@class='ex1']/a/text()')
print(res)

b.推荐,信息更全

from lxml import etree
html = etree.parse('./test.html',etree.HTMLParser())
res = html.xpath('//li[@class="ex1"]//text()')
print(res)

9.属性获取

获取所有li节点下所有a节点的href属性

from lxml import etree
html = etree.parse('./test.html',etree.HTMLParser())
res = html.xpath('//li/a/@href')
print(res)

10.属性多值匹配

from lxml import etree
text =
'''
<div>
<ul>
<li class="li li-first"><a href="ex1.html">li1</a></li>
</ul>
</div>
'''
html = etree.HTML(text)
res = html.xpath('//li[contains(@class,"li")]/a/text()')
print(res)

【注】

contains()中,

第一个参数传入属性名称,第二个参数传入属性值

11.多属性匹配

根据多个属性确定一个节点

from lxml import etree
text =
'''
<div>
<ul>
<li class="li" name="123"><a href="ex1.html">ex1</a></li>
</ul>
</div>
'''
html = etree.HTML(text)
res = html.xpath('//li[@contains(@class,"li") and @name="123"]/a/text()')
print(res)

12.按序选择(多个节点)

from lxml import etree
text =
'''
<div>
<ul>
<li class="ex1"><a href="ex1.html">ex1</a></li>
<li class="ex2"><a href="ex2.html">ex2</a></li>
<li class="ex3"><a href="ex3.html">ex3</a></li>
</ul>
</div>
'''
html = etree.HTML(text)
res = html.xpath('//li[1]/a/text()') # 第一个li
res = html.xpath('//li[last()]/a/text()') # 最后一个li
res = html.xpath('//li[position()<3]/a/text()') # 前两个li
res = html.xpath('//li[last()-2]/a/text()') # 第一个li

【注】

序号从1开始

13.节点轴选择

from lxml import etree
text =
'''
<div>
<ul>
<li class="ex1"><a href="ex1.html">ex1</a></li>
<li class="ex2"><a href="ex2.html">ex2</a></li>
<li class="ex3"><a href="ex3.html">ex3</a></li>
</ul>
</div>
'''
html = etree.HTML(text)
res = html.xpath('//li[1]/ancestor::*') # 获取祖先节点
res = html.xpath('//li[1]/ancestor::div') # 获取祖先div节点
res = html.xpath('//li[1]/attribute::*') # 所有属性值
res = html.xpath('//li[1]/child::a[href="ex1.html"]') # 所有直接子节点
res = html.xpath('//li[1]/descendant::span') # 所有子孙节点
res = html.xpath('//li[1]/following::*[2]') # 当前节点之后的所有节点
res = html.xpath('//li[1]/following-sibling::*') # 当前节点之后的所有同级节点

 【注】这些都是轴

ancestor、attribute、child、descendant、following、following-sibling

Python3爬虫(五)解析库的使用之XPath的更多相关文章

  1. 【XPath Helper:chrome爬虫网页解析工具 Chrome插件】XPath Helper:chrome爬虫网页解析工具 Chrome插件下载_教程_安装 - 开发者插件 - Chrome插件网

    [XPath Helper:chrome爬虫网页解析工具 Chrome插件]XPath Helper:chrome爬虫网页解析工具 Chrome插件下载_教程_安装 - 开发者插件 - Chrome插 ...

  2. Python爬虫【解析库之beautifulsoup】

    解析库的安装 pip3 install beautifulsoup4 初始化 BeautifulSoup(str,"解析库") from bs4 import BeautifulS ...

  3. Python爬虫【解析库之pyquery】

    该库跟jQuery的使用方法基本一样  http://pyquery.readthedocs.io/ 官方文档 解析库的安装 pip3 install pyquery 初始化 1.字符串初始化 htm ...

  4. python爬虫三大解析库之XPath解析库通俗易懂详讲

    目录 使用XPath解析库 @(这里写自定义目录标题) 使用XPath解析库 1.简介   XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言. ...

  5. 爬虫之解析库-----re、beautifulsoup、pyquery

    一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...

  6. python3爬虫之Urllib库(一)

    上一篇我简单说了说爬虫的原理,这一篇我们来讲讲python自带的请求库:urllib 在python2里边,用urllib库和urllib2库来实现请求的发送,但是在python3种在也不用那么麻烦了 ...

  7. python爬虫之解析库Beautiful Soup

    为何要用Beautiful Soup Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式, 是一个 ...

  8. python3爬虫之Urllib库(二)

    在上一篇文章中,我们大概讲了一下urllib库中最重要的两个请求方法:urlopen()  和  Request() 但是仅仅凭借那两个方法无法执行一些更高级的请求,如Cookies处理,代理设置等等 ...

  9. python爬虫之解析库正则表达式

    上次说到了requests库的获取,然而这只是开始,你获取了网页的源代码,但是这并不是我们的目的,我们的目的是解析链接里面的信息,比如各种属性  @href  @class span  抑或是p节点里 ...

随机推荐

  1. 林锐:5 C++/C程序的基本概念

    5.1.1 main 不能重载 不能内联 不能定义为static 不能取其地址 不能由用户直接调用 5.1.3内部名称 struct Sample_1 { int count; }; struct S ...

  2. 48. Rotate Image (matrix retation, transpose) Amazon problem

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  3. Codeforces Round #432 (Div. 2)

    A. Arpa and a research in Mexican wave Arpa is researching the Mexican wave. There are n spectators ...

  4. 51nod 1442 士兵的旅行

    拆点,因为只能走一步,那么u->v 后就不能到k了,这样,建图就能保证只走一步: #include <bits/stdc++.h> using namespace std; *; c ...

  5. css relative

    一.relative和absolute相煎关系 relative限制absolute 1.限制left/top/right/bottom定位 如果父元素有relative,只能根据父元素进行定位 2. ...

  6. ZOJ 1610 Count the Colors【题意+线段树区间更新&&单点查询】

    任意门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1610 Count the Colors Time Limit: 2 ...

  7. 2018.12.14 Mac的Matlab2018a软件及其安装步骤

    软件百度云链接:https://pan.baidu.com/s/1q3EO5up-1YuAQ4gEi7sTwQ 密码:p6mf MATLAB R2018a for Mac破解说明 1.MATLAB R ...

  8. Very Deep Convolutional Networks for Large-scale Image Recognition(vggnet)

    vggNet是从AlexNet而来,主要探索卷积神经网络的深度与性能之间的关系,通过反复堆叠3x3的卷积核(c中有1x1的卷积核,也只有c中有,c是16层)和2x2的最大池化层,vggNet构筑了16 ...

  9. qbxt Day 5 图论一些基础知识

    就是一些感觉比较容易忘的知识 假设根为第0层, 在二叉树的i层上至多有2i个结点,整颗二叉树(深度为k)最多有\(2^{k+1}-1\)个节点 对于任何一棵非空二叉树,如果叶结点个数为\(n_0\), ...

  10. hive中使用rcfile

    (1)建student & student1 表:(hive 托管)create table student(id INT, age INT, name STRING)partitioned ...