You need to enable JavaScript to run this app. Python爬虫运行报'NoneType' object is not subscriptable错误如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫运行报'NoneType' object is not subscriptable错误如何解决?

问题原因分析
  • 循环变量命名冲突:你代码中for results in results:将存储所有a标签的列表变量results直接覆盖为单个a标签对象,会导致循环逻辑异常。
  • 未处理无href属性的a标签:部分a标签不存在href属性,调用results.get("href")会返回None,直接对None执行[:5]切片操作就会触发你遇到的TypeError: 'NoneType' object is not subscriptable报错。
  • 切片位置修改操作无效:你将[:5]移入get括号的操作没有实际作用,get("href"[:5])等价于get("href"),既没有解决None值的问题,也没有实现对href值切片匹配的需求。
  • 缺少请求头标识:维基百科会拦截没有携带User-Agent的爬虫请求,你直接发送的get请求大概率返回的是拦截页面,而非正常的词条内容,所以即使修复语法问题也不会输出目标链接。
  • 域名使用有误:你填写的www.wikipedia.com会自动跳转到维基百科官方域名wikipedia.org,跳转逻辑也可能影响返回内容,建议直接使用官方词条地址。
修复后的代码
from bs4 import BeautifulSoup
import requests

# 增加请求头模拟浏览器访问
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"
}
url = "https://en.wikipedia.org/wiki/Computer"

response = requests.get(url, headers=headers)
data = response.text
soup = BeautifulSoup(data, "lxml")
all_links = soup.find_all("a")

for link in all_links:
    href = link.get("href")
    # 先判断href不为空,再做前缀匹配
    if href and href[:5] == "https":
        print(href)
补充说明

你也可以用str.startswith()方法更直观的实现前缀匹配,把判断条件改成if href and href.startswith("https")即可,代码可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 22:45:03