Я извлекаю текст с веб-страницы и записываю содержимое в файл:
import requests
from inscriptis import get_text
from bs4 import BeautifulSoup
page = requests.get(r'http://www3.asiainsurancereview.com//News/View-NewsLetter-Article/id/42528/Type/eDaily/Technology-First-round-of-the-pre-launch-of-the-Ydentity-ICO-starts-today')
soup = BeautifulSoup(page.text, 'lxml')
html = soup.find(class_='article-wrap')
text = get_text(html.text)
print(text)
articleFile = open('test.txt', 'w')
articleFile.write(text)
articleFile.close()
Он печатает содержимое на экране очень хорошо, но выдает ошибку Unicode при записи содержимого в файл:
UnicodeEncodeError Traceback (most recent call last)
<ipython-input-67-859d4647d5eb> in <module>()
10
11 articleFile = open('test.txt', 'w')
---> 12 articleFile.write(text)
13 articleFile.close()
UnicodeEncodeError: 'cp950' codec can't encode character '\u2122' in position 51: illegal multibyte sequence
При выводе содержимого на консоль я увидел, что в статье есть некоторые символы товарных знаков (TM).Итак, я попытался сделать это:
text=text.encode("utf-8")
но я все еще получаю ошибку, хотя и другую:
TypeError Traceback (most recent call last)
<ipython-input-68-3f30355ab29c> in <module>()
12 text=text.encode("utf-8")
13
---> 14 articleFile.write(text)
15
16 articleFile.close()
TypeError: write() argument must be str, not bytes
Я пробовал следующее, нобезрезультатно:
text = get_text(html.text)
from unidecode import unidecode
def remove_non_ascii(text):
return unidecode(str(text, encoding = "utf-8"))
articleFile = open('test.txt', 'w')
articleFile.write(text)
articleFile.close()
Выдает следующую ошибку:
TypeError Traceback (most recent call last)
<ipython-input-70-ff7e6a098308> in <module>()
20
21
---> 22 articleFile.write(remove_non_ascii(text))
23
24 articleFile.close()
<ipython-input-70-ff7e6a098308> in remove_non_ascii(text)
9 from unidecode import unidecode
10 def remove_non_ascii(text):
---> 11 return unidecode(str(text, encoding = "utf-8"))
12
13 articleFile = open('test.txt', 'w')
TypeError: decoding str is not supported
Я также пробовал это:
if isinstance(text, str):
text = text
else:
text = text.decode(encoding)
decoded = True
articleFile.write(text)
articleFile.close()
, и это дает исходную ошибку (такв принципе ничего не делает):
UnicodeEncodeError Traceback (most recent call last)
<ipython-input-71-f0c817f013af> in <module>()
20
21
---> 22 articleFile.write(text)
23
24 articleFile.close()
UnicodeEncodeError: 'cp950' codec can't encode character '\u2122' in position 51: illegal multibyte sequence
как это исправить?