Python UnicodeEncodeError:处理特殊字符
我正试图删除一个网页。为了处理ASCII以外的所有字符,我编写了这段代码Python UnicodeEncodeError:处理特殊字符,python,python-3.x,unicode,web-scraping,python-unicode,Python,Python 3.x,Unicode,Web Scraping,Python Unicode,我正试图删除一个网页。为了处理ASCII以外的所有字符,我编写了这段代码 mydata = ''.join([i if ord(i) < 128 else ' ' for i in response.text]) mydata=''.join([i if ord(i)
mydata = ''.join([i if ord(i) < 128 else ' ' for i in response.text])
mydata=''.join([i if ord(i)<128 else''表示i in response.text])
并使用漂亮的python库对其进行进一步处理。现在这并不是在处理网页上的一些特殊字符,比如[tick]、[star](这里不能显示图片)。
关于如何转义这些字符并用空格替换它们的任何线索。
现在我有这个错误
UnicodeEncodeError: 'charmap' codec can't encode character '\u2713' in position 62: character maps to <undefined>
UnicodeEncodeError:“charmap”编解码器无法对位置62中的字符“\u2713”进行编码:字符映射到
最好使用Unicode处理所有内容,并仅在存储或传输之前转换为任何特定编码。比如说,
s=u“你好,再见”
如果需要专门用空格替换非ascii字符,可以编写并注册自己的转换错误处理程序,请参阅codecs.register\u error()
使用默认编码为您打开一个文件以写入文本,在您的情况下,该编码没有字符✓代码>(可能是cp1252),因此出现错误。使用支持该文件的编码打开该文件,您就可以:
fp = open('output.txt', 'w', encoding='utf-8')
还请注意:
print("result: "+ str(ele))
如果您的控制台不支持Unicode,则可能会失败,而在Windows下可能不支持Unicode。使用print(ascii(…)
获取ascii安全表示法以进行调试
尝试删除非ASCII字符失败的可能原因是,您在解析HTML之前删除了它们,而不是从解析后获得的值中删除它们。所以一个字面✓
将被删除,但如果像✓如果使用了code>,则它将被单独保留,由bs4解析,并最终成为✓代码>
(我很难过,对Unicode错误的默认反应似乎总是试图完全去除非ASCII字符,而不是修复代码以正确处理它们。)
您还以一种非常奇怪的方式提取文本,使用str()
获取标记,然后尝试挑出标记并删除它们。这是不可靠的,HTML并不是那么容易解析的,这就是为什么BeautifulSoup是一个东西,而且是不必要的,因为您已经有了一个非常好的HTML解析器,它可以为您提供元素中的纯文本(get_text()
)。大部分代码都不是必需的。request已经在为您执行正确的解码,beautifulsoup正在为您执行文本提取,python正在为您执行写入文件时的正确编码:
import requests
from bs4 import BeautifulSoup
#keyterm = input("Enter a keyword to search:")
URL = 'https://www.google.com/search?q=jaguar&num=30'
#NO_OF_LINKS_TO_BE_EXTRACTED = 10
print("Requesting data from %s" % URL)
response = requests.get(URL)
soup = BeautifulSoup(response.text)
#print(soup.prettify())
metaM = soup.findAll("span","st")
#metaM = soup.find("div", { "class" : "f slp" })
with open("output.txt", "w", encoding='utf8') as fp:
for ele in metaM:
print("result: %r" % ele)
fp.write(ele.get_text().replace('\n', ' ') + '\n')
你不需要处理一些特殊的字符。一直使用unicode字符串。@Daniel当我将其写入文件时,它会显示此错误。这就是我问这个问题的原因。如何将其格式化为可以写入文件的格式?这是代码@Daniel的链接
print("result: "+ str(ele))
import requests
from bs4 import BeautifulSoup
#keyterm = input("Enter a keyword to search:")
URL = 'https://www.google.com/search?q=jaguar&num=30'
#NO_OF_LINKS_TO_BE_EXTRACTED = 10
print("Requesting data from %s" % URL)
response = requests.get(URL)
soup = BeautifulSoup(response.text)
#print(soup.prettify())
metaM = soup.findAll("span","st")
#metaM = soup.find("div", { "class" : "f slp" })
with open("output.txt", "w", encoding='utf8') as fp:
for ele in metaM:
print("result: %r" % ele)
fp.write(ele.get_text().replace('\n', ' ') + '\n')