python网络编程实战-使用etree进行网页数据的解析,etree.xpath的使用

【Etree的用法详解】 etree是Python中处理XML和HTML的强大工具,它提供了丰富的API来解析、查找、修改和保存文档。通过XPath和CSS选择器,我们可以轻松地定位和操作文档中的元素。此外,etree的高性能和错误处理能力使其成为数据处理任务的理想选择。 阅读详情

etree简介

etree是基于ElementTree API的一种XML解析方式。相较于SAX,DOM而言,具有代码可用性好,速度快,消耗内存少等特点。Python的lxml库中的etree,提供了ElementTree API定义的接口。

依赖库安装

要使用etree,需要安装lxml。

pip install lxml

常用方法:

etree.HTML(): 实例化tree对象, 返回etree对象
tree.xpath(): 可以定位标签
etree.tostring:节点对象到字符串的转换

常用方法举例

分析豆瓣网址相关数据,来说明etree.xpath的使用。

1.初始化

from lxml import etree
# 实例化tree对象
tree = etree.HTML(open('index.html', 'r', encoding='UTF-8').read())

2.找超链接 登录 注册

res = tree.xpath('/html/body/div/div/div/a')
# 节点对象转换成字符串输出
for e in res:
    print(etree.tostring(e,encoding='UTF-8').decode('UTF-8'))

运行结果:


注册
下载豆瓣客户端

3.超链接 a 获取所有当前页面中的a 无论在哪个位置

# 超链接 a  获取所有当前页面中的a  无论在哪个位置
res = tree.xpath('//a')
res = tree.xpath('//img')  # 获取页面中所有的img标签
# print(res)
for e in res:
    print(etree.tostring(e,encoding='UTF-8').decode('UTF-8'))

4.文本内容获取

res = tree.xpath('/html/body/div/div/div/a')
res = tree.xpath('/html/body/div/div/div/a/text()')  # 获取a中的文本
res = tree.xpath('//a/text()')  # 获取a中的文本
print(res)

5.路径中混合使用/ 和 //

# 路径中混合使用/ 和 //
res = tree.xpath('//ul[@class="cover-col-4 clearfix"]')
print(res)
print(etree.tostring(res[0],encoding='UTF-8').decode('UTF-8'))

6.获取前两个li

res = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[position()<3]')
print(res)

7.@attr 属性

# @attr 属性
# res = tree.xpath('//img')  # 获取img标签
# res = tree.xpath('//img/@src')  # 获取img的src
# res = tree.xpath('//@src')  # 获取所有的src属性
res = tree.xpath('//img[@src]')  # 获取所有具有src属性的img标签
print(res)

8.判断和比较

# res = tree.xpath('//a[@class]')  # 获取所有带有class属性的a
# res = tree.xpath('//a[@class="cover"]')  #  所有class属性值为"cover"的超链接
# res = tree.xpath('//a[@price>"10"]')  #  获取price属性大于10的标签
# res = tree.xpath('//a[@price>="10"]')  #  获取price属性大于等于10的标签
# res = tree.xpath('//a[@price<"10"]')  #  获取price属性小于10的标签
# res = tree.xpath('//a[@price<="10"]')  #  获取price属性小于10的标签
res = tree.xpath('//a[@price!="10"]')  #  获取price属性小于10的标签
# print(res)
for e in res:
    print(etree.tostring(e,encoding='UTF-8').decode('UTF-8'))

9.判断和比较

# res = tree.xpath('//a[@class]')  # 获取所有带有class属性的a
# res = tree.xpath('//a[@class="cover"]')  #  所有class属性值为"cover"的超链接
# res = tree.xpath('//a[@price>"10"]')  #  获取price属性大于10的标签
# res = tree.xpath('//a[@price>="10"]')  #  获取price属性大于等于10的标签
# res = tree.xpath('//a[@price<"10"]')  #  获取price属性小于10的标签
# res = tree.xpath('//a[@price<="10"]')  #  获取price属性小于10的标签
res = tree.xpath('//a[@price!="10"]')  #  获取price属性小于10的标签
# print(res)
for e in res:
    print(etree.tostring(e,encoding='UTF-8').decode('UTF-8'))

10.通配符*的使用

一般只有在copy xpath的时候会出现* 自己写的时候很少用

res = tree.xpath('//*[@price]')
for e in res:
    print(etree.tostring(e,encoding='UTF-8').decode('UTF-8'))

运行结果:

% python3 my_2xpath_test.py
10
20
30

加粗

xpash看起来解析功能很强大,很多时候和正则表达式一起使用,你会收到惊喜。

<本篇完>

python爬虫系列--lxml(etree/parse/xpath)的使用 lxml:python 的HTML/XML的解析器 官网文档:https://lxml.de/ 使用前,需要安装安 lxml 包 功能: 1.解析HTML:使用 etree.HTML(text) 将字符串格式的 html 片段解析成 html 文档 2.读取xml文件 3.etree和XPath 配合使用 lxml-etree的使用:加载本地中的html etree.HTML(te... 阅读详情

相关推荐

网页元素节点选取之xpath测试——python lxml的etree方法

