使用bs4解析html时出现意外结果

2024-09-28 23:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python 3.8.2中尝试了以下代码:

from bs4 import BeautifulSoup
import urllib.request

html = urllib.request.urlopen(
    'https://vietnamnet.vn/').read()

soup = BeautifulSoup(html, "html.parser").encode("utf-8")

print(soup.title)

但我收到:

enter image description here

而不是预期的:<title>Báo VietNamNet - Tin tức online, tin nhanh Việt Nam và thế giới</title>

我做错了什么?我该如何修复它

我必须使用.encode("utf-8"),因为html字符串包含unicode字符。它对汤有影响吗

谢谢


Tags: 代码fromhttpsimporttitlerequesthtmlurllib
3条回答

在读取url后,您应该使用如下所示的适当编码格式对其进行解码

from urllib import request
from bs4 import BeautifulSoup
import urllib.request

html = urllib.request.urlopen(
    'https://vietnamnet.vn/').read().decode('utf8')

soup = BeautifulSoup(html, "html.parser")
title = soup.find('title')

print("title is :", title)

当您在解析器上运行.encode()时,您正在为soup分配一个字节字符串。解析器完全丢失,因为.encode()返回一个字节字符串

bs4应该为您处理字符集

soup = BeautifulSoup(html, "html.parser")
print(soup.title)

输出:

>>> from bs4 import BeautifulSoup
>>> import urllib.request
>>> html = urllib.request.urlopen(
...     'https://vietnamnet.vn/').read()

>>> soup = BeautifulSoup(html, "html.parser")
>>> print(soup.title)
<title>Báo VietNamNet - Tin tức online, tin nhanh Việt Nam và thế giới</title>
>>> 
from bs4 import BeautifulSoup
import urllib.request

html = urllib.request.urlopen(
    'https://vietnamnet.vn/').read().decode("utf-8")

soup = BeautifulSoup(html, "html.parser")

title = soup.title
print(title)
print(title.string)

你必须在阅读时解码

相关问题 更多 >