2 回答
TA贡献1813条经验 获得超2个赞
使用open('AH.html')使用默认编码对文件进行解码,该默认编码可能不是文件的编码。 BeautifulSoup理解 HTML 标头,特别是以下内容表明该文件是 UTF-8 编码的:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
以二进制模式打开文件并BeautifulSoup计算出来:
with open("AH.html","rb") as f:
soup = BeautifulSoup(f, 'html.parser')有时,网站设置的编码不正确。在这种情况下,如果您知道编码应该是什么,您可以自己指定编码。
with open("AH.html",encoding='utf8') as f:
soup = BeautifulSoup(f, 'html.parser')TA贡献1772条经验 获得超6个赞
from bs4 import BeautifulSoup
with open("AH.html") as f:
soup = BeautifulSoup(f, 'html.parser')
tb = soup.find("table")
for item in tb.find_all("tr")[55]:
print(item.text)

我不得不说,您的第一个代码实际上很好并且应该可以工作。
关于第二个代码,您正在尝试decode str哪个是错误的。因为decode函数是为byte object.
我相信您正在使用Windows它的默认编码不是cp1252的地方UTF-8。
您能否运行以下代码:
import sys print(sys.getdefaultencoding()) print(sys.stdin.encoding) print(sys.stdout.encoding) print(sys.stderr.encoding)
并检查你的输出是否是UTF-8或cp1252。
请注意,如果您使用
VSCodewithCode-Runner,请在终端中运行您的代码py code.py
解决方案(来自聊天)
(1) 如果您使用的是 Windows 10
打开控制面板并通过小图标更改视图
单击区域
单击管理选项卡
单击更改系统区域设置...
勾选“Beta:使用 Unicode UTF-8...”框
单击“确定”并重新启动您的电脑
(2)如果你不是Windows 10或者只是不想改变之前的设置,那么在第一段代码中改为open("AH.html"),open("AH.html", encoding="UTF-8")即写:
from bs4 import BeautifulSoup
with open("AH.html", encoding="UTF-8") as f:
soup = BeautifulSoup(f, 'html.parser')
tb = soup.find("table")
for item in tb.find_all("tr")[55]:
print(item.text)
- 2 回答
- 0 关注
- 226 浏览
添加回答
举报