最近在用scrapy爬取数据,每次写一堆xpath语法,然后运行爬虫时由于xpath语法错误、或者逻辑错误亦或者节点不精准多做很多工作,于是想查查看有没有简易的xpath节点测试工具或方法:网上有xpath在线测试小工具,但这种在线测试网页在测试网页文本较大时测试匹配不出来,另外测试时匹配给的是匹配节点的子节点,要测试匹配节点属性选取时用不上。还有不少第三方小工具下载,小小测试再装个小程序不合我意...

我重来的博客 4309

【RPA开发】lxml 库之 etree 使用详解

lxml 库是 Python 中一个强大的 XML 处理库,简单来说,etree 模块提供了一个简单而灵活的API来解析和操作 XML/HTML 文档。官方网址安装etree 不仅可以创建 xml/html 树,还可以解析及处理 XML/HTML 数据(lxml.html 也是基于 lxml.etree 的),因为它可以方便地从 XML/HTML 文档中选取某些节点。总之,etree 是 lxml 库中最常用的模块之一,可以极大地简化 XML/HTML 数据的处理过程。

尹煜的博客 2万+

【无标题】EXCEL实现刷题

运用Excel开发的刷题工具,具有普遍实用性,可将WORD的试题自动导入并实现刷题。

weixin_44081794的博客 2971

python lxml中etree的简单应用1

我一般都是通过xpath解析DOM树的时候会使用lxml的etree,可以很方便的从html源码中得到自己想要的内容。 这里主要介绍一下我常用到的两个方法,分别是etree.HTML()和etree.tostrint()。 1.etree.HTML() etree.HTML()可以用来解析字符串格式的HTML文档对象,将传进去的字符串转变成_Element对象。作为_Element对象,可以...

锅炉房刘大爷的博客 3万+

解决鸿蒙/荣耀设备GMS应用调试中的“Play保护机制认证”报错

本文详细解析了在鸿蒙或荣耀设备上调试GMS应用时,遇到“Play保护机制认证”报错的根本原因与解决方案。核心在于获取设备的GMS Device ID,并通过Google官方渠道完成临时注册,从而绕过认证限制。文章提供了无需Root和ADB查询两种具体方法,并分享了授权后的故障排查与实战经验,帮助开发者高效解决问题。

weixin_29288313的博客 300

mongoDB 数据莫名其妙的没了

问题 之前没有接触过mongoDB,然后接手一个项目使用的是MongoDB,我就跟着网上的教程搭建一个MongoDB的服务,并运行起来。 一开始没有啥问题,成功的把服务与MongoDB都启动以来,运行也没有问题。但是过了几天,我再次打开时发现,以前的数据神奇的消失了。我还在想,是有什么定时清除的么,还是什么原因导致崩了然后数据就被清理了。 查找原因 第一次遇到我没有在意,重启了一下MongoDB,...

技术熊的博客小窝 1万+

Python爬虫-爬取贴吧中每个帖子内的楼主图片

# -*- coding:utf-8 -*- import urllib.request from lxml import etree def loadPage(url): """ 作用:根据url发送请求,获取服务器响应文件 url: 需要爬取的url地址 """ # headers = {"User-Agent" : "Mozi...

weixin_33749131的博客 365

【爬虫】爬取我的优快云中的信息

爬取博客标题 from urllib import request from lxml import etree page=1 total=0 while page&amp;amp;lt;=2: request_url=&amp;quot;https://blog.csdn.net/weixin_38052444/article/list/&amp;quot;+str(page) response=request.urlopen(...

无名小站 373

CLion for Mac(m1)配置GCC编译器

条件:电脑已经下载过XCode 一. 下载HomeBrew homebrew是一款macos,linux下的包管理工具,我们需要使用他来下载GCC 下载方法: 1.打开终端(terminal) 2.输入 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ps.有可能会遇到的问题 我当初下载挂了VPN,优快云上还有很多解决问题的方法,可以将错误信

supermario19的博客 7847

vectorCast——Probe point 功能实现故障注入,局部变量打印,断点调试。

选择一个测试用例,选择coverage窗口进行查看。点击edit probe point,如图所示绿色的小圆圈。 选代码中选择需要打断点的地方进行点击。黑色的小圆点都可以选。 点击黑色小圆点,小圆点变绿,表示打断点成功。 此时就可以根据自己的需求在打断点的位置编写一些C语言的命令语句。 点击编译,成功会弹出窗口显示编译成功,失败会在下方报错error,并显示错误的原因。 点击应用保存,选择yes to all就可以了。 点击用例执行就可以看到打断点情况下的执行结果了。

weixin_59334478的博客 2075

新手入门之xpath实战讲解

上篇讲解了pyquery库的入门讲解,今天讲解用xpath解析网页的实战 首先,运用xpath时,我们先导入这个库。 from lxml import etree 因为这次算是上次的延续,所以我们仍用https://www.duanwenxue.com作为目标网页。 用requests库请求网页 url = 'https://www.duanwenxue.com' headers = { ...

usernameisone的博客 695

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

python使用:爬虫案例

