python-使用beautifulsoup从RSS feed中解析所有带有子元素的元素

从RSS提要中,如何获取每个项目标签中所有内容的字符串?

输入示例(简体):

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Test</title>
<item>
  <title>Hello world1</title>
  <comments>Hi there</comments>
  <pubDate>Tue, 21 Nov 2011 20:10:10 +0000</pubDate>
</item>
<item>
  <title>Hello world2</title>
  <comments>Good afternoon</comments>
  <pubDate>Tue, 22 Nov 2011 20:10:10 +0000</pubDate>
</item>
<item>
  <title>Hello world3</title>
  <comments>blue paint</comments>
  <pubDate>Tue, 23 Nov 2011 20:10:10 +0000</pubDate>
</item>
</channel>
</rss>

我需要一个使用此RSS文件的python函数(我现在正在使用beautifulsoup),并具有遍历每个项目的循环.我需要一个在每个项目中都包含所有字符串的变量.

第一个循环结果示例:

<title>Hello world1</title>
<comments>Hi there</comments>
<pubDate>Tue, 21 Nov 2011 20:10:10 +0000</pubDate>

这段代码使我得到了第一个结果,但是我如何得到所有下一个?

html_data = BeautifulSoup(xml)
print html_data.channel.item

解决方法:

由于这是XML,因此请使用BeautifulStoneSoup

import BeautifulSoup
doc = BeautifulSoup.BeautifulStoneSoup(xml)
for item in doc.findAll('item'):
    for elt in item:
        if isinstance(elt,BeautifulSoup.Tag):
            print(elt)

这就是您可以使用lxml做相同的事情的方法(出于某种原因,我发现它更容易使用):

import lxml.etree as ET
doc = ET.fromstring(xml)
for item in doc.xpath('//item'):
    for elt in item.xpath('descendant::*'):
        print(ET.tostring(elt))
上一篇:脸书集团饲料Android


下一篇:c# – 如何在WPF中使TextBlock可滚动