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

BeautifulSoup爬取网页出现NoneType无text属性错误如何解决?

错误触发原因
  • 请求未携带合法请求头被站点反爬拦截,返回的页面并非正常的新闻详情页,你要定位的content_detail容器、h1.title标题、div.date日期等元素在返回的错误页面中不存在,调用find()方法后返回None,此时直接调用.text属性就会触发该错误。
  • 不同分类的页面结构存在差异:你给出的链接里第一个是视频类页面,和后两条文字新闻页的元素类名、布局逻辑不同,沿用同一套定位规则会匹配不到对应元素。
  • 代码没有做非空校验,直接对find()返回的结果链式调用.text,只要某一个元素匹配失败就会直接抛出异常中断运行。
解决办法
  • 首先给请求添加模拟浏览器的请求头,优先添加User-Agent参数,避免被反爬策略拦截:
import requests
from bs4 import BeautifulSoup as bs

# 示例请求头,可替换为你自己浏览器中对应请求的UA
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

links = ['https://www.cnnindonesia.com/tv/20211101202542-407-715220/video-20-november-tiongkok-vaksinasi-anak-usia-3-11-tahun', 
        'https://www.cnnindonesia.com/nasional/20211101192825-32-715200/demokrat-sindir-menteri-jokowi-jadi-marketing-bisnis-pcr', 
        'https://www.cnnindonesia.com/nasional/20211101210153-25-715231/indonesia-distribusikan-2355-juta-dosis-vaksin-sepanjang-2021']
            
titles = []
news_content = []
dates = []
    
for link in links:
    # 请求时传入headers
    response = requests.get(link, headers=headers)
    # 可先打印状态码确认请求是否成功
    # print(response.status_code)
    soup_link = bs(response.text, 'lxml')
    cont_dtl = soup_link.find_all('div', class_='content_detail')
    for cont in cont_dtl:
        # 元素取值前增加非空校验
        title_elem = cont.find('h1', class_='title')
        news_title = title_elem.text.strip() if title_elem else "无标题"
        titles.append(news_title)
        
        date_elem = cont.find('div', class_='date')
        date_upload = date_elem.text.strip() if date_elem else "无日期"
        dates.append(date_upload)
        
        find_p = cont.find_all('p')
        list_paragraphs = []
        for p in find_p:
            paragraph = p.get_text()
            list_paragraphs.append(paragraph)
        final_text = " ".join(list_paragraphs) if list_paragraphs else "无正文"
        news_content.append(final_text)
  • 如果加了请求头后仍有匹配失败的情况,可以把response.text保存到本地html文件,和浏览器中打开的页面源码对比,针对视频页、文字新闻页分别调整定位规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:06