一键式部署:快速上手 1.改网址 2.改正则 3.改本地保存地址 # -*- coding: utf-8 -*- #导入所需第三方包。两个包自带。urllib.request用于请求网页,re用于正则表达式 #import request from urllib 和下面的意思一样,但是使用时可以少写'urllib.' import urllib.request import re impor...

月夜流心的博客 402

如何使用PostgreSQL数据库进行数据仓库的ETL操作

本文旨在为数据工程师、数据库管理员和分析师提供使用PostgreSQL进行数据仓库ETL操作的全面指南。ETL流程的基本原理PostgreSQL在ETL中的独特优势实际ETL实现的技术细节性能优化和最佳实践常见问题的解决方案首先介绍ETL和PostgreSQL的基本概念然后深入探讨核心技术和实现方法接着提供实际案例和代码示例最后讨论优化技巧和未来趋势ETL:提取(Extract)、转换(Transform)、加载(Load)的缩写,描述数据从源系统移动到目标数据仓库的过程。

2502_91592937的博客 873

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

lxml,etree简单爬取数据

# //div[@class='billboard-bd']//a/text() import requests from lxml import etree url = 'https://movie.douban.com/' headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTM...

zh0003的博客 444

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python爬虫-爬取扇贝单词(Xpath)

爬取扇贝单词 **======================** ==================================================================================   =====================================================================...

人生苦短, 还不用Python? 1980

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

xpath--贴吧爬虫

# coding=utf-8 import requests from lxml import etree import json class TiebaSpider: def __init__(self,tieba_name): self.tieba_name = tieba_name self.start_url = "http://tieba.bai...

spirit_artist的博客 1309

Python网络爬虫从入门到实战:请求、解析与工程化

网络爬虫的本质是自动获取公开数据,其核心并不在于对抗网站防护,而在于对HTTP请求、数据解析和工程细节的深入理解。通过requests库发送请求、接收响应,结合BeautifulSoup与XPath解析HTML页面,再从JSON接口中提取结构化数据,这是爬虫最基础也最稳定的技术路径。掌握状态码、请求头、会话保持与频率限制,能帮助开发者从单个页面爬取平稳过渡到批量任务处理。在批量采集场景中,日志记录、失败重试、延时控制比盲目更换代理IP更重要。理解常见反爬机制如User-Agent检测、限流和动态渲染,并遵循

weixin_33859231的博客 906

python爬虫百度标题简单实现(附:爬取公司信息)小白版本

本人博客链接:www.wslhome.top,以后优快云可能更新较少,大家喜欢可以在SOLO上关注我个人博客:www.wslhome.top 本来对python兴趣不大,但是为了期中考,简单记录一下超级无敌简单的爬虫实现的过程 接下来开始大白模式的记录,打发我无聊的时光: headers:解决request反爬虫,就是当我们访问部分网页的时候,会出现无法爬取数据、或者无法访问的时候,这时候采用headers,将爬虫伪装成浏览器去访问,这样就起到解决反爬虫的作用。 url:需要爬取的网页连接,注意{

sirwsl 911

爬取包图网视频(lxml解析)

以前解析HTML用的是BS,RE或者PyQuery,使用XML解析后我发现还是比较好用的。后面附有代码,当然,如果读者想用做课程设计,可以有所改进,如增加数量,识别视频内容(使用opencv)等等,以包图网作为列子. 用最普通的IDLE运行: 爬取下载后的文件: ''' 1 请求包图网拿到HTML数据 2 抽取数据,视频链接,名字 3 下载视频 4 保存视频 ''' i...

Y 6057

Python idle中lxml 解析HTML时中文乱码解决

例: <html><p>中文</p></html> 读取代码: 代码HTML需要进行decode('utf-8') 编译: p=etree.HTML(urlopen('http://101.37.179.183').read().decode('utf-8')).xpath('//p') 转载于:h...

weixin_30591551的博客 697

python爬虫获取图片基础教程

结合前述第一个博客,简单的一个爬取图片的代码 环境: anaconda+python 3.6.1 import requests from lxml import etree def get_url(): url='http://image.so.com/' r=requests.get(url) r.encoding = 'UTF-8' #print(r...

CJ130923的博客 1882

lxml提取html标签内容, tostring()不能显示中文 解决方案

from lxml import etree import requests response = requests.get('https://www.baisu.com/).text tree = etree.HTML(response) strs = tree.xpath( "//body") strs = strs[0] strs = (etree.tostring(strs)...

chaishen10000的专栏 2518

lxml标签提取案例及说明

def getproxyfromxici(): url = 'https://www.xicidaili.com/nn/1' header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.1...

weixin_43069769的博客 429

类装饰器爬取段子

import requests from lxml import etree class Request(object): """请求类""" def __init__(self, func): self.func = func def __call__(self, url, headers, data=None): resp = r...

浮云 241
上一篇: python网络编程实战-使用requests网络数据请求,写入csv中
下一篇: 猿创征文|使用python进行达梦数据库操作
liranke
博客等级 码龄20年 4939粉丝 594原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

liranke

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

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

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

打赏作者

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

抵扣说明:

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

余额充值