You need to enable JavaScript to run this app. 未使用Tweepy爬取Twitter数据时如何统计单条推文的图片与视频数量
优惠活动
大模型
产品
解决方案
定价
更多

未使用Tweepy爬取Twitter数据时如何统计单条推文的图片与视频数量

代码失效的核心原因
  • 静态请求拿不到真实推文内容:Twitter的推文页是强前端动态渲染架构,用urlopen直接发起匿名请求,首先会触发平台反爬机制返回权限错误页;哪怕通过了反爬校验,拉取到的也只是没有实际数据的空HTML壳,根本不包含推文对应的媒体元素,自然只能抓到错误页的logo图。
  • 媒体识别逻辑错位:你之前以为所有图片、视频都藏在t.co短链跳转的目标页面里,这个判断完全不符合Twitter的内容加载规则——推文对应的媒体直链是嵌在页面内嵌的结构化JSON数据里的,根本不会以普通DOM图片元素的形式出现在初始加载的静态HTML中,靠解析DOM里的img标签根本抓不到实际媒体。
  • 原代码本身存在硬语法和逻辑bug:
    • BeautifulSoup(urlopen((url)) 括号不闭合,运行直接触发语法错误
    • 代码从bs4模块导入了BeautifulSoup类,调用时却写了bs4.BeautifulSoup,会直接报未定义变量的错误
    • 用来判断图片类型的file_types变量存的是XPath语法查询串,却被拿来做文件后缀的字符串匹配,就算拿到正确页面的内容,这个匹配逻辑也永远返回0个结果。
更高效的实现方案

你已经存储了包含完整字段的推文原始内容,完全没必要再发请求去爬推文URL,多此一举还容易触发反爬:

  • 图片计数:直接读取你已存的推文原始内容里的extended_entities.media字段,筛选列表中type值为photo的元素个数,就是这条推文的图片总数。
  • 视频计数:在同一个extended_entities.media列表里,筛选type值为video或者animated_gif的元素个数,就是这条推文的视频/动图总数(注:Twitter平台的动图本质是无声循环的mp4格式媒体,归到视频类计数即可)。
  • 如果存储的原始内容里没有完整的extended_entities字段,只保留了t.co格式的短链,也不需要爬取完整页面:只需要读取t.co短链的302跳转头信息,通过跳转目标的路径特征判断媒体类型,完全不需要解析页面DOM。
实际使用的避坑提示
  • 别用普通静态请求库直接拉取推文页面,匿名未登录的请求绝大多数会触发反爬返回错误页,哪怕加了自定义UA头也很容易被拦截,完全浪费请求性能。
  • 不要把t.co短链一概判定为外部站点链接,Twitter会把平台内的媒体、长文本、话题页全部替换为t.co短链,判断内容类型要靠跳转后的目标路径特征,不能靠短链本身的形式判断。
  • 单条推文的媒体数量有固定上限:最多4张图片/1个视频/1个动图,如果计数结果超过这个数值,基本就是解析逻辑把页面其他无关元素算进去了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 12:54:00