как проанализировать текст в кодировке HTML из всех строк в определенном столбце в файле CSV?

#python #python-3.x

#python #python-3.x

Вопрос:

Вот изображение того, как данные выглядят в столбце «содержимое»: Вот изображение того, как данные выглядят в столбце quot;содержимоеquot;

Я загрузил файл CSV в pandas. В столбце «Содержимое» каждая строка содержит текст в кодировке html различной длины. Некоторые из них содержат более 500 слов. Моя цель — избавиться от всей HTML-кодировки во всех строках столбца «содержимое».

Может кто-нибудь помочь получить код для этого?

У меня пока есть только это…

 dataset = pd.read_csv('NuggetData.csv')
  

«Содержимое» — это 9-й столбец (если первый равен 0) в таблице, и в нем около 17 000 строк.

Пример текста внутри столбца содержимого (кстати, это не полный текст строки 1, он даже длиннее):

Строка 1:

 <h2>A bold new toy commercial debuted last week, and it's got the internet talking.</h2><div><div data-reactroot="" class="push-wrapper--mobile" data-card="image"><img src="//i.upworthy.com/nugget/57e9536dca7292001f000008/attachments/toygif1-65977b573530a2407626f8a4aad22a4e.gif" class=""><div class="image-caption"><p>GIFs via Smyths Toys.</p></div></div></div><h2>In some ways, it was pretty standard because a boy's love for rocket ships isn't all that unique.</h2><div><div data-reactroot="" class="push-wrapper--mobile" data-card="image"><img src="//i.upworthy.com/nugget/57e953b8e2d8c7001f00002d/attachments/toygif2-6ef9ddacf2a56c63a84d773645450563.gif" class=""></div></div><h2>Neither is his love of Legos.</h2><div><div data-reactroot="" class="push-wrapper--mobile" data-card="image"><img src="//i.upworthy.com/nugget/57e95558e2d8c7002b000025/attachments/toygif4-4f0829dad2602f7dd6ed52813e6791a5.gif" class=""></div></div><h2>Plenty of boys like to (pretend to) drive motorcycles, too.</h2><div><div data-reactroot="" class="push-wrapper--mobile" data-card="image"><img src="//i.upworthy.com/nugget/57e95595ca72920034000029/attachments/toygif5-e1824fae63099796ac2947ba76ea185d.gif" class=""></div></div><h2>But ... playing dress-up as a queen in front of a crowd of cheering supporters?</h2><div><div data-reactroot="" class="push-wrapper--mobile" data-card="image"><img src="//i.upworthy.com/nugget/57e954c0e2d8c7002d00001e/attachments/toygif3-21ea60c5917fd80da817919c655a4c96.gif" class=""></div></div><p><em>That's</em> extraordinary. </p><h2>
  

Ответ №1:

Я предлагаю вам использовать BeautifulSoup (библиотека) и list comprehensions для анализа вашего столбца содержимого.

Сначала вам нужно знать, какой контент вам нужен из HTML. Я делаю некоторые предположения, чтобы объяснить:

  1. Вы ищете содержимое в теге DIV ( findAll('div') )
  2. Допустим, вы ищете текст внутри предыдущего тега ( .text )
  3. Вам нужен текст из третьего тега DIV ( [2] )
 from bs4 import BeautifulSoup as bs

dataset['parsed_content'] = [bs(x,'lxml').findAll('div')[2].text for x in dataset['content']]
  

с предыдущим кодом вы добавляете новый столбец в dataframe, ни в коем случае содержимое не будет изменено.

зависимости BeautifulSoup и lxml могут быть установлены с помощью pip.

Комментарии:

1. Я запустил этот отправленный вами код, я получаю: IndexError: индекс списка вне диапазона,

2. @Azh588 не могли бы вы расширить свой вопрос примером некоторых строк столбца «содержимое». Убедитесь, что вы адаптируете код к своему собственному случаю.

3. Я прикрепил картинку того, как текст выглядит в столбце содержимого, вы хотите увидеть больше строк?

4. Объект ResultSet не имеет атрибута ‘text’. Вероятно, вы обрабатываете список элементов как один элемент. Вы вызывали find_all(), когда хотели вызвать find()?