gpt4 book ai didi

python - BeautifulSoup 汉字编码错误

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:34 25 4
gpt4 key购买 nike

我正在尝试识别并保存特定网站上的所有标题,并不断收到我认为是编码错误的内容。

站点是:http://paper.people.com.cn/rmrb/html/2016-05/06/nw.D110000renmrb_20160506_2-01.htm

当前代码是:

holder = {}  

url = urllib.urlopen('http://paper.people.com.cn/rmrb/html/2016-05/06/nw.D110000renmrb_20160506_2-01.htm').read()

soup = BeautifulSoup(url, 'lxml')

head1 = soup.find_all(['h1','h2','h3'])

print head1

holder["key"] = head1

打印的输出是:

[<h3>\u73af\u5883\u6c61\u67d3\u6700\u5c0f\u5316 \u8d44\u6e90\u5229\u7528\u6700\u5927\u5316</h3>, <h1>\u5929\u6d25\u6ee8\u6d77\u65b0\u533a\uff1a\u697c\u5728\u666f\u4e2d \u5382\u5728\u7eff\u4e2d</h1>, <h2></h2>]

我相当确定那些是 unicode 字符,但我一直无法弄清楚如何说服 python 将它们显示为字符。

我试图在其他地方找到答案。更明确的问题是这个问题: Python and BeautifulSoup encoding issues

建议添加

soup = BeautifulSoup.BeautifulSoup(content.decode('utf-8','ignore'))

然而,这给了我评论中提到的相同错误(“AttributeError:类型对象'BeautifulSoup'没有属性'BeautifulSoup'”)删除第二个“.BeautifulSoup”会导致不同的错误(“RuntimeError:调用 Python 对象时超出最大递归深度”)。

我也试过这里建议的答案: Chinese character encoding error with BeautifulSoup in Python?

通过分解对象的创建

html = urllib2.urlopen("http://www.515fa.com/che_1978.html")
content = html.read().decode('utf-8', 'ignore')
soup = BeautifulSoup(content)

但这也产生了递归错误。任何其他提示将不胜感激。

谢谢

最佳答案

解码使用unicode-escape :

In [6]: from bs4 import BeautifulSoup

In [7]: h = """<h3>\u73af\u5883\u6c61\u67d3\u6700\u5c0f\u5316 \u8d44\u6e90\u5229\u7528\u6700\u5927\u5316</h3>, <h1>\u5929\u6d25\u6ee8\u6d77\u65b0\u533a\uff1a\u697c\u5728\u666f\u4e2d \u5382\u5728\u7eff\u4e2d</h1>, <h2></h2>"""

In [8]: soup = BeautifulSoup(h, 'lxml')

In [9]: print(soup.h3.text.decode("unicode-escape"))
环境污染最小化 资源利用最大化

如果您查看源代码,您可以看到数据是 utf-8 编码的:

<meta http-equiv="content-language" content="utf-8" />

对我来说,使用 bs4 4.4.1 只需解码 urllib 返回的内容也能正常工作:

In [1]: from bs4 import BeautifulSoup

In [2]: import urllib

In [3]: url = urllib.urlopen('http://paper.people.com.cn/rmrb/html/2016-05/06/nw.D110000renmrb_20160506_2-01.htm').read()

In [4]: soup = BeautifulSoup(url.decode("utf-8"), 'lxml')

In [5]: print(soup.h3.text)
环境污染最小化 资源利用最大化

当您写入 csv 时,您需要将数据编码utf-8 str:

 .decode("unicode-escape").encode("utf-8")

您可以在将数据保存到字典中时进行编码。

关于python - BeautifulSoup 汉字编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37102776/

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