爬虫学习之第七天—数据提取-lxml模块和Xpath使用
知识点:了解 lxml模块和xpath语法的关系了解 lxml模块的使用场景了解 lxml模块的安装了解 谷歌浏览器xpath helper插件的安装和使用掌握 xpath语法-基础节点选择语法掌握 xpath语法-节点修饰语法掌握 xpath语法-其他常用语法掌握 lxml模块中使用xpath语法定位元素提取属性值或文本内容掌握 lxml模块中etree.tostring函数的使用
一、 了解 lxml模块和xpath语法
lxml模块可以利用XPath规则语法,来快速的定位HTML\XML 文档中特定元素以及获取节点信息(文本内容、属性值)XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言,可用来在 HTML\XML 文档中对元素和属性进行遍历。W3School官方文档:/xpath/index.asp提取xml、html中的数据需要lxml模块和xpath语法配合使用
二、 谷歌浏览器xpath helper插件的安装和使用
要想利用lxml模块提取数据,需要我们掌握xpath语法规则。接下来我们就来了解一下xpath helper插件,它可以帮助我们练习xpath语法。
1、xpath helper插件的安装
1.1、下载Chrome插件 XPath Helper
可以在chrome应用商城进行下载,如果无法下载,也可以从下面的链接进行下载下载地址:链接:/s/10Nb2pqfgkhTuHJ4FnQ3Hrg 提取码:44ew
1.2、将下载好的xpath文件(请选着好mac或win版本的.crx文件)拖入谷歌浏览器。
点击插件后即可显示上面的界面。
1.3、如果是linux或macOS操作系统,直接将crx文件拖入已经开启开发者模式的chrome浏览器扩展程序界面
三、Xpath使用
1、XPath简介
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。什么是XPath:XPath 使用路径表达式在 XML 文档中进行导航XPath 包含一个标准函数库XPath 是 XSLT 中的主要元素XPath 是一个 W3C 标准
2、XPath节点
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。
节点(Node)
在 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></year><price>29.99</price></book></bookstore>
上面的XML文档中的节点例子:<bookstore> (文档节点)<author>J K. Rowling</author> (元素节点)lang="en" (属性节点) J K. Rowling (基本值(或称原子值,Atomic value),基本值是无父或无子的节点。)"en" (基本值(或称原子值,Atomic value),基本值是无父或无子的节点。)
节点关系
author是title的第一个兄弟节点
3、XPath语法
XPath语法基本分为四类:层级、属性、函数、运算符以下语法均通过58同城租房网做演示实例
四、Lxml模块
1、安装模块
pip/pip3 install lxml或:python/python3 -m pip/pip3 install lxml
2、lxml使用
导入lxml 的 etree 库from lxml import etree利用etree.HTML,将html字符串(bytes类型或str类型)转化为Element对象,Element对象具有xpath的方法,返回结果的列表html = etree.HTML(text) ret_list = html.xpath("xpath语法规则字符串")xpath方法返回列表的三种情况返回空列表:根据xpath语法规则字符串,没有定位到任何元素返回由字符串构成的列表:xpath字符串规则匹配的一定是文本内容或某属性的值返回由Element对象构成的列表:xpath规则字符串匹配的是标签,列表中的Element对象可以继续进行xpath
3、lxml模块实例
from lxml import etreetext = ''' <div> <ul> <li class="item-1"><a href="link1.html">first item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-inactive"><a href="link3.html">third item</a></li> <li class="item-1"><a href="link4.html">fourth item</a></li> <li class="item-0">a href="link5.html">fifth item</a></ul> </div>'''html = etree.HTML(text)#获取href的列表和title的列表href_list = html.xpath("//li[@class='item-1']/a/@href")title_list = html.xpath("//li[@class='item-1']/a/text()")#组装成字典# for href in href_list: 方法1#item = {}#item["href"] = href#item["title"] = title_list[href_list.index(href)]#print(item)for text,link in zip(title_list,href_list): # 方法2print(text,link)
如果觉得《Python爬虫学习之第七天---数据提取-lxml模块和Xpath使用》对你有帮助,请点赞、收藏,并留下你的观点哦!