python爬虫之lxml框架

Python爬虫库推荐,建议收藏留用 Python学习网络爬虫主要分3个大的版块: 抓取 , 分析 , 存储 当我们在浏览器中输入一个url后回车,后台会发生什么? 简单来说这段过程发生了以下四个步骤: •查找域名对应的IP地址。 •向IP对应的服务器发送请求。 •服务器响应请求,发回网页内容。 •浏览器解析网页内容。 那么学习爬虫需要掌握哪些库? 阅读详情

lxml

  • lxml这个框架用于对xml文件进行格式化(说明:html文件是一种特殊xml)
  • 安装:pip install lxml
  • etree 全称是element tree这个工具用把一个html文件格式化成一个树形型结构,这个树形结构叫做节点树
    html测试页面
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8" />
	<title>测试页面</title>
</head>
<body>
	<ol>
		<li class="haha">醉卧沙场君莫笑,古来征战几人回</li>
		<li class="heihei">两岸猿声啼不住,轻舟已过万重山</li>
		<li id="hehe" class="nene">一骑红尘妃子笑,无人知是荔枝来</li>
		<li class="xixi">停车坐爱枫林晚,霜叶红于二月花</li>
		<li class="lala ">商女不知亡国恨,隔江犹唱后庭花</li>
	</ol>
	<div id="pp">
		<div>
			<a href="http://www.baidu.com">李白</a>
		</div>
		<ol>
			<li class="huanghe">君不见黄河之水天上来,奔流到海不复回</li>
			<li id="tata" class="hehe">李白乘舟将欲行,忽闻岸上踏歌声</li>
			<li class="tanshui kkk">桃花潭水深千尺,不及汪伦送我情</li>
		</ol>
		<div class="hh">
			<a href="http://mi.com">雷军</a>
		</div>
		<ol>
			<li class="dudu">are you ok</li>
			<li class="meme">会飞的猪</li>
		</ol>
	</div>
</body>
</html>

获取节点

from lxml import etree
# 1、把html字符串创建成一棵节点树
test_tree = etree.parse("./test.html") # parse函数用于读取本地文件,并且将其中的html字符串转化成节点树
print(test_tree)
#<lxml.etree._ElementTree object at 0x0000000002B91C48>


# 2、从节点树中提取节点
ret = test_tree.xpath("/html/body/ol/li[3]") # 这个函数用于从节点树中,根据节点的路径来提取节点
#[<Element li at 0x2b92d48>]
# 这个函数返回值是一个列表,列表中是符合条件的所有的节点
ret = test_tree.xpath("/html/body/div/div[1]/a")
#[<Element a at 0x2b92e48>]
# 获取页面上所有的li节点
ret = test_tree.xpath("//li")
# 【注意】在节点定位的过程中,"/"代表当前节点的子节点,"//"代表当前节点的后代节点
#[<Element li at 0x2b92e88>, <Element li at 0x2b92ec8>, <Element li at 0x2b92d48>, <Element li at 0x2b92f08>, <Element li at 0x2b92f48>, <Element li at 0x2b92fc8>, <Element li at 0x2bb5048>, <Element li at 0x2bb5088>, <Element li at 0x2bb50c8>, <Element li at 0x2b92f88>]


# 3、获取节点的属性
# 【注意】在xpath语法中,所有的属性前面都要用@符号
ret = test_tree.xpath("/html/body/div/div[1]/a/@href") 
#['http://www.baidu.com']



#4、获取节点中的文本内容
ret = test_tree.xpath("/html/body/ol/li[2]/text()")
#['两岸猿声啼不住,轻舟已过万重山']

# 提取当前节点和所有的后代节点的所有文本
ret = test_tree.xpath("/html/body/ol//text()") 
#['\n    ', '醉卧沙场君莫笑,古来征战几人回', '\n    ', '两岸猿声啼不住,轻舟已过万重山', '\n    ', '一骑红尘妃子笑,无人知是荔枝来', '\n    ', '停车坐爱枫林晚,霜叶红于二月花', '\n    ', '商女不知亡国恨,隔江犹唱后庭花', '\n']
# 提取当前节点和所有的后代节点的class属性
ret = test_tree.xpath("/html/body/ol//@class") 
#['haha', 'heihei', 'nene', 'xixi', 'lala']

# 5、属性定位
# 找所有带id属性的li
ret = test_tree.xpath("//li[@id]/text()")
#['一骑红尘妃子笑,无人知是荔枝来', '李白乘舟将欲行,忽闻岸上踏歌声']

# 找出所有的class值为dudu的li
ret = test_tree.xpath("//li[@class='dudu']/text()")
#['are you ok']

# 【注意】xpath不是css选择器,在用属性修饰的时候,必须把属性的值写全
ret = test_tree.xpath("//li[@class='tanshui kkk']/text()")
#['桃花潭水深千尺,不及汪伦送我情']

ret = test_tree.xpath("//li[@class='lala ']/text()") 
#['商女不知亡国恨,隔江犹唱后庭花']


# 6、模糊匹配
# 包含:查找所有的class中包含e的li
ret = test_tree.xpath('//li[contains(@class,"e")]/text()')
# 开头:查找所有的class以h开头的那些li
ret = test_tree.xpath("//li[starts-with(@class,'h')]/text()")

# 7、逻辑匹配
# 与:查找所有的带id属性并且class值为hehe的那些li
ret = test_tree.xpath("//li[@id and @class='hehe']/text()")
# 或:查找所有的带id值或者带class值的div
ret = test_tree.xpath("//div[@id or @class]")
print(ret)



# 8、相对路径
# 以上的xpath路径在查找节点的时候都是从根节点开始查找,此时的xpath路径是绝对路径
obj = test_tree.xpath("//div[@id='pp']")[0]
# 现在我们希望从obj这个节点的内部进行查找
ret2 = obj.xpath("//li/text()") # xpath语法的绝对路径的查找和用谁来调xpath函数没有关系
ret2 = obj.xpath(".//li/text()") # 用相对路径来查找,谁调用的xpath函数,就会基于谁为根进行查找
# 用obj这个节点对象来查找xpath
print(ret2)
#['君不见黄河之水天上来,奔流到海不复回', '李白乘舟将欲行,忽闻岸上踏歌声', '桃花潭水深千尺,不及汪伦送我情', 'are you ok', '会飞的猪']

python-爬虫基础-lxml.etree(3)-Elementtree类 ''' Elementtree 主要是一个包装在具有根节点的树周围的文档。 它提供了一些用于序列化和一般文档处理的方法。 ''' root = etree.XML('''\ <?xml version="1.0"?> <!DOCTYPE root SYSTEM "test" [ <!ENTITY tasty "parsnips"> ]> <root&g... 阅读详情

相关推荐

Python网络爬虫从入门到实践

网络爬虫是一种自动获取网页内容的程序或脚本,它的基本任务是从互联网上按照一定的规则,自动抓取信息。这一过程是通过模拟浏览器行为,对网络资源进行请求和解析来实现的。Scrapy是一个快速、高层次的web爬取框架,用于爬取网站并从页面中提取结构化的数据。Scrapy框架采用分层的架构设计,主要包括以下组件:Scrapy引擎(Engine):负责控制数据流在系统中的所有组件之间流动,并在相应动作发生时触发事件。调度器(Scheduler)

weixin_32005771的博客 2319

Python爬虫初级(4):lxml.etree解析网页

Python爬虫初级(4):lxml.etree解析网页

一北DMY的博客 1万+

Python网络爬虫技术实战:源代码与实验数据解析

requests库是一个用Python编写,用于发送HTTP请求的库。它允许你发送各种类型的请求(GET, POST, PUT, DELETE等)并能够处理多种类型的响应内容,如JSON、XML等。requests库的API设计优雅,简洁易用,是Python中最为流行的HTTP客户端库之一。requests的优势主要体现在以下几个方面:简单易用:API非常直观,上手容易,即使你是一名初学者,也能够快速学会如何使用requests进行网络请求。兼容性。

weixin_31569663的博客 2110

python的lxml.etree类的使用

lxml:python 的HTML/XML的解析器 1.安装 lxml 【PyCharm】>【file】>【settings】>【Project Interpreter】>【+】 >【lxml】>【install】 注意:在python3.5之后的 lxm 模块l中不能再直接引入etree模块,虽然新版本无法直接”from lxml import etree...

定格空间 2211

掌握Python网络爬虫:技巧与实践

本文深入探讨了《Python网络爬虫》一书的精髓,涵盖了网络爬虫的基础知识、高级功能实现以及法律与实践问题。通过对各种网络爬虫工具和技术的学习,读者可以掌握如何高效地从网页中提取和处理数据。文章不仅介绍了基本的爬虫技术,如链接爬虫、数据下载、以及如何处理复杂的验证码,还涉及了如何使用Scrapy框架来构建可复用的网络爬虫项目,并讨论了爬虫的合法性和道德问题。

weixin_42348783的博客 385

Python实现的PM2.5空气质量爬虫教程

网络爬虫(Web Crawler)是一种自动化脚本或程序,用于从互联网上抓取信息。它们模仿人类用户的行为,访问网页,解析内容,并将数据保存至本地或数据库中。在数据挖掘、信息聚合、搜索引擎等领域,爬虫扮演着至关重要的角色。中间件是Scrapy的一个重要概念,允许我们修改Scrapy请求和响应的处理过程。

weixin_35949153的博客 682

etree解析xml_python中api《lxml.etree》的使用

这是一个关于使用lxml.etree进行XML处理的教程。它简要概述了ElementTree API的主要概念,以及一些简单的增强功能,使您作为程序员的生活更轻松。关注小编后续次序更新本文章主要介绍的是,ElementTree类从字符串和文件中解析fromstring()函数XML()函数parse()函数解析器对象增量解析ElementTree类一个ElementTree的主要文档包裹一个树根节...

weixin_36487018的博客 1172

Qt绘图实战:用QGraphicsItem实现可拖拽箭头连接(附完整代码)

本文详细介绍了如何使用Qt的QGraphicsItem框架实现一个功能完备的可拖拽箭头连接组件。通过核心代码示例,讲解了如何创建自定义图形项、实现智能吸附、碰撞检测以及实时拖拽编辑路径,为构建流程图、拓扑图等专业图形编辑器提供了完整的解决方案。

m2n3b4v5c6的博客 626

python之lxml快速上手_ElementTree(三)

The ElementTree class ElementTree主要是作为一个包含根节点的“树(tree)”的文档包裹(document wrapper)。它提供了多个成对的序列化和常规文档处理方法: >>> root = etree.XML('''\ ... ... ]> ... root> ... a>&tasty;a> ... root> ... ''') >>> tre

like_LeafFlying的博客 2393

别再手动测接口了!用Pytest+Requests+Allure搭建你的第一个自动化框架(附完整源码)

本文详细介绍了如何使用Pytest+Requests+Allure搭建Python接口自动化测试框架,涵盖环境准备、核心组件封装、测试用例设计、报告生成及CI/CD集成等关键步骤。通过实战案例和完整源码,帮助开发者快速构建高效的接口自动化测试解决方案,提升测试效率和质量。

weixin_42546508的博客 320

VM与欧姆龙PLC通讯设置:Fins TCP/UDP协议实战避坑指南

本文详细解析了VM视觉平台与欧姆龙PLC通过Fins TCP/UDP协议进行通讯的实战配置与避坑要点。文章对比了Fins TCP与Fins UDP的差异,推荐在多数工业控制场景下优先选用Fins TCP以保证可靠性,并深入讲解了网络设置、寄存器地址映射、轮询优化等核心配置步骤。同时,针对常见的多次触发拍照、数据解析错误等问题提供了具体的解决方案和调试技巧,旨在帮助工程师快速建立稳定高效的通讯连接。

e4f5g6h7的博客 596

Python网络爬虫

Python网络爬虫—给????爪巴????1.网络爬虫的安全性2.网络爬虫的工作原理3.requests库1.requests库的常用函数2.request操作步骤3.response返回响应4.beautifulsoup4库1.常用的解析技术2.beautifulsoup4的操作步骤 网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动请求万维网网站并提取网络数据的程序或脚本。 网络爬虫的相...

Aurora_1970s的博客 4576

同花顺Supermind量化交易 技术面分析专题(一)-- 相似k线的形态验证与选股

W底”,“多头上涨”,“趋势回踩”,”上涨中继“这些都是常见的K线形态,以”上涨中继“为例,当股价快速上涨后,出现盘整形态而非顶部形态,预示股价还会进一步上涨,那么本节主要讲述”上涨中继”形态是否能够预测未来股价上涨,以及如何应用“上涨中继”形态,来快速选股。"相似K线"技术相比于传统的K线组合而言更具技术性,其还有较多的运用空间,比如:运用顶部形态来监控个股潜在的下跌风险,运用相似度来监控个股是否脱离大盘走势,研究各类形态的上涨预测能力,并应用于选股等等。第一步:选取一段标准的“上涨中继”形态K线图。

qq_22808537的博客 4549

基于python的网络爬虫初探

@TOC基于python的网络爬虫初探 网络爬虫概述 网络爬虫主要包含两个任务:1.下载目标网页;2.从目标网页提取需要的数据。 网络爬虫的主要类型:1.通用网络爬虫;2.聚焦网络爬虫;3.增量式网络爬虫;4.深层页面爬虫。 简易网络爬虫架构:1.URL管理器;2.网页下载器;3.网页解析器;4.输出管理器。 网络爬虫常用工具:python 1.python中实现网络爬虫工具包 (1) pytho...

爱数据爱统计 1661

【YOLOv11改进- 主干网络】YOLOv11+WTConv(ECCV2024): 基于YOLOv11的主干网络改进,大感受野的小波卷积

论文提出了WTConv,这是一个使用级联小波分解的层,并执行一组小卷积核的卷积,每个卷积专注于输入的不同频率带,并具有越来越大的感受野。这个过程能够在输入中对低频信息给予更多重视,同时仅增加少量可训练参数。实际上,对于一个  的感受野,可训练参数数量只随着  的增长而呈对数增长。而WTConv与常规方法的参数平方增长形成对比,能够获得有效的卷积神经网络(CNN),其有效感受野(ERF)大小前所未有。

qq_41304809的博客 1401

时间门控拉曼进展

拉曼光谱就像是用光给分子拍“指纹照”,通过激光照射样品,散射光会揭示样品的分子结构。但问题来了,样品有时会发荧光,就像拍照时闪光灯太亮,把指纹照模糊了。时间门控拉曼光谱技术就像加了个“快门”,只在拉曼信号出现的那一瞬间开门,把慢吞吞的荧光挡在门外,这样就能拍到清晰的“指纹”。

qq_53529450的博客 537

Python 网络爬虫的常用库汇总(建议收藏)

Python 在编写网络爬虫常常用到的一些库。Python爬虫网络库主要包括:urllib、requests、lxml、fake-useragent、bs4(BeautifulSoup)、grab、pycurl、urllib3、httplib2、RoboBrowser 、MechanicalSoup、mechanize、socket、Unirest for Python、hyper、PySocks、treq、aiohttp等。爬虫框架Web 框架库Re库介绍:正则表达式的表示类型:raw string类型(

2301_82000445的博客 2037

【推荐100个unity插件之8】实现多人在线联机游戏——Mirror插件的使用介绍(附项目源码)

基于Mirror的Unity多人游戏开发指南 本文介绍了使用Mirror插件开发Unity多人游戏的基本流程。Mirror是Unity的高级网络API,替代了已废弃的UNet系统。文章详细讲解了如何导入Mirror插件,创建NetworkManager网络管理器,处理常见错误,以及创建玩家角色和出生点。 主要内容包括: 创建场景NetworkManager并配置必要组件 为玩家添加NetworkIdentity和NetworkTransform组件 设置玩家初始生成位置和生成方式 常见错误及解决方法 通过M

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

Python 网络爬虫的常用库汇总

一、请求库:实现 HTTP 请求操作 urllib:一系列用于操作URL的功能,Python的内置库,直接使用方法import导入即可。。 requests:基于 urllib 编写的请求库,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。 selenium:自动化测试工具。一个调用浏览器的 driver,通过这个库你可以直接调用浏览器完成某些操作,比如...

小橙子的博客 2983

基于多模态融合的反无人机视觉跟踪算法研究

本研究提出了一种基于多模态融合的反无人机视觉跟踪算法,通过整合可见光、红外、深度等多种视觉信息源,提高了对无人机的跟踪精度和可靠性。设计并实现了多模态特征提取方法,针对不同模态图像的特点提取了有效的特征信息,为多模态融合提供了基础。研究了多种多模态融合策略,包括特征级融合、决策级融合和混合融合,并通过实验对比分析了它们的优缺点,确定了适合反无人机视觉跟踪的融合方法。选择并改进了跟踪算法,将多模态融合信息融入到跟踪过程中,提高了算法对复杂环境和无人机运动变化的适应性。

AI的内部世界的博客 1354

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python爬虫开发环境搭建

参考Python3网络爬虫开发实战第一章 pip sudo apt install python3-pip 从/etc/apt/source.list中指定位置下载pip到/var/cache/apt/archives安装(安装后删除安装包) virtualenv 不知道为何在Ubuntu上执行下面的安装后无法正常运行 pip3 install virtualenv 后改为 sudo apt ...

月寒日暖的博客 541

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python网络爬虫的流程与思路

Python网络爬虫

m0_49119161的博客 446

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python爬虫库推荐,建议收藏!!

来源:网络很多人学Python,都是从爬虫开始的,毕竟网上类似的资源很丰富,开源项目也非常多。Python学习网络爬虫主要分3个大的版块:当我们在浏览器中输入一个url后回车,后台会发生什么?简单来说这段过程发生了以下四个步骤:•查找域名对应的IP地址。•向IP对应的服务器发送请求。•服务器响应请求,发回网页内容。•浏览器解析网页内容。

wslejbb的博客 2193

“网络爬虫”哩啲鬼鼠贼好玩

最近Tatsumi在整理之前的爬虫笔记,发现网络爬虫的话还是比较大的一块领域,涉及到的东西也比较多。之前Tatsumi都是比较的零散的实现一些简单的爬虫小项目,并没有比较系统的整理整个知识架构,所以打算在这里完整的梳理一版爬虫的整体流程与解决思路。 所谓的爬虫,简单的来说这里就是使用编程语言...

chuihun9876的博客 308

Python网络爬虫使用教程

python爬虫资源抓取--urllib/requests/requests-html、正则表达式、数据解析-Beautiful Soup/lxml/selectolax、自动化爬虫--selenium、爬虫框架--Scrapy/pyspider、模拟登录与验证码识别、autoscraper

tttalk的博客 1万+
上一篇: re正则模块
下一篇: 爬虫案例(xpath)
Are you ready
博客等级 码龄8年 312粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值