как «очистить» все записи в ленте feedparser

Я сделал резервную копию своего блога в формате Google XML. Это довольно долго. До сих пор я сделал это:

>>> import feedparser
>>> blogxml = feedparser.parse('blog.xml')
>>> type(blogxml)
<class 'feedparser.FeedParserDict'>

В книге, которую я читаю, автор делает это:

>>> import feedparser
>>> llog = feedparser.parse("http://languagelog.ldc.upenn.edu/nll/?feed=atom")
>>> llog['feed']['title'] u'Language Log'
>>> len(llog.entries) 15
>>> post = llog.entries[2]
>>> post.title u"He's My BF"
>>> content = post.content[0].value
>>> content[:70] u'<p>Today I was chatting with three of our visiting graduate students f'
>>> nltk.word_tokenize(nltk.html_clean(content))

И это работает для меня на основе записи за записью. Как видите, у меня уже есть способ очистки HTML с помощью NLTK. Но что я действительно хочу, так это взять все записи, очистить их от HTML (что я уже знаю, как это сделать, и не спрашиваю, как это сделать, пожалуйста, прочитайте вопрос немного внимательнее) и записать их в файл как строка открытого текста. Что больше связано с правильным использованием feedparser. Есть ли простой способ сделать это?

Обновлять:

Как оказалось, я все еще не приблизился к тому, чтобы найти простой способ сделать это. Из-за моей некомпетентности в python я был вынужден сделать что-то немного уродливое.

Вот что я думал сделать:

import feedparser
import nltk

blog = feedparser.parse('myblog.xml')

with open('myblog','w') as outfile:
    for itemnumber in range(0, len(blog.entries)):
        conts = blog.entries[itemnumber].content
        cleanconts = nltk.word_tokenize(nltk.html_clean(conts))
        outfile.write(cleanconts)

Итак, большое спасибо, @Rob Cowie, но ваша версия (которая выглядит великолепно) не сработала. Мне жаль, что я не указал на это раньше и принял ответ, но у меня не так много времени для работы над этим проектом. Материал, который я разместил ниже, - это все, что я мог приступить к работе, но я оставляю этот вопрос открытым на случай, если у кого-то есть что-то более элегантное.

import feedparser
import sys

blog = feedparser.parse('myblog.xml')
sys.stdout = open('blog','w')

for itemnumber in range(0, len(blog.entries)):
    print blog.entries[itemnumber].content

sys.stdout.close()

затем я CTRL-D вышел из интерпретатора, потому что я понятия не имел, как закрыть открытый файл, не закрывая стандартный вывод Python. Потом снова зашел в интерпретатор, открыл файл, прочитал файл и почистил оттуда HTML. (кстати, nltk.html_clean — это опечатка в онлайн-версии самой книги NLTK... на самом деле это nltk.clean_html). То, что я закончил, было почти, но не совсем открытым текстом.


person magnetar    schedule 29.06.2011    source источник
comment
возможный дубликат Извлечение текста из файла HTML с помощью Python   -  person Andreas Jung    schedule 29.06.2011
comment
@Sentinel, это не дубликат ... мой вопрос больше связан с парсером каналов. я знаю, как чистить HTML, и я уже показал, что могу это сделать. Я просто не знаю, как это сделать для каждой записи с помощью feedparser.   -  person magnetar    schedule 03.07.2011


Ответы (1)


import feedparser
llog = feedparser.parse("http://languagelog.ldc.upenn.edu/nll/?feed=atom")

with open('myblog.txt', 'w') as outfile:
    for entry in llog.entries:
        ## Do your processing here
        content = entry.content[0].value
        clean_content = nltk.word_tokenize(nltk.html_clean(content))
        outfile.write(clean_content)

По сути, вам нужно открыть файл, перебрать записи (feed.entries), обработать запись по мере необходимости и записать соответствующее представление в файл.

Я не делаю никаких предположений о том, как вы хотите разграничить содержимое сообщения в текстовом файле. Этот фрагмент также не записывает заголовок сообщения или какие-либо метаданные в файл.

person Rob Cowie    schedule 03.07.2011
comment
Я считаю, что вам нужно перебирать записи, делая что-то вроде этого сообщения в блоге: frizzletech.blogspot.com/2011/02/ ... вы не можете просто написать post.content[0]... - person magnetar; 03.08.2011
comment
@магнетар; Вы заметили ошибку в моем примере. Я просматриваю записи, но ссылка на post вызовет ошибку NameError. Ошибка копирования/вставки, я думаю. - person Rob Cowie; 03.08.2011