Получение чистого текста из текстовых / HTML-документов с помощью BeautifulSoup - PullRequest
1 голос
/ 18 марта 2012

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

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

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

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

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

1 Ответ

2 голосов
/ 18 марта 2012

Кодировка не разрушена;это именно то, что должно быть.'\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]'

Если у вас есть время, вам следует посмотреть недавнее видео Неда Батчелдера Pragmatic Unicode .Все будет понятно и просто!

...