2012-03-18 2 views
1

У меня есть документ, который имеет два типа содержимого: text/xml и text/html. Я хотел бы использовать BeautifulSoup для анализа документа и в конечном итоге с чистой текстовой версией. Документ начинается как кортеж, поэтому я использую функцию rep, чтобы превратить ее во что-то, что распознает BeautifulSoup, а затем, используя find_all, найти только текст/html-бит документа, выполнив поиск разделов, например:Получение чистого текста из текстовых/html-документов с помощью BeautifulSoup

soup = BeautifulSoup(repr(msg_data)) 
text = soup.html.find_all("div") 

затем я поворачиваюсь текст обратно в строку, сохранив его в переменной, а затем включить его в объект супа и вызова get_text на него, например, так:

str_text = str(text) 
soup_text = BeautifulSoup(str_text) 
soup_text.get_text() 

Однако, что затем изменяет кодирование в Юникод, например:

u'[9:16 PM\xa0Erica: with images, \xa0\xa0and that seemed long to me anyway, 9:17  
PM\xa0me: yeah, \xa0Erica: so feel free to make it shorter, \xa0\xa0or rather, please do, 
9:18 PM\xa0nobody wants to read about that shit for 2 pages, \xa0me: :), \xa0Erica: while 
browsing their site, \xa0me: srsly, \xa0Erica: unless of course your writing is magic, 
\xa0me: My writing saves drowning puppies, \xa0\xa0Just plucks him right out and gives 
them a scratch behind the ears and some kibble, \xa0Erica: Maine is weird, \xa0me: haha]' 

При попытке перекодировать его в UTF-8, например, так:

soup.encode('utf-8') 

Я вернулся к неанализируемому типу.

Я хотел бы перейти к тому, что у меня есть чистый текст, сохраненный как строка, тогда я могу найти конкретные вещи в тексте (например, «щенки» в тексте выше).

В принципе, я бегу кругами здесь. Может ли кто-нибудь помочь? Как всегда, большое вам спасибо за любую помощь, которую вы можете дать.

ответ

2

Кодировка не разрушена; это именно то, что должно быть. '\xa0' - Unicode для неразрывного пространства.

Если вы хотите кодировать это (Unicode) строку как ASCII, вы можете сказать кодек игнорировать любой символ он не понимает:

>>> x = u'[9:16 PM\xa0Erica: with images, \xa0\xa0and that seemed long to me anyway, 9:17 PM\xa0me: yeah, \xa0Erica: so feel free to make it shorter, \xa0\xa0or rather, please do, 9:18 PM\xa0nobody wants to read about that shit for 2 pages, \xa0me: :), \xa0Erica: while browsing their site, \xa0me: srsly, \xa0Erica: unless of course your writing is magic, \xa0me: My writing saves drowning puppies, \xa0\xa0Just plucks him right out and gives them a scratch behind the ears and some kibble, \xa0Erica: Maine is weird, \xa0me: haha]' 
>>> x.encode('ascii', 'ignore') 
'[9:16 PMErica: with images, and that seemed long to me anyway, 9:17 PMme: yeah, Erica: so feel free to make it shorter, or rather, please do, 9:18 PMnobody wants to read about that shit for 2 pages, me: :), Erica: while browsing their site, me: srsly, Erica: unless of course your writing is magic, me: My writing saves drowning puppies, Just plucks him right out and gives them a scratch behind the ears and some kibble, Erica: Maine is weird, me: haha]' 

Если у вас есть время, вы должны смотреть Ned Батчелдер недавний видео Pragmatic Unicode. Это сделает все ясным и простым!

+0

Да, это пришло мне в голову, поскольку я опубликовал его, что «разрушенный» немного силен, редактируя его сейчас. И спасибо за видео, я посмотрю. Есть ли у вас какие-либо текстовые ресурсы, которые я мог бы также изучить (я понимаю, что это просто поиск в google, но есть ли какие-либо вам особенно понравившиеся?) – spikem

+0

@spikem что вы ожидаете? У вас есть строка с не-ASCII-символами (неразрывное пространство). Вы не можете просто отмахнуться от них. – katrielalex

+0

Не думаю, что я спросил или ожидал, что они будут отмахиваться, я просто не совсем знаком с Юникодом, поэтому я пришел сюда, чтобы спросить. – spikem

Смежные вопросы