首页 > 解决方案 > 如何阻止 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&sect=2"],而是将&sect部件视为 HTML 实体并在控制台中显示:

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

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

标签: pythonhtmlbeautifulsoup

解决方案


这是一个

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

推荐阅读