python lxml中etree的简单应用
我一般都是通过xpath解析DOM树的时候会使用lxml的etree,可以很方便的从html源码中得到自己想要的内容。
这里主要介绍一下我常用到的两个方法,分别是etree.HTML()和etree.tostrint()。
1.etree.HTML()
etree.HTML()可以用来解析字符串格式的HTML文档对象,将传进去的字符串转变成_Element对象。作为_Element对象,可以方便的使用getparent()、remove()、xpath()等方法。
如果想通过xpath获取html源码中的内容,就要先将html源码转换成_Element对象,然后再使用xpath()方法进行解析。例如,这里有一段最简单的html源码:"<html><body><h1>This is a test</h1></body></html>",现在想要得到h1标签中的文本,可以这样实现:
1
2
3
4
5
6
7
8
9
10
|
# encoding=utf8
from
lxml
import
etree
html
=
'<html><body><h1>This is a test</h1></body></html>'
# 将html转换成_Element对象
_element
=
etree.HTML(html)
# 通过xpath表达式获取h1标签中的文本
text
=
_element.xpath(
'//h1/text()'
)
print
'result is: '
, text
|
结果:
result is: ['This is a test']
通过结果可以知道,xpath()方法放回的结果是一个列表,所以通常在取xpath()方法结果的时候,只取列表中的第一个元素。
2.etree.tostring()
etree.tostring()方法用来将_Element对象转换成字符串。一般通过简单的xpath表达式无法得到想要的内容的时候我就会用该方法。例如,将上面的html小改动一下:"<html><body><h1>This <a>is a </a>test</h1></body></html>",这时候如果想要得到h1中的文本该怎么办呢?使用“//h1/text()”试试(将上面的html保存并用火狐浏览器打开,然后在FirePath中输入该xpath表达式):
通过截图左下角的提示可以知道,使用xpath表达式“//h1/text()”只能得到h1标签中文本的“This”和“test”,用代码实现看看:
1
2
3
4
5
6
7
8
|
# encoding=utf8
from
lxml
import
etree
html
=
'<html><body><h1>This <a>is a </a>test</h1></body></html>'
_element
=
etree.HTML(html)
text
=
_element.xpath(
'//h1/text()'
)
print
'result is: '
, text
|
运行结果:
result is: ['This ', 'test']
确实,使用xpath()方法,只能得到h1中部分文本内容,我们再试试使用“//h1//text()”看看:
然后通过代码实现看看:
1
2
3
4
5
6
7
8
|
# encoding=utf8
from
lxml
import
etree
html
=
'<html><body><h1>This <a>is a </a>test</h1></body></html>'
_element
=
etree.HTML(html)
text
=
_element.xpath(
'//h1//text()'
)
print
'result is: '
, text
|
运行结果:
result is: ['This ', 'is a ', 'test']
通过“//h1//text()”表达式确实可以得到想要的内容,但是得到的是一个列表,还需要将列表中的所有元素“拼”起来才行,是不是有点麻烦。这时候,就可以考虑使用etree.tostring()方法了,etree.tostring()方法可以传递多个参数,包括element_or_tree、encoding、method等,其中method参数为text的时候,表示返回_Element对象中的所有文本,所以可以这样:
1
2
3
4
5
6
7
8
9
10
11
|
# encoding=utf8
from
lxml
import
etree
html
=
'<html><body><h1>This <a>is a </a>test</h1></body></html>'
_element
=
etree.HTML(html)
# 先找到h1对象,然后通过etree.tostring方法找到h1对象中的所有文本
_h
=
_element.xpath(
'//h1'
)
# 注意,xpath方法返回的是一个列表,我们需要的是列表中的第一个元素:代表h1标签的_Element对象
result
=
etree.tostring(_h[
0
], method
=
'text'
)
print
'result is: '
, result
|
运行结果:
result is: This is a test
这时候使用etree.tostring()方法是不是很容易的就解决问题了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li><a href="/article/164020.htm" title="Python3.5以上版本lxml导入etree报错的解决方案" target="_blank">Python3.5以上版本lxml导入etree报错的解决方案</a></li><li><a href="/article/147353.htm" title="Python爬虫基础之XPath语法与lxml库的用法详解" target="_blank">Python爬虫基础之XPath语法与lxml库的用法详解</a></li><li><a href="/article/142670.htm" title="python3解析库lxml的安装与基本使用" target="_blank">python3解析库lxml的安装与基本使用</a></li><li><a href="/article/120830.htm" title="python利用lxml读写xml格式的文件" target="_blank">python利用lxml读写xml格式的文件</a></li><li><a href="/article/105224.htm" title="Python pip安装lxml出错的问题解决办法" target="_blank">Python pip安装lxml出错的问题解决办法</a></li><li><a href="/article/84356.htm" title="Python使用lxml模块和Requests模块抓取HTML页面的教程" target="_blank">Python使用lxml模块和Requests模块抓取HTML页面的教程</a></li><li><a href="/article/81369.htm" title="在windows系统中实现python3安装lxml" target="_blank">在windows系统中实现python3安装lxml</a></li><li><a href="/article/67125.htm" title="Python lxml模块安装教程" target="_blank">Python lxml模块安装教程</a></li><li><a href="/article/192191.htm" title="Python爬虫基于lxml解决数据编码乱码问题" target="_blank">Python爬虫基于lxml解决数据编码乱码问题</a></li></ul>
</div>
</div>
<!--endmain-->
<div class="lbd_bot clearfix"><script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><ins class="adsbygoogle" style="display: block; height: 280px;" data-ad-client="ca-pub-6384567588307613" data-ad-slot="6445926239" data-ad-format="auto" data-full-width-responsive="true" data-adsbygoogle-status="done" data-ad-status="filled"><ins id="aswift_2_expand" tabindex="0" title="Advertisement" aria-label="Advertisement" style="border: none; height: 280px; width: 820px; margin: 0px; padding: 0px; position: relative; visibility: visible; background-color: transparent; display: inline-table;"><ins id="aswift_2_anchor" style="border: none; height: 280px; width: 820px; margin: 0px; padding: 0px; position: relative; visibility: visible; background-color: transparent; display: block; overflow: visible;"><iframe id="aswift_2" name="aswift_2" style="left:0;position:absolute;top:0;border:0;width:820px;height:280px;" sandbox="allow-forms allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-top-navigation-by-user-activation" width="820" height="280" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" allow="attribution-reporting" src="https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-6384567588307613&output=html&h=280&slotname=6445926239&adk=31928706&adf=3459759375&pi=t.ma~as.6445926239&w=820&fwrn=4&fwrnh=100&lmt=1643074059&rafmt=1&psa=1&format=820x280&url=https%3A%2F%2Fwww.jb51.net%2Farticle%2F161053.htm&flash=0&fwr=0&fwrattr=true&rpe=1&resp_fmts=3&wgl=1&uach=WyJXaW5kb3dzIiwiOC4wLjAiLCJ4ODYiLCIiLCI5Ni4wLjQ2NjQuMTEwIixbXSxudWxsLG51bGwsIjY0Il0.&dt=1643072710323&bpp=2&bdt=1171&idt=130&shv=r20220119&mjsv=m202201120101&ptt=9&saldr=aa&abxe=1&cookie=ID%3Db6a88ef4cb02fd6a-226b14092bd00048%3AT%3D1643072186%3ART%3D1643072186%3AS%3DALNI_Mapqrboj6HqrbGrY-tWPmiJ6fcUNw&prev_fmts=0x0%2C820x280%2C300x250%2C1200x280%2C300x600%2C300x600%2C1215x654&nras=5&correlator=3314350649201&frm=20&pv=1&ga_vid=71989443.1643072710&ga_sid=1643072710&ga_hid=1078836726&ga_fc=0&u_tz=480&u_his=1&u_h=960&u_w=1536&u_ah=920&u_aw=1536&u_cd=24&u_sd=1.563&dmc=8&adx=23&ady=5767&biw=1215&bih=654&scr_x=0&scr_y=3167&eid=44750773%2C21066433%2C31064036%2C31060566%2C21067496&oid=2&psts=AGkb-H_PIbIrla07MXQl5d9guPO5-NrpK9w9ksXAFA8VJDO8ZmnVWiHJB7onEF4Hok29tjFINJqdtL66_JSj%2CAGkb-H_3Zem6BT7HXedc821s4tUAki0MYTOg_39l18Yi6WIMsOTUIeBaLQeEdZycIFYMK6TOGRc6jA5jZwXg9-mvwg%2CAGkb-H_kls3TIalPBdDHSeUzDMy443c7Af4D8gXOqISg9QfkDpmUpbgZLA66iiA5dCFZuDTqxPOnaepbbP0p%2CAGkb-H9NekAppm3JHhabFvVGJ8pgB2ltiUhwKmFwgy_VNZm9fXzEA0hHmV-lKoK7X-hi6vn_H8JYqXrf6PY-_w%2CAGkb-H_fRw9e2u_JgOHSqvW6kx3DItenIXcLMMi57-YPc6-ANafYHpfvjG-Gkpv7-Fohjmm26Yjde43E5eQugA&pvsid=3399045354886168&pem=744&tmod=2021733625&nvt=3&ref=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DBA75_BhxLL0GSUQTDJ2Ccqac3SF7D005rCIIHgsNzbFWIZduQhtbpEUxwceMRc7oQ8_F2GhGOthFVGmQRgLHo_%26wd%3D%26eqid%3D97d219a6001060680000000661ef4aa4&eae=0&fc=1920&brdim=0%2C0%2C0%2C0%2C1536%2C0%2C1536%2C920%2C1229%2C654&vis=1&rsz=%7C%7CeEbr%7C&abl=CS&pfx=0&fu=128&bc=31&ifi=3&uci=a!3&btvi=4&fsb=1&xpc=9f03JbDzz3&p=https%3A//www.jb51.net&dtd=M" data-google-container-id="a!3" data-google-query-id="CLbYiO3fy_UCFavPTAIdrKQAbg" data-load-complete="true"></iframe></ins></ins></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div><div id="ewm"><div class="jb51ewm"><div class="fl"><img src="//files.jb51.net/skin/2018/images/jb51ewm.png"></div><div class="fr"><p>微信公众号搜索 “ <span>脚本之家</span> ” ,选择关注</p><p>程序猿的那些事、送书等活动等着你</p></div></div></div><p>原文链接:https://blog.csdn.net/u012067766/article/details/79903455</p>
<div class="tags clearfix">
<i class="icon-tag"></i>
<ul class="meta-tags">
<li class="tag item"><a href="http://common.jb51.net/tag/python/1.htm" target="_blank" title="搜索关于python的文章" rel="nofollow">python</a></li>