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

如何从a标签提取href?并从contents变量提取href与标签外文本

解决BeautifulSoup提取href与标签外文本的问题

嘿,我来帮你搞定这个爬虫需求!咱们一步步调整你的代码,既能拿到a标签的href属性,又能提取到标签外的文本内容。

问题分析

你原来的代码用renderContents()会输出原始的HTML片段,没法直接提取我们需要的结构化数据。咱们改用BeautifulSoup自带的节点操作方法,就能轻松分离文本和链接信息。

修改后的代码

from urllib.request import Request, urlopen
from bs4 import BeautifulSoup as bs

def scrape():
    req = Request('https://www.muddywatersresearch.com/research/', headers={'User-Agent': 'Mozilla/5.0'})
    webpage = bs(urlopen(req).read(), 'html.parser')
    info = webpage.find_all("td", {"class": "first"})
    
    for td in info:
        # 提取td标签外的文本(排除a标签内的内容)
        # 方法1:筛选非a节点的文本并拼接
        outer_text = ''.join([text.strip() for text in td.stripped_strings if text.parent.name != 'a'])
        # 方法2:复制节点后移除a标签再取文本(适合复杂结构)
        # td_copy = td.copy()
        # for a in td_copy.find_all('a'):
        #     a.decompose()
        # outer_text = td_copy.get_text(strip=True)
        
        # 提取a标签的href属性,做容错处理
        a_tag = td.find('a')
        href = a_tag['href'] if a_tag else '无链接'
        
        # 格式化输出结果
        print(f"标签外文本: {outer_text}")
        print(f"链接地址: {href}")
        print("---")

scrape()

关键代码说明

  • 提取标签外文本:提供了两种实用方法,第一种通过遍历文本片段筛选出不属于a标签的内容;第二种是复制原节点并移除所有a标签后取文本,你可以根据页面实际结构选择更适配的方式。
  • 提取href属性:用find('a')定位td内的a标签,通过字典取值获取href,同时增加了判断逻辑,避免遇到无a标签的td时抛出异常。
  • 结果格式化:用f-string让输出内容更清晰,方便对应查看文本和链接的关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:38:12