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条经验 获得超5个赞
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
。
请注意,如果您使用
VSCode
withCode-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 关注
- 102 浏览
添加回答
举报