关于XML的text提取,涉及不同情况下的使用
声明:转贴请联系作者,并注明本博客以及作者
情况包括几种:
情况1、取元素文本,但取不完整
情况2、取元素文本完整,但字符串无法直接连接
情况3、取元素文本完整,但无法包括内部元素的文本
'''关于XML的text提取,其中涉及说明了text函数不同情况下的使用'''
from lxml import etree
'''HTML案例,很有代表性,几乎涉及了元素文本提取的全部问题'''
test = '''<div class="test">
<p>前面文本1<span class="ori">内部标签文本1</span>后面文本1</p>
<p>前面文本2<span class="ori">内部标签文本2</span>后面文本2</p>
</div>'''
htmls = etree.HTML(test)
'''不同操作方式'''
for i in htmls.xpath('//div[@class="test"]/p'):
print(i.text)
print('--以上方式有时只能取到前面文本,无法提取完整--')
for i in htmls.xpath('//div[@class="test"]/p/text()'):
print(i)
print('--以上方式取到当前元素完整文本:单一输入,无法连接--')
for i in htmls.xpath('//div[@class="test"]/p'):
a = ''.join(i.xpath('text()'))
print(a)
print('--以上方式取到当前元素完整文本:连续输出--')
for i in htmls.xpath('//div[@class="test"]/p//text()'):
print(i)
print('--以上方式取到元素内全部文本包括内部元素:单个输出,无法连接--')
for i in htmls.xpath('//div[@class="test"]/p'):
print(i.xpath('string(.)'))
print('--以上方式取到元素内全部文本包括内部元素:连接输出--')
前面文本1
前面文本2
--以上方式有时只能取到前面文本,无法提取完整--
前面文本1
后面文本1
前面文本2
后面文本2
--以上方式取到当前元素完整文本:单一输入,无法连接--
前面文本1后面文本1
前面文本2后面文本2
--以上方式取到当前元素完整文本:连续输出--
前面文本1
内部标签文本1
后面文本1
前面文本2
内部标签文本2
后面文本2
--以上方式取到元素内全部文本包括内部元素:单个输出,无法连接--
前面文本1内部标签文本1后面文本1
前面文本2内部标签文本2后面文本2
--以上方式取到元素内全部文本包括内部元素:连接输出--