Python爬虫——XPath解析本地html文件

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)

执行结果:

['纸质书']
  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万里顾—程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值