gpt4 book ai didi

python - 抓取时某些韩文字符显示为问号/菱形,我该如何解决这个问题?

转载 作者:太空宇宙 更新时间:2023-11-03 14:53:33 35 4
gpt4 key购买 nike

我正在抓取一些韩语文本,大部分字符显示了 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:这可能是我正在使用的用户代理吗?

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

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

最佳答案

这看起来像是一个奇怪的错误。由于大多数 HANGUL 字符都可以正确显示,因此这不可能是简单的编码问题。看起来更奇怪的是,您的示例将 SYLLABLE JWEOS ('줫' U+C92B) 替换为替换字符 ('�') ,后跟拉丁大写字母 Z ('Z' U+005A) 。我无法想象Z在哪里可以得出,我所知道的编码都不能将 0xc92b 转换为 0x5a 后面的任何内容。

我只能想象数据损坏。

关于python - 抓取时某些韩文字符显示为问号/菱形,我该如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45755827/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com