如何从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
相关产品推荐
相关产品推荐

