Python爬虫——XPath解析本地html文件
XPathXML路径语言(XMLPathLanguage),XPath作用是确定XML文档中某部分的位置,同时它也可以用于检索HTML文件。在使用爬虫过程中可以用XPath来爬取网页中想要的数据。Xpath使用简洁的路径表达式来匹配XML/HTML文档中的节点或者节点集,通过定位网页中的节点,从而找到我们需要的数据。Xpath提供了100多个内建函数,包括了处理字符串、数值、日期以及时间的函数。因
Python爬虫——XPath解析本地html文件
1、XPath 简介
XPath:XML路径语言(XML Path Language),XPath作用是确定XML文档中某部分的位置,同时它也可以用于检索 HTML 文件。在使用爬虫过程中可以用 XPath 来爬取网页中想要的数据。
Xpath 可以理解为在 XML/HTML 文档中对元素和属性进行遍历的工具。
Xpath 使用简洁的路径表达式来匹配 XML/HTML 文档中的节点或者节点集,通过定位网页中的节点,从而找到我们需要的数据。
Xpath 提供了100 多个内建函数,包括了处理字符串、数值、日期以及时间的函数。因此 Xpath 路径表达式几乎可以匹配所有的元素节点。
Xpath 路径表达式跟电脑文件夹目录、网址的url相似,用 / 来表示路径的深度。
XPath插件的下载安装
chrome插件XPATH HelPer 下载地址:
链接:https://pan.baidu.com/s/1cx5Q42aJs1mky1qSZQYObA?pwd=sesp
提取码:sesp
下载XPATH HelPer插件,把下载文件的后缀名改为.zip;
打开谷歌浏览器,进入扩展程序,打开开发者模式,把XPATH HelPer插件拉进扩展程序界面,自动进行安装:
打开XPATH HelPer插件快捷键:CTRL+SHIFT+X,
打开后浏览器上方会出现使用 XPATH 插件的窗口:
2、下载 lxml
第三方解析库 lxml是一款高性能的 Python HTML/XML 解析器, 对 Xpath 路径表达式提供了良好的支持,主要的功能是利用XPath语法解析和提取 HTML/XML 数据。
1、lxml安装位置:Python安装目录的Scripts文件夹下
2、安装命令:pip install lxml -i https://pypi.douban.com/simple,如下图则安装成功:
3、XPath解析本地 html 文件
XPath路径表达式:
表达式 | 描述 |
---|---|
node_name(节点名) | 选取此节点的所有子节点 |
/ | 查找当前节点的子节点 |
// | 查找当前节点的所有子孙节点,不考虑层级关系 |
. | 选取当前节点 |
… | 选取当前节点的父节点 |
@ | 选取属性值,通过属性值选取数据。常用元素属性有 @id 、@name、@value、@type、@class、@tittle、@href |
编写本地html文件:xpath_local.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<ul>
<li id="name" class="bookName">法治的细节</li>
<li id="model">纸质书</li>
<li class="price">30元</li>
<li class="author">罗翔</li>
</ul>
</body>
</html>
路径查询:
解析实例:查找 ul 标签下的 li 标签
from lxml import etree
#解析本地文件使用 etree.parse
tree = etree.parse('xpath_local.html')
list1 = tree.xpath('//body/ul/li')
#返回标签内容 text()
list2 = tree.xpath('//body/ul/li/text()')
list3 = tree.xpath('//body//li/text()')
print(list1)
print(list2)
print(list3)
执行结果:
[<Element li at 0x22908641e88>, <Element li at 0x22908641f88>, <Element li at 0x22908641fc8>, <Element li at 0x22908655048>]
['法治的细节', '纸质书', '30元', '罗翔']
['法治的细节', '纸质书', '30元', '罗翔']
谓词查询:
解析实例:查找有id属性的li标签
from lxml import etree
tree = etree.parse('xpath_local.html')
list1 = tree.xpath('//body/ul/li[@id]/text()')
print(list1)
执行结果:
['法治的细节', '纸质书']
属性查询:
解析实例:查找id属性为"name"的li标签
from lxml import etree
tree = etree.parse('xpath_local.html')
list1 = tree.xpath('//body/ul/li[@id="name"]/text()')
print(list1)
执行结果:
['法治的细节']
解析实例:查找id为"name"的 li 标签的class属性的数据
from lxml import etree
tree = etree.parse('xpath_local.html')
list1 = tree.xpath('//body/ul/li[@id="name"]/@class')
print(list1)
执行结果:
['bookName']
模糊查询:
解析实例:查找id属性值包含"a"的 li 标签
from lxml import etree
tree = etree.parse('xpath_local.html')
list1 = tree.xpath('//ul/li[contains(@id,"a")]/text()')
print(list1)
执行结果:
['法治的细节']
解析实例:查找id属性值以"m"为开头的 li 标签
from lxml import etree
tree = etree.parse('xpath_local.html')
list1 = tree.xpath('//ul/li[starts-with(@id,"m")]/text()')
print(list1)
执行结果:
['纸质书']
更多推荐
所有评论(0)