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

使用BeautifulSoup爬取URL,多重过滤仍出现None值的原因

问题原因与解决办法

嘿,我来帮你搞明白为啥这两种过滤方式没效果!

你的核心问题是搞反了过滤的对象:

  • BSOBJ.find_all('a')返回的是页面中所有<a>标签的BeautifulSoup对象列表,这里面根本不会有None值,所以你写的if link is not None或者if link != None完全是在做无用功,根本触发不到过滤条件。
  • 列表里出现的None,其实是link.get('data-href')返回的结果——当某个<a>标签没有data-href这个属性时,get()方法找不到对应值就会默认返回None,这才是你要过滤的目标!

正确的两种写法

写法1:直接过滤属性值

先获取所有data-href的值,再过滤掉其中的None:

list_links = [href for href in (link.get('data-href') for link in BSOBJ.find_all('a')) if href is not None]

写法2:先检查标签是否有该属性

先判断<a>标签是否包含data-href属性,再获取对应值:

list_links = [link.get('data-href') for link in BSOBJ.find_all('a') if link.has_attr('data-href')]

这两种写法都能彻底把None值从列表里剔除,不用再手动删除啦!

内容的提问来源于stack exchange,提问作者Tomás R. Pita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:26:15