BeautifulSoup распечатать несколько тегов / attr - PullRequest
0 голосов
/ 16 мая 2011

Прежде всего, это моя первая попытка использования Python, пока что он выглядит довольно простым в использовании, хотя я все же столкнулся с проблемой

Я пытаюсь изменить XML-файл на rss-XML Исходный XML-источник выглядит следующим образом:

<news title="Random Title" date="Date and Time" subtitle="The article txt"></news>

Это в конечном итоге выглядит так:

<item>
<pubDate>Date and Time</pubDate>
<title>Random Title</title>
<content:encoded>The article txt</content:encoded>
</item>

Я пытаюсь сделать это, используя python и BeautifulSoup, используя следующий скрипт

from BeautifulSoup import BeautifulSoup
import re

doc = [
'<news post_title="Random Title" post_date="Date and Time" post_content="The article txt">''</news></p>'
    ]
soup = BeautifulSoup(''.join(doc))

print soup.prettify()

posttitle = soup.news['post_title']
postdate = soup.news['post_date']
postcontent = soup.news['post_content']

print "<item>"
print "<pubDate>"
print postdate
print "</pubDate>"
print "<title>"
print posttitle
print "</title>"
print "<content:encoded>"
print postcontent
print "</content:encoded>"
print "</item>"

Проблема здесь в том, что он получает только самую верхнюю строку XML, а не остальные. Кто-нибудь может дать мне несколько советов в этом?

Приветствия:)

Ответы [ 2 ]

0 голосов
/ 16 мая 2011

Кража кода и его исправление:

for news in soup.findAll('news'):
    posttitle = news['post_title']
    postdate = news['post_date']
    postcontent = news['post_content']
    print "<item>"
    print "<pubDate>"
    print postdate
    print "</pubDate>"
    print "<title>"
    print posttitle
    print "</title>"
    print "<content:encoded>"
    print postcontent
    print "</content:encoded>"
    print "</item>"
0 голосов
/ 16 мая 2011

Ваша примерная переменная doc содержит только один элемент <news>.

, но в общем случае вам потребуется циклически просматривать элементы новостей

что-то вроде

for news in soup.findAll('news'):
    posttitle = news['post_title']
    postdate = news['post_date']
    postcontent = news['post_content']
    print "<item>"
    print "<pubDate>"
    print postdate
    print "</pubDate>"
    print "<title>"
    print posttitle
    print "</title>"
    print "<content:encoded>"
    print postcontent
    print "</content:encoded>"
    print "</item>"
...