使用BeautifulSoup提取<small>标签文本时循环返回空作者列表怎么办?
问题解决方法
核心问题原因
- 你的
quote_text变量选取的节点范围错误:如果quote_text是所有class="text"的<span>元素集合,那么这类节点内部仅包含名言文本,包含作者的<small>标签和它是同级节点,不属于它的子节点,所以在循环内调用i.find()查找不到对应标签,自然无法给author赋值。 - 你单独执行全局
soup.find()能拿到结果,是因为全局查找的范围是整个HTML文档,和循环内限定在单个<span class="text">节点下的查找范围完全不同。
修正方案
步骤1:调整节点选取范围
直接选中所有包裹单条完整名言的<div class="quote">节点,而不是仅选中名言文本节点:
# 替换你之前定义quote_text的代码 quote_text = soup.find_all('div', class_='quote')
步骤2:优化循环取值逻辑(避免空值报错)
修正后的完整代码如下:
authors = [] quotes = [] quote_text = soup.find_all('div', class_='quote') for item in quote_text: # 提取名言内容 quote_ele = item.find('span', class_='text') if quote_ele: quotes.append(quote_ele.text.strip()) # 提取作者 author_ele = item.find('small', class_='author') if author_ele: authors.append(author_ele.text.strip())
内容的提问来源于stack exchange,提问作者Herminio Henriques
相关产品推荐
相关产品推荐

