首页 > 解决方案 > URL open , decode 编码错误 TypeError: a bytes-like object is required, not 'str'

问题描述

我正在关注一个教程和下一段代码:

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'

然而在文档中,我看到 encode 是一个字符串方法。那么为什么我需要类似字节的对象呢?如果这不是这样做的方法,我该如何删除文本中的特殊字符?

我环顾四周,但我遇到的答案对我没有帮助,或者我至少不明白。

标签: pythonencodingbeautifulsoup

解决方案


您的问题在于替换而不是编码。您正在使用编码将字符串转换为字节格式,然后使用字符串而不是字节替换。

如果没有示例 URL 来测试它,我不确定您会期望什么输出,但请尝试将 return 语句替换为;

return mytext.encode('ascii', errors='replace').replace(b"?", b" ")

推荐阅读