资讯专栏INFORMATION COLUMN

Python爬虫笔记3-解析库Xpath的使用

simon_chen / 1057人阅读

摘要:选取名为的所有属性库使用库安装官网安装进入命令行模式,执行安装进入终端模式,执行安装依赖的类库后,执行安装验证安装导入模块,如果没有报错就安装成功。输出结果输出结果多了一个声明,对解析结果没影响。

当爬取到Html数据后,可以用正则对数据进行提取,但有时候正则表达式编写起来不方便,而且万一写错了,可能导致匹配失败。这时候就需要借助其他解析工具了。
XML引入 什么是XML?

XML 指可扩展标记语言(EXtensible Markup Language)

XML 是一种标记语言,很类似 HTML

XML 的设计宗旨是传输数据,而非显示数据

XML 的标签需要我们自行定义。

XML 被设计为具有自我描述性。

XML 是 W3C 的推荐标准

W3School官方文档:http://www.w3school.com.cn/xm...

XML和HTML的区别

语法要求不同

在html中不区分大小写,在xml中严格区分。

在HTML中,有时不严格,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略

或者之类的结束标记。在XML中,是严格的树状结构,绝对不能省略掉结束标记。

在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个/ 字符作为结尾。这样分析器就知道不用查找结束标记了。

在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。

在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。

在XML文档中,空白部分不会被解析器自动删除;但是html是过滤掉空格的。

设计目标不同

XML被设计为传输和存储数据,其焦点是数据的内容。

HTML显示数据以及如何更好显示数据。

XML的节点关系

1、父(parent)
每个元素以及属性都有一个父。
下面是一个简单的XML例子中,book 元素是 title、author、year 以及 price 元素的父:




  Harry Potter
  J K. Rowling
  2005
  29.99

2、 子(Children)
元素节点可有零个、一个或多个子。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:




  Harry Potter
  J K. Rowling
  2005
  29.99

3、 同胞(Sibling)
拥有相同的父的节点
在下面的例子中,title、author、year 以及 price 元素都是同胞:




  Harry Potter
  J K. Rowling
  2005
  29.99

4、 先辈(Ancestor)
某节点的父、父的父,等等。
在下面的例子中,title 元素的先辈是 book 元素和 bookstore 元素:






  Harry Potter
  J K. Rowling
  2005
  29.99



5、 后代(Descendant)
某个节点的子,子的子,等等。
在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素:






  Harry Potter
  J K. Rowling
  2005
  29.99



Xpath 什么是Xpath?

Xpath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。。最初是用来搜寻XML文档的,但是它也适用与HTML文档的搜索。
所以在做爬虫时,可以使用XPath来做相应的信息抽取。

W3School官方文档:http://www.w3school.com.cn/xp...

Xpath开发工具

开源的XPath表达式编辑工具:XMLQuire(XML格式文件可用)

Chrome插件 XPath Helper

Firefox插件 XPath Checker

使用Xpath

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
1、Xpath常用规则

表达式 描述
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

2、Xpath使用示例
以下面xmL文档为例:






  Harry Potter
  J K. Rowling
  2005
  29.99


路径表达式 结果
bookstore 选取bookstore元素的所有子节点
/bookstore 选取根元素bookstore。注:假如路径起始于正斜杠/,则此路径代表某元素的绝对路径
bookstore/book 选取属于bookstore的子元素的所有book元素
//book 选取所有book元素,不管在文档的任何位置
bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang 选取名为lang的所有属性
lxml库使用 lxml库安装

lxml官网

Github

1、window安装
cmd进入命令行模式,执行

pip3 install lxml

2、ubuntu16.04安装
ctrl+alt+t进入终端模式,执行:

sudo apt-get install -y build-essential libssl-devl libffi-dev libxml2-dev libxslt1-dev zlib1g-dev

安装依赖的类库后,执行pip安装:

sudo pip3 install lxml

3、验证安装
导入lxml模块,如果没有报错就安装成功。

$ python3
>>> import lxml
etree模块使用

初步使用
文件名lxml_test.py

# 使用 lxml 的 etree 库
from lxml import etree 

text = """
""" #利用etree.HTML,将字符串解析为HTML文档,etree模块可自动修正HTML文本 html = etree.HTML(text) # 按字符串序列化HTML文档 ret = etree.tostring(html) # torstring()方法返回的结果是bytes类型,这里用decode()方法将其转化为字符串 print(ret.decode("utf-8"))

输出结果:



etree模块可以自动修正 html 代码,例子里不仅补全了 li 标签,还添加了 body,html 标签。

文件读取
除了直接读取字符串,lxml还支持从文件里读取内容。这里我将上面的lxml_test.py文件执行后的内容保存为test.html

python lxml_test.py >> test.html

内容就是上面的输出结果 cat test.html:


使用etree.parse()方法来读取文件。

from lxml import etree

html = etree.parse("./test.html",HTMLParser())

ret = etree.tostring(html)
print(ret.decode("utf-8"))

输出结果




输出结果多了一个DOCTYPE声明,对解析结果没影响。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43239.html

相关文章

  • Python3网络爬虫实战---28、解析使用XPath

    摘要:上一篇文章网络爬虫实战与正则表达式抓取猫眼电影排行下一篇文章网络爬虫实战解析库的使用上一节我们实现了一个最基本的爬虫,但提取页面信息时我们使用的是正则表达式,用过之后我们会发现构造一个正则表达式还是比较的繁琐的,而且万一有一点地 上一篇文章:Python3网络爬虫实战---27、Requests与正则表达式抓取猫眼电影排行下一篇文章:Python3网络爬虫实战---29、解析库的使用:...

    abson 评论0 收藏0
  • scrapy学习笔记

    摘要:是最有名的爬虫框架之一,可以很方便的进行抓取,并且提供了很强的定制型,这里记录简单学习的过程和在实际应用中会遇到的一些常见问题一安装在安装之前有一些依赖需要安装,否则可能会安装失败,的选择器依赖于,还有网络引擎,下面是下安装的过程下安装安装 scrapy是python最有名的爬虫框架之一,可以很方便的进行web抓取,并且提供了很强的定制型,这里记录简单学习的过程和在实际应用中会遇到的一...

    luzhuqun 评论0 收藏0
  • Python爬虫笔记1-爬虫背景了解

    摘要:学习爬虫的背景了解。但是搜索引擎蜘蛛的爬行是被输入了一定的规则的,它需要遵从一些命令或文件的内容,如标注为的链接,或者是协议。不同领域不同背景的用户往往具有不同的检索目的和需求,搜索引擎无法提供针对具体某个用户的搜索结果。 学习python爬虫的背景了解。 大数据时代数据获取方式 如今,人类社会已经进入了大数据时代,数据已经成为必不可少的部分,可见数据的获取非常重要,而数据的获取的方式...

    oujie 评论0 收藏0
  • 关于爬虫解析数据4种方式

    摘要:大奉打更人卖报小郎君这个人仙太过正经言归正传从红月开始黑山老鬼稳住别浪跳舞二解析数据是一个可以从或文件中提取数据的库。 目录 一、XPath解析数据 1、XPath解析数据 2、XML的树形结构 3、使用XPath选取节点 4、课堂案例 - 爬取起点小说网 二、BeautifulSoup解析...

    newtrek 评论0 收藏0
  • 爬虫学习之基于Scrapy网络爬虫

    摘要:不过不用担心,中有很多非常优秀的爬虫框架,比如我们接下来要学习到的。结合以上分析我们基本确定了本次爬虫的各个路线入口,接下来我们就开始通过程序来实现本次的目标。这里我们的目的是建立一种写爬虫的思路,而不在于怎么使用工具来爬数据。 概述 在上一篇文章《爬虫学习之一个简单的网络爬虫》中我们对爬虫的概念有了一个初步的认识,并且通过Python的一些第三方库很方便的提取了我们想要的内容,但是...

    BingqiChen 评论0 收藏0

发表评论

0条评论

simon_chen

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<