xpath解析: 最常用且最便捷高效的一种解析方式。通用性

- xpath 解析原理:

- 1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中

环境安装:

- cmd 输入 pip install lxml

- 如何实例化一个etree 对象

- 1.将本地的html(fila_name)文档中的源码数据加载到etree对象中:

etree.parse(fila_name)

- 2.可以将互联网上获取的源码数据加载到该对象中

etree.HTML('page_text')

- 本地数据提取:

- parser = etree.HTMLParser(encoding = 'utf-8')

# - pyhton 升级新3.6版本以后,需要添加一个参数 vule (etree.HTMLParser())

lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 4 and head, line 6, column 8

# 如果上一个按照我的方法,还是没有解决问题可以尝试着,在每一个标签末尾加上/

<head>

<meta charset="UTF-8/">

</head>

- tree = etree.parse('test.html',parser = parser)

# tree = etree.parse(''test.html,etree.HTMLParser())

- r = tree.xpath('/html/header/title')

- print(r)

- xpath 表达式:

- / : 表示的是从根节点开始定位。 / 也表示的是一个层级

- // : 表示的是多个层级 // 也可以从任意位置开始定位。

- 属性定位: //div[@class='sons'] : 首先定位到所有的div标签,然后找到属性值为 class = 'sons' 的这一列

-索引定位: //div[@class='sons']/p[3] 首先直接定位到所有div标签,然后找到属性值为 class = 'sons' 这一<div>标签,然后找到本<div>标签下的<p>标签,假如这个div标签下有很多 p 标签,取第几个标签,p[3]表示取第三个p标签

-取文本:

- / text() 获取的是标签中直系的文本内容

<div class = 'sons'> 京东好物 <div>

- //text() 获取标签中非直系的文本内容(所有内容,包括直系内容)

<div class = 'sons'>

<li>京东好物 </li>

<a href="" target="_blank">http://www.jd.com/"> 图片 </a>

</div.

京东好物

- 取属性:

取属性关键在于:@href href 是属性名,你需要那个属性你就把那个属性名写在这里, @href前面的就是标签定位你需要的属性在那个标签里面,

假如我需要属性 a 标签中的属性 href中的地址: "https://chaoshi.jd.com/" href 是属性名,只要我们能定位到<a>标签,在<a>标签中拿到属性名为 href 就会获得其值:"https://chaoshi.jd.com/"

<a class="navitems-lk"

target="_blank"

href="https://chaoshi.jd.com/"

aria-lable="京东超市">京东超市 </a>

学以致用:

测试代码:

from lxml import etree
tree = etree.parse('test.html',etree.HTMLParser())
r = tree.xpath('//li[@class="fore1"]')
#本次自行设计非常成功
# r_two = tree.xpath('/html/body/div/ul/li/a')
r_three = tree.xpath('//li[@class="fore3"]/a/text()')[0]
# 获取 属性为role="navigation"的div标签下的所有文本信息
r_five = tree.xpath('//div[@role="navigation"]//text()')
r_six = tree.xpath('//li[@class="fore1"]/a/')[0]
print(r_three)
print(r_five)
print(r_six)

在京东页面随便找到的数据(自己也可以随便找到一个网站首页页面),尝试获取文本信息,和标签中的属性。

我将此文件命名为:test

有的同学可能会问:在pycharm中如何创建html文件呢。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
 <div id="navitems" role="navigation">
                <div class="spacer"></div>
                                                            <ul id="navitems-group1">
                                        <li clstag="h|keycount|head|navi_01" class="fore1">
                                                    <a class="navitems-lk"
                               target="_blank"
                               href="https://chaoshi.jd.com/"
                               aria-lable="京东超市">京东超市                                                            </a>
                                            </li>
                                                                            <li clstag="h|keycount|head|navi_02" class="fore2">
                                                    <a class="navitems-lk"
                               target="_blank"
                               href="https://a.jd.com/"
                               aria-lable="优惠券">优惠券                                                            </a>
                                            </li>
                                                                            <li clstag="h|keycount|head|navi_03" class="fore3">
                                                    <a class="navitems-lk"
                               target="_blank"
                               href="https://miaosha.jd.com/"
                               aria-lable="秒杀">秒杀                                                            </a>
                                            </li>
                                                                            <li clstag="h|keycount|head|navi_04" class="fore4">
                                                    <a class="navitems-lk"
                               target="_blank"
                               href="https://fresh.jd.com/"
                               aria-lable="京东生鲜">京东生鲜                                                            </a>
                                            </li>
                                            </ul>
                        <div class="spacer"></div>
                                                                                <ul id="navitems-group2">
                                        <li clstag="h|keycount|head|navi_05" class="fore5">
                                                    <a class="navitems-lk"
                               target="_blank"
                               href="https://jiadian.jd.com/"
                               aria-lable="京东家电">京东家电                                                            </a>
                                            </li>
                                                                            <li clstag="h|keycount|head|navi_06" class="fore6">
                                                    <a class="navitems-lk"
                               target="_blank"
                               href="https://plus.jd.com/index?flow_system=appicon&flow_entrance=appicon11&flow_channel=pc"
                               aria-lable="PLUS会员">PLUS会员                                                            </a>
                                            </li>
                                                                            <li clstag="h|keycount|head|navi_07" class="fore7">
                                                    <a class="navitems-lk"
                               target="_blank"
                               href="https://red.jd.com/"
                               aria-lable="品牌闪购">品牌闪购                                                            </a>
                                            </li>
                                                                            <li clstag="h|keycount|head|navi_08" class="fore8">
                                                    <a class="navitems-lk"
                               target="_blank"
                               href="https://www.jd.hk/"
                               aria-lable="进口好物">进口好物                                                            </a>
                                            </li>
                                            </ul>
                        <div class="spacer"></div>
                                                                                <ul id="navitems-group3">
                                        <li clstag="h|keycount|head|navi_09" class="fore9">
                                                    <a class="navitems-lk"
                               target="_blank"
                               href="https://paimai.jd.com/"
                               aria-lable="拍卖">拍卖                                                            </a>
                                            </li>
                                                                            <li clstag="h|keycount|head|navi_10" class="fore10">
                                                    <a class="navitems-lk"
                               target="_blank"
                               href="https://mro.jd.com/"
                               aria-lable="京东五金城">京东五金城                                                            </a>
                                            </li>
                                            </ul>
                        <div class="spacer"></div>

            </div>

            <div id="treasure"></div>
        </div>
</div>

</body>
</html>

如何将我发html代码导入到本地:

(为什么要找到创建python运行文件因为你创建运行python代码的文件,你首先得创建一个包,然后才能创建文件,创建xx.html,和创建xx.py文件的流程是一样的,只是你选择的文件格式不一样,)

第二步:

第三步:找到HTML File(它就是html文件) 文件,创建一个就行

然后将我的发在名为test中的代码复制到这个html格式文件中即可,或者你也可以自己去找一个网站的页面,将它html文件粘贴下来,放在我说的test.html 文件中。

如何在页面找html格式的文件呢?

先搜索到你喜欢或者你需要的网站页面(我以百度为例)

第二步鼠标右键点击就会看到下面的页面

第三步:鼠标左键点击出现第二步中的页面,找到“查看网页源代码”左击点击进入

不过百度的前端页面好像是javascript写的,如果要获取其中的文本数据的话我得研究一下

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