Я поддержал свой блог в формате 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 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. Есть ли простой способ сделать это?
Обновить:
Похоже, я все еще не ближе, чтобы найти легкий способ сделать это. Из-за моей неумелости с питоном я был вынужден сделать что-то немного уродливое.
Это то, что я думал, что буду делать:
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'ed из интерпретатора, потому что я понятия не имел, как закрыть открытый файл, не закрывая stdout Python. Затем я снова вошел в интерпретатор, открыл файл, прочитал файл и очистил HTML оттуда. (nltk.html_clean - опечатка в онлайн-версии самой книги NLTK, кстати... это на самом деле nltk.clean_html). То, что я закончил, было почти, но не совсем, открытым текстом.
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
записи (feed.entries
), обработать запись по мере необходимости и записать соответствующее представление в файл.
Я не делаю никаких предположений о том, как вы хотите разграничить содержимое сообщения в текстовом файле. Этот фрагмент также не записывает заголовок сообщения или любые метаданные в файл.
post
поднимет NameError. Ошибка копирования / вставки, я думаю.