#python #python-3.x
#python #python-3.x
Вопрос:
Вот изображение того, как данные выглядят в столбце «содержимое»:
Я загрузил файл 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. Я делаю некоторые предположения, чтобы объяснить:
- Вы ищете содержимое в теге DIV (
findAll('div')
) - Допустим, вы ищете текст внутри предыдущего тега (
.text
) - Вам нужен текст из третьего тега 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()?