某些韩语字符在刮擦时显示为问号/菱形,我该如何解决这个问题?



我正在用韩语抓取一些文本,在大多数情况下,99.9% 的字符都出现了,但其余的如下所示。

�Z

例如,它应该抓取"고소를해줫어",但在我的输出中,它给了我"고소를해 Z어"。

我知道这是一个编码问题,我只是不知道如何解决这个问题。我读过你可以使用.encode('utf-8')但这并没有解决它。

任何帮助将不胜感激!

为上下文添加了完整代码(初学者程序员,所以请原谅混乱的代码!

import bs4 as bs
import requests
raw_link = input("Enter the article's URL: ")
article_id = raw_link[26:40]
source = "http://comm.news.nate.com/Comment/ArticleComment/list?artc_sq=" + article_id + "&prebest=0&order=O&mid=n1008&domain=&argList=0"
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'}
r = requests.get(source, headers = headers)
html = r.text
soup = bs.BeautifulSoup(html, 'lxml')
upvotes = []
downvotes = []
comment_list = []
user_list = []
numbered_list = [1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20.]
raw_numbered_list = list(map(int, numbered_list))
for url in soup.select('strong[name*="cmt_o_cnt_"]')[3:]:
raw_numbers_up = url.text.strip()
upvotes.append(raw_numbers_up)
for url in soup.select('strong[name*="cmt_x_cnt_"]')[3:]:
raw_numbers_down = url.text.strip()
downvotes.append(raw_numbers_down)
for url in soup.find_all('dd', class_="usertxt")[3:]:
comments = url.text.strip()
comment_list.append(comments)
for url in soup.find_all('span', {'class':['nameui', 't']})[3:]:
user_id = url.text.strip()
user_list.append(user_id)
results = list(zip(raw_numbered_list, upvotes, downvotes, user_list, comment_list))
for number, upvote, downvote, user, comment in results:
replies = ("n{}. [+{}, -{}] {}:n{}".format(number, upvote, downvote, user, comment))
print(replies)

编辑1:我已经在笔记本电脑上测试了相同的代码,但我仍然遇到同样的问题!如果其他人想要检查他们是否遇到相同的问题,请将代码顶部附近的source变量中的整个字符串更改为"http://comm.news.nate.com/Comment/ArticleComment/list?artc_sq=20170818n20195&prebest=0&order=O&mid=n1008&domain=&argList=0",看看是否得到它。

编辑2:可能是我正在使用的user-agent吗?

编辑3:我现在几乎可以肯定这是一个euc-krutf-8的问题。我正在抓取的页面是用euc-kr编码的,所以我感觉我的代码中有一些东西与文本的阅读方式相冲突。

编辑:4我使用我正在抓取的页面运行了chardet模块,它说编码是cp949,所以不像我想象的那样euc-kr。另外,在Spyder而不是PyCharm中测试了代码:发生了同样的问题。

这看起来像一个奇怪的错误。由于大多数韩文字符都正确显示,因此不可能是一个简单的编码问题。看起来更奇怪的是,您的示例将音节 JWEOS ('줫' U+C92B( 替换为替换字符 (' '(,后跟拉丁大写字母 Z ('Z' U+005A(。我无法想象这种Z从何而来,我所知道的任何编码都无法将0xc92b转换为任何后跟0x5a的编码。

我只能想象数据损坏。

最新更新