Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python UnicodeEncodeError:处理特殊字符_Python_Python 3.x_Unicode_Web Scraping_Python Unicode - Fatal编程技术网

Python UnicodeEncodeError:处理特殊字符

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)

我正试图删除一个网页。为了处理ASCII以外的所有字符,我编写了这段代码

    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之前删除了它们,而不是从解析后获得的值中删除它们。所以一个字面
将被删除,但如果像
,则它将被单独保留,由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')