lxml解析包(二):对于xpath中含有命名空间的xml文件解析

1.问题:

有以下xml文件,当我想提取< itunes:episode >标签内容

<item>
       <title>姑苏城里写代码title>
       <itunes:episode>58itunes:episode>
       <pubDate>Tue, 31 Dec 2019 06:55:00 CDTpubDate>
       <description>
       		<p>本期由 Galway 主持,请到了一位在苏州工作的朋友,聊聊为什么离开大城市,以及苏州的工作生活。p>
            <ul>
                <li>哈哈哈li>
                <li>嘻嘻嘻li>
                <li>嘿嘿嘿li>
            ul>
        description>   
item>

当我使用常用的xpath方法提取的时候

from lxml import etree

html = etree.HTML(a)
num = html.xpath('//itunes:episode')
print(num)

结果:
lxml解析包(二):对于xpath中含有命名空间的xml文件解析_第1张图片

2.解决:三种提取方法

对于此类问题,经过查询是命名空间问题,详情见文章:xpath的命名空间

方法1.

a = '''
 
       姑苏城里写代码
       58
       Tue, 31 Dec 2019 06:55:00 CDT
       
       		

本期由 Galway 主持,请到了一位在苏州工作的朋友,聊聊为什么离开大城市,以及苏州的工作生活。

  • 哈哈哈
  • 嘻嘻嘻
  • 嘿嘿嘿
'''
from lxml import etree html = etree.HTML(a) num = html.xpath('//episode/text()') print(num)

在这里插入图片描述


方法2.

在scrapy中使用

num = html.xpath("*[contains(name(), 'itunes:episode/text()")

在这里插入图片描述


方法3.

在scrapy中,xml为获取的response.text

from lxml import etree
dom = etree.XML(xml)
aid = dom.xpath('//itunes:episode/text()', namespaces=dom.nsmap)
print(aid)

在这里插入图片描述

参考文章:https://stackoverflow.com/questions/24038744/namespace-error-lxml-xpath-python

你可能感兴趣的:(python爬虫)