Python处理推特爬取数据时报错:'NoneType' object is not callable
解决TypeError: 'NoneType' object is not callable问题
嘿,这个错误我见得挺多的,咱们一步步拆解问题,找到根源:
最可能的两个触发原因
- 把
None值当成函数调用了
比如你可能写了print(stamp_print()),但stamp_print本身是None(不是函数);或者在获取时间戳时,BeautifulSoup没找到目标元素返回了None,你却对它执行了.text()操作——注意!.text是属性不是方法,加括号就会触发错误。 - 变量名和内置函数/模块冲突
要是你不小心把变量命名为print(比如print = None),之后再调用print(stamp_print)时,就会调用这个被你覆盖成None的变量,自然报错。
具体排查和修复步骤
步骤1:修正时间戳获取代码
先补全你代码里缺失的页面解析部分,再规范元素查找逻辑:
import bs4 from urllib.request import urlopen as uReq from bs4 import BeautifulSoup as soup import re my_url = "https://twitter.com/realDonaldTrump?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor" uClient = uReq(my_url) page_html = uClient.read() uClient.close() # 解析HTML内容 page_soup = soup(page_html, "html.parser") # 查找带datetime属性的time标签(推特时间戳常用这个结构) timestamp_elem = page_soup.find('time', attrs={'datetime': True}) if timestamp_elem is not None: # 获取文本内容:用.text属性,不要加括号 stamp_print = timestamp_elem.text.strip() print(stamp_print) # 也可以直接获取更精准的datetime属性值 stamp_datetime = timestamp_elem.get('datetime') print(stamp_datetime) else: print("未找到时间戳元素,可能页面结构更新或触发反爬了")
步骤2:检查变量名冲突
快速扫一遍代码,有没有把print、soup这类内置/导入的名称当成自定义变量用,比如:
# 错误示例:覆盖了内置print函数 print = None # 后续调用print就会报错 print(stamp_print)
如果有这种情况,把变量名改成my_print这类不会冲突的名称即可。
额外提醒:推特的反爬限制
推特现在很多内容是JavaScript动态加载的,直接用urllib获取的静态HTML可能不包含你要找的时间戳元素,导致find返回None。如果是这种情况,你可能需要用Selenium模拟浏览器加载页面后再提取内容。
内容的提问来源于stack exchange,提问作者beagLord
相关产品推荐
相关产品推荐

