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

