Python заменить текст - PullRequest
       7

Python заменить текст

0 голосов
/ 07 мая 2018

Здравствуйте, у меня проблемы с заменой всех текстов из HTML.Я хотел сделать нарекание с BeautifulSoup, но оно не заменяет контент, и я получил ошибку при печати контента (не все тексты из HTML были напечатаны)

words = ['Shop','Car','Home','Generic','Elements']
page = urllib.urlopen("html1/index.html").read()
soup = BeautifulSoup(page, 'html.parser')
texts = soup.findAll(text=True)
for i in texts :
    if i == words :
       i = '***'
    print i

Кто-нибудь знает, как это исправить?

Ошибка:

Traceback (most recent call last):
File "replacing.py", line 28, in <module>
print i
File "F:\Python\Python27\lib\encodings\cp852.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2019' in position 25: character maps to <undefined>

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

У вас есть две основные проблемы здесь. Первая - это проблема кодировки, когда вы пытаетесь напечатать непечатный символ. Для этого вы можете использовать ответы, найденные в:

UnicodeEncodeError: кодек 'charmap' не может кодировать - символ отображается на , функция печати

Или, для более подробного объяснения:

Python, Unicode и консоль Windows (Теперь, когда я посмотрю на это больше, оно, вероятно, устарело, но все еще интересно читать).

Однако у вас также есть логическая проблема с вашим кодом.

if i == words:

Эта строка не проверяет, найден ли i 1018 * найденный в словах, но вместо этого сравнивает i со списком слов, а это не то, что вам нужно. Я бы порекомендовал внести следующие изменения:

words = {'Shop','Car','Home','Generic','Elements'}

for i in texts:
    if i in words:
        i = '***'

Преобразование words в set допускает средний O(1) поиск и с помощью if i in words проверяет, найден ли i в словах.

0 голосов
/ 07 мая 2018

Похоже, что один из символов, которые вы пытаетесь напечатать, не найден в кодеке, который Python использует для печати сообщений. То есть у вас есть данные для символа, но вы не знаете, каким он должен быть, и поэтому не можете его распечатать. Простое преобразование HTML в формат Unicode должно решить вашу проблему.

Хороший вопрос о том, как это сделать:

Преобразование сущностей HTML в Unicode и наоборот

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...