URL открыт, декодировать кодировать ошибку TypeError: требуется байтоподобный объект, не 'str' - PullRequest
0 голосов
/ 09 октября 2018

Я слежу за учебником и следующим фрагментом кода:

import urllib.request as url

def getTextWaPo(URL):
    page = url.urlopen(URL).read().decode('utf8')
    soup = BeautifulSoup(page, 'lxml')
    mytext = ' '.join(map(lambda p: p.text, soup.find_all('article')))
    return mytext.encode('ascii', errors='replace').replace("?", " ")

возвращает:

TypeError: a bytes-like object is required, not 'str'

Тем не менее, в документации я вижу, что кодирование - это строковый метод.Так зачем мне байтоподобный объект?Как убрать специальные символы в тексте, если это не так?

Я оглянулся, но ответы, которые я нашел, мне не помогли, или я по крайней мере не помогаюполучите это.

1 Ответ

0 голосов
/ 09 октября 2018

Ваша проблема в замене, а не в кодировании.Вы конвертируете строку в формат байтов с помощью кодировки, а затем используете замену на строки, а не байты.

Я не уверен, какой вывод вы ожидаете без примера URL, чтобы проверить его, но попробуйтезамена оператора возврата на;

return mytext.encode('ascii', errors='replace').replace(b"?", b" ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...