You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手使用BeautifulSoup爬取HTML时获取到损坏链接的问题

解决HTML爬取中链接出现&的问题

嘿,我来帮你搞定这个链接损坏的问题!

问题原因

你写的测试HTML字符串里包含了HTML实体(比如&、<),这些是HTML里用来表示特殊字符的转义序列。当你直接把这个转义后的字符串传给BeautifulSoup时,它会把&当作普通文本处理,而不是自动转换成&,所以提取出来的href就变成了损坏的格式。

解决方案

有两种简单的方法可以修复这个问题:

方法1:手动解码HTML实体

使用Python自带的html模块里的unescape()方法,先把转义后的HTML字符串解码成正常字符,再传给BeautifulSoup:

from bs4 import BeautifulSoup
import html

# 原始转义后的HTML
html_str = 'text <a href="Transfert.php?Filename=myfile_x86&version=5&param=13" class="nav" style="color: #000000" title = "">Download</a> text'

# 解码HTML实体
decoded_html = html.unescape(html_str)

soup = BeautifulSoup(decoded_html, "html.parser")
for link in soup.find_all('a'):
    print(link.get('href'))

运行这段代码后,你就能得到正确的链接:Transfert.php?Filename=myfile_x86&version=5&param=13

方法2:实际爬取时用请求库自动处理

如果你是从真实网站爬取HTML(而不是手动写测试字符串),用requests这类请求库获取页面时,它会自动帮你解码HTML实体,直接用response.text传给BeautifulSoup就没问题:

import requests
from bs4 import BeautifulSoup

# 替换成你要爬取的真实URL
target_url = "https://example.com/your-page"
response = requests.get(target_url)

soup = BeautifulSoup(response.text, "html.parser")
for link in soup.find_all('a'):
    print(link.get('href'))

原理说明

html.unescape()会把所有HTML实体转换为对应的普通字符:

  • & → &
  • &lt; → <
  • &gt; → >
    这样BeautifulSoup就能正确解析出原始的链接参数了。

内容的提问来源于stack exchange,提问作者ZeroTolerance

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:44:38