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

使用BeautifulSoup无法获取</blockquote>后的目标链接与内容求助

解决BeautifulSoup无法获取闭合标签外内容的问题

看起来你遇到的是HTML结构畸形导致的解析截断问题——原HTML里的<p>标签内部混入了不属于它的</blockquote></blockquote>闭合标签,还存在未闭合的<strong>标签,BeautifulSoup默认的html.parser会自动修复这种不规范结构,提前闭合了<p>标签,所以你通过find('p', align="left")拿到的rounds对象只包含到</p>之前的内容,后面的目标链接自然不在这个对象范围内。

给你几个可行的解决方案:

1. 换用更宽容的HTML解析器

html.parser对畸形HTML的容错性一般,换成lxml或者html5lib(需要先安装对应库:pip install lxml / pip install html5lib),它们能更好地处理不规范的HTML结构:

import requests
from bs4 import BeautifulSoup

page = requests.get(site)
# 改用lxml解析器(或替换成'html5lib')
soup = BeautifulSoup(page.content, 'lxml')
rounds = soup.find('p', align="left")
# 尝试重新获取所有a标签,包括之前截断的内容
matches_links = rounds.find_all('a')
# 或者直接定位目标链接
target_link = soup.find('a', href="link i want")
if target_link:
    print("目标文本:", target_link.get_text(strip=True))
    print("目标链接:", target_link['href'])

2. 跳过p标签,直接定位目标链接

既然原结构的问题导致p标签无法包含所有内容,不如直接搜索你需要的目标元素:

# 根据链接地址精准查找
target_a = soup.find('a', href="link i want")
# 或者根据文本内容模糊匹配(处理文本中的空格问题)
target_a = soup.find('a', string=lambda text: text and "text i want" in text.strip())

if target_a:
    target_text = target_a.get_text(strip=True)
    target_href = target_a['href']
    print(f"找到目标:文本={target_text},链接={target_href}")

3. 遍历所有a标签筛选

如果目标链接的特征不唯一,也可以遍历页面所有a标签,逐一筛选符合条件的:

all_links = soup.find_all('a')
for link in all_links:
    link_text = link.get_text(strip=True)
    link_href = link['href']
    if link_text == "text i want" and link_href == "link i want":
        print("找到目标链接:", link_href, "对应文本:", link_text)
        break

这些方法应该能帮你顺利获取到目标链接和对应文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:07:46