Я немного перебираю веб-страницы, получаю текст из таблиц. Ошибки Unicode продолжают появляться, и когда я кодирую в utf8, я получаю кучу b'
и b'\xc2\xa0'
, смешанных с моими результатами, есть ли способ обойти необходимость кодировать и получать текст только из таблиц?
Traceback (most recent call last): File "c:\...\...\...", line 15, in
<module> print(rows) File
"C:\...\...\...\Python\Python37\lib\encodings\cp1252.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 'charmap' codec can't encode character '\u2612' in position 3: character maps to <undefined>
Когда я использую замену, я получаю сообщение об ошибке типа:
TypeError: a bytes-like object is required, not 'str'
независимо от того, использую я str()
или нет. Я попытался перебрать и распечатать только те элементы, которые можно преобразовать в строки, но снова появляется ошибка Unicode
test = 'https://www.sec.gov/Archives/edgar/data/789019/000156459019001392/msft-10q_20181231.htm'
import re
import requests
from urllib.request import urlopen
from bs4 import BeautifulSoup
page = urlopen(test).read()
soup = BeautifulSoup(page, 'lxml')
tables = soup.findAll('table')
for table in tables:
for row in table.findAll('tr'):
for cel in row.findAll('td'):
if str(cel.getText().encode('utf-8').strip()) != "b'\\xc2\\xa0'":
print(str(cel.getText().encode('utf-8').strip())
#print(str(cel.getText().encode('utf-8').strip().replace('\\xc2\\xa0', '').replace('b\'', '')
Фактические результаты:
b'\xe2\x98\x92'
b'QUARTERLY REPORT PURSUANT TO SECTION 13 OR 15(d) OF THE SECURITIES EXCHANGE ACT OF 1934'
b'\xe2\x98\x90'
b'TRANSITION REPORT PURSUANT TO SECTION 13 OR 15(d) OF THE SECURITIES EXCHANGE ACT OF 1934'
b'Washington'
b'\xc2\xa0'
b'91-1144442'
b'(State or other jurisdiction of\nincorporation or organization)'
...
...
Ожидаемые результаты:
'QUARTERLY REPORT PURSUANT TO SECTION 13 OR 15(d) OF THE SECURITIES EXCHANGE ACT OF 1934'
'TRANSITION REPORT PURSUANT TO SECTION 13 OR 15(d) OF THE SECURITIES EXCHANGE ACT OF 1934'
'Washington'
'91-1144442'
'(State or other jurisdiction of\nincorporation or organization)'
...
...