特别篇:关于Python XML的text提取几点说明

2017/07/10 网络爬虫

关于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
--以上方式取到元素内全部文本包括内部元素:连接输出--

本篇总结了text函数的应用情况,能解决大部分文本提取问题,欢迎补充不足之处

Show Disqus Comments

Search

    欢迎关注我的微信公众号

    闷骚的程序员

    Table of Contents