我试图得到一个给定的网站上的所有链接,但被一些关于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§=2">Link</a>
它不打印[“。/page?id=123§=2”]
,而是将§
部分视为HTML实体,并在控制台中显示:
["./page?id=123§=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§=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