как «очистить» все записи в фиде фидпарсера - PullRequest
1 голос
/ 29 июня 2011

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

>>> 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)

Так что, большое спасибо, @Роб Коуи, но ваша версия (которая выглядит великолепно) не сработала.Я чувствую себя плохо из-за того, что не указал на это ранее, и из-за того, что принял ответ, но у меня не так много времени, чтобы работать над этим проектом.Материал, который я изложил ниже, - это все, что я мог бы получить, чтобы работать, но я оставляю этот вопрос открытым, если у кого-то есть что-то более изящное.

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).То, что я закончил, было почти, но не совсем, открытым текстом.

Ответы [ 2 ]

1 голос
/ 03 июля 2011
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), обработать запись как требуется и записать соответствующее представление в файл.

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

0 голосов
/ 29 июня 2011
...