使用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
相关产品推荐
相关产品推荐

