提问者:小点点

如何阻止BeautifulSoup将HTML实体解码成符号


我试图得到一个给定的网站上的所有链接,但被一些关于HTML实体的问题卡住了。 下面是我使用BeautifulSoup抓取网站的代码:

from bs4 import BeautifulSoup
import requests
    .
    .

baseRequest = requests.get("https://www.example.com", SOME_HEADER_SETTINGS)
soup = BeautifulSoup(baseRequest.content, "html.parser")
pageLinks = []

for anchor in soup.findAll("a"):
    pageLinks.append(anchor["href"])
    .
    .

print(pageLinks)

当代码看到这类元素时就会有问题:

<a href="./page?id=123&sect=2">Link</a>

它不打印[“。/page?id=123§=2”],而是将§部分视为HTML实体,并在控制台中显示:

["./page?id=123§=2"]

有没有办法防止这种情况发生?


共2个答案

匿名用户

from bs4 import BeautifulSoup
import requests
import html
    .
    .

baseRequest = requests.get("https://www.example.com", SOME_HEADER_SETTINGS)
soup = BeautifulSoup(baseRequest.content, "html.parser")
pageLinks = []

for anchor in soup.findAll("a"):
    pageLinks.append(anchor["href"])
    .
    .

print(html.unescape(pageLinks))

因为我看不到你的全部代码。 为了防止这些字符,因为您是以HTML的形式打印的,我建议您利用HTML.Unescape from HTML。 对你的案子可能有帮助。

匿名用户

这里有一个

from bs4 import BeautifulSoup

soup = BeautifulSoup('<a href="./page?id=123&sect=2">Link</a>', "html.parser")
pageLinks = []

for anchor in soup.findAll("a"):
    pageLinks.append(anchor["href"])


uncoded = ''.join(i for i in pageLinks).encode('utf-8')
decoded = ''.join(map(lambda x: chr(ord(x)),''.join(i for i in pageLinks)))
print('uncoded =',uncoded)
print('decoded =',decoded)

输出量

uncoded = b'./page?id=123\xc2\xa7=2'
decoded = ./page?id=123§=2

相关问题