Python【xpath】基础上

news2024/11/18 17:19:32

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写的,如果要获取其中的文本数据的话我得研究一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从管易云到MySQL通过接口配置打通数据

数据源平台:管易云管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌&#xff0c;先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务&#xff0c;涵盖电商业务全流程。写入目标:MySQLmysql是一个关系数据库管理系统&#xff08;RDBMS&…

SpringBoot的自动配置

参考视频&#xff1a;每一帧都是干货&#xff01;15分钟的视频花2小时看 一、配置类&#xff08;Configuration Class&#xff09; 广义的配置类&#xff1a;被注解Component直接或间接修饰的某个类&#xff0c;即我们常说的Spring组件&#xff0c;其中包括了Configuration类…

类加载器与双亲委派

-----摘自 周志明 《深入理解Java虚拟机》类加载器Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现&#xff0c;以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器…

R语言多元数据统计分析在生态环境中的实践应用

生态环境领域研究中常常面对众多的不同类型的数据或变量&#xff0c;当要同时分析多个因变量&#xff08;y&#xff09;时需要用到多元统计分析&#xff08;multivariate statistical analysis&#xff09;。多元统计分析内容丰富&#xff0c;应用广泛&#xff0c;是非常重要和…

管易云与网易互客对接集成发货单=>编辑订单

对接源平台:管易云管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌&#xff0c;先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务&#xff0c;涵盖电商业务全流程。对接目标系统:网易互客网易互客是一款智能化的客户关系管理工具。可以…

JavaEE3-Spring创建

目录 1.创建一个普通的Maven项目 2.添加Spring框架支持(spring-context&#xff0c;spring-beans) 3.添加启动类 1.创建一个普通的Maven项目 不选择任何模板&#xff0c;直接点Next。 Name&#xff1a;项目名称&#xff1b; Location&#xff1a;项目保存路径&#xff1b; …

【文件操作】-还在为运行的数据没法保存而烦恼吗??这篇博客让你十分钟之内解决问题,赶紧进来看看!!!

&#x1f387;作者&#xff1a;小树苗渴望变成参天大树 &#x1f4a6;作者宣言&#xff1a;认真写好每一篇博客 &#x1f496;作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; ✨文件操作&#x1f9e8;前言&#x1f4a4;一…

压力测试和JMeter使用分析

压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。 压测都 是为了系统在线上的处理能力和稳定性维持在一个标准范围内&#xff0c;做到心中有数。 使用压力测试&#xff0c;我们有希望找到很多种用其他测试方法更难发现的错误。 有两种错误类型是:…

nginx简单梳理

Nginx总结 这里写目录标题Nginx总结**Nginx** **的简介**1、什么是 **nginx**2、正向代理3、反向代理4、负载均衡**5**、动静分离**Nginx** 的安装**Nginx** **的常用的命令****Nginx** 的配置文件**Nginx** **配置实例**-**反向代理实例** **1****Nginx** **配置实例**-**负载…

408—栈,队列和数组

stl里面的栈中没有清空的函数&#xff0c; 需要自己编写函数清空&#xff08;while循环返回pop&#xff09;&#xff0c; 更常见的做法是重新定义一个栈&#xff0c;这样的时间复杂度就是O(1)栈的基本操作&#xff0c;出栈入栈判空和求栈的长度,和取栈顶元素以及清空出栈和取栈…

初学者C语言练习题-函数

二、函数 一个C程序有且只有一个主函数&#xff0c;即main函数。 C程序就是执行主函数里的代码&#xff0c;也可以说这个主函数就是C语言中的唯一入口。而main前面的int就是主函数的类型.printf()是格式输出函数&#xff0c;这里就记住它的功能就是在屏幕上输出指定的信息retur…

MATLAB-自动控制原理-控制系统的数学模型

目录 一、利用MATLAB进行数学模型转换 语法&#xff1a; 例&#xff08;将传递函数写成零极点的形式&#xff09;&#xff1a; 例&#xff08;将传递函数写成因子式的形式&#xff09;&#xff1a; 二、利用MATLAB求系统传递函数 串联等效&#xff1a; 并联等效&#xf…

uboot启动流程详细分析(基于i.m6ull)

uboot介绍 uboot就是一段引导程序&#xff0c;在加载系统内核之前&#xff0c;完成硬件初始化&#xff0c;内存映射&#xff0c;为后续内核的引导提供一个良好的环境。uboot是bootloader的一种&#xff0c;全称为universal boot loader。 一、uboot的makefile 1.1 makefile整…

ccc-sklearn-16-XGBoost(2)

文章目录XGBoost的其他参数选择弱评估器&#xff1a;参数boosterXGB的目标函数&#xff1a;参数objectiveXGB目标函数的求解参数化决策树ftf_tft​&#xff1a;参数alpha&#xff0c;lambda寻找最佳树结构&#xff1a;求解w和T寻找最佳分枝&#xff1a;结构分数之差让树停止生长…

C++ 函数重载:女友说的话到底是什么意思?

&#x1f451;专栏内容&#xff1a;C学习笔记⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐 目录一、前言二、函数重载1、函数重载概念2、函数重载的分类Ⅰ、参数类型不同Ⅱ、参数个数不同Ⅲ、参数类型顺序不同3、函数重载…

vs code,platform下载Arduino程序到ESP8266,并传送文件到flash

参考视频&#xff1a;https://www.bilibili.com/video/BV1yR4y1X72D/ 首先要知道 存储空间中有程序的存储地址和文件存储地址&#xff0c;可以对单独一个部分的写入不影响另一部分内容。 vs code 的platformIO插件进行程序和文件的上传 基本创建工程和程序可以参考&#x…

启明欣欣STM32开发板移植FreeRTOS

承接这篇文章&#xff0c;本篇讲述如何把FreeRTOS移植到启明欣欣STM32开发板里&#xff0c;比较简单&#xff0c;网上也有各种教程&#xff0c;本文也是参考其它文章&#xff0c;这里再记录一下。 一 搭建基础工程 启明欣欣STM32开发板上的MCU是STM32F407ZGT6&#xff0c;根据…

智能电视机安装App

每年的12月18日是世界电视机日&#xff0c;电视机诞生于1925年&#xff0c;最初是电子机械式电视机&#xff1b;到了1933年&#xff0c;诞生CRT电视&#xff0c;即黑白电视&#xff0c;它只有黑色或白色&#xff0c;看任何物品都是黑色或者白色。又过了20年&#xff0c;1953年彩…

Java之collection集合、常见数据结构、List和泛型

目录集合概述总结Collection集合的体系特点总结Collection集合常用APICollection集合的遍历方式方式一&#xff1a;迭代器总结方式二&#xff1a;foreach/增强for循环方式三&#xff1a;lambda表达式Collection集合存储自定义类型的对象总结常见数据结构数据结构概述、栈、队列…

【C++初阶】C++基础(一)

C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等。熟悉C语言之后&#xff0c;对C学习有一定的帮助&#xff0c;本文主要目标&#xff1a;1. 补充C语言语法的不足&#xff0c;以及C是如何对C语言设计不合理…