Python 'latin-1' 编解码器无法编码字符 - 如何忽略字符?

这是我的代码的要点。它试图从旧网站获取一些文本。这不是我的,所以我不能改变来源。


from bs4 import BeautifulSoup

import requests


response = requests.get("https://mattgemmell.com/network-link-conditioner-in-lion/")

data = response.text

soup = BeautifulSoup(data, 'lxml')

article = soup.find_all('article')[0]

text = article.find_all('p')[1].text 

print(text)

给出了这个:


“如果你——x80\x99 是使用网络的 Mac 或 iOS 应用程序的开发人员,那么——x80\x99s Mac OS X 10.7 的开发人员工具中的一项新功能——x80\x9cLion——x80\x9d(阅读我对它在卫报)这对你有用。这篇简短的文章描述了它是如何工作的。


我可以用它来转换像 â\x80\x99 这样的部分:


converted_text = bytes(text, 'latin-1').decode('utf-8')

实际上有效。


但是如果你得到文本的不同部分:


text = article.find_all('p')[8].text 

给我:


'\n← 在 Lion 上的文本中查找模式\n在 OS X Lion 上使用 Spaces →\n'


使用bytes(text, 'latin-1')给了我:


'latin-1' 编解码器无法在位置 1 中对字符 '\u2190' 进行编码:序号不在范围内 (256)


我猜是箭头?我怎样才能让它自动忽略和丢弃所有非拉丁字符。


任何想法都会最有帮助!


函数式编程
浏览 481回答 2
2回答

慕桂英546537

您不想忽略这些字符。它们表示您收到的数据已使用错误的字符编码进行解码。在您的情况下requests,错误地猜测编码是latin-1. 真正的编码是在 HTML 响应utf-8的<meta>标签中指定的。requests是一个用于处理 HTTP 的库,它不了解 HTML。由于Content-Type标头未指定编码,因此requests只能猜测编码。BeautifulSoup但是,它是一个用于处理 HTML 的库,它非常擅长检测编码。因此,您希望从响应中获取原始字节并将其传递给BeautifulSoup. IE。from bs4 import BeautifulSoupimport requestsresponse = requests.get("https://mattgemmell.com/network-link-conditioner-in-lion/")data = response.content # we now get `content` rather than `text`assert type(data) is bytessoup = BeautifulSoup(data, 'lxml')article = soup.find_all('article')[0]text = article.find_all('p')[1].text&nbsp;print(text)assert type(text) is strassert 'Mac OS X 10.7 “Lion”' in text

qq_笑_17

使用第三个参数来bytes告诉它如何处理错误:converted_text = bytes(text, 'latin-1', 'ignore')&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^^^^^^你会丢失箭头,但其他一切都完好无损:>>> text = '\n← Find Patterns in text on Lion\nUsing Spaces on OS X Lion →\n'>>> converted_text = bytes(text, 'latin-1', 'ignore')>>> converted_text'\n Find Patterns in text on Lion\nUsing Spaces on OS X Lion \n'以下是有关文档中参数的更多信息 - https://docs.python.org/3.3/howto/unicode.html:errors 参数指定无法根据编码规则转换输入字符串时的响应。此参数的合法值为“strict”(引发 UnicodeDecodeError 异常)、“replace”(使用 U+FFFD、REPLACEMENT CHARACTER)或“ignore”(仅将字符排除在 Unicode 结果之外)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python