URL打开,解码编码错误TypeError:需要类似字节的对象,而不是'str'

时间:2018-10-09 09:34:08

标签: python encoding beautifulsoup

我正在学习一个教程和下一段代码:

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'

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

我环顾四周,但是遇到的答案并没有帮助我,或者至少我没有听懂。

1 个答案:

答案 0 :(得分:0)

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

我不确定如果没有示例URL对其进行测试,您会期望得到什么输出,但是请尝试将return语句替换为;

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