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

Python爬虫报错AttributeError:'NoneType'对象没有'find_all'属性的问题求助

解决AttributeError: 'NoneType' object has no attribute 'find_all'的问题

这个报错的根源很清晰:你的代码里s = soup.find('div', class_='entry-content')这行返回了None——也就是说,你请求到的页面里根本找不到带有entry-content类名的div元素,后续调用find_all自然就会触发NoneType的属性错误。

通常这种情况有两个主要原因,对应两种解决思路:

1. 网站的反爬机制拦截了你的请求

直接用requests.get()发起请求时,你的请求头会暴露这是一个爬虫程序,网站可能会返回简化版页面、验证码页面或者空内容,导致找不到目标元素。

解决方法是给请求添加浏览器的请求头,伪装成正常用户访问:

import requests
from bs4 import BeautifulSoup

# 模拟Chrome浏览器的请求头,你也可以换成其他浏览器的UA
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

# 携带headers发起请求
r = requests.get('https://www.preparedfoods.com/articles/106989-irish-pork-crisis', headers=headers)
# 先检查请求是否成功,避免拿到403/404这类错误页面
r.raise_for_status()

soup = BeautifulSoup(r.content, 'html.parser')
print(soup.title)

# 先判断目标元素是否存在,再调用方法
s = soup.find('div', class_='entry-content')
if s:
    lines = s.find_all('p')
    for line in lines:
        print(line.text.strip())
else:
    print("未找到目标div元素,请检查页面结构或反爬策略")

2. 目标网站的页面结构已经变更

如果加了请求头还是找不到元素,很大概率是网站更新了页面结构,原来的entry-content类名已经被替换,或者内容所在的标签类型变了(比如换成了section、article标签)。

解决步骤:

  • 打开目标页面,按F12打开浏览器开发者工具;
  • 用元素选择器定位到文章内容区域,查看它的父元素的class、id或其他属性;
  • 修改代码里的find参数,比如如果现在内容在class="article-body"的section里,就改成s = soup.find('section', class_='article-body');
  • 也可以先打印soup.prettify(),查看实际请求到的HTML内容,确认目标内容是否存在。

最后提醒一句:以后写爬虫的时候,养成先判断find/find_all返回值是否为None的习惯,能避免很多这类低级错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 22:07:45