su_zihan_ 2023-06-17 22:07 采纳率: 0%
浏览 40

python爬虫有时出现keyerror问题

报错信息如下:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_49980\3608093107.py in <module>
      1 spider = BilibiliSpider()
      2 tv_total, reply_total = 1000* 1, 1  # 设置视频条数, 回复记录数
----> 3 spider.update_data_by_online("20221101", "20221231", tv_total, reply_total)
      4 spider.load_from_file()
      5 df = spider.data

~\AppData\Local\Temp\ipykernel_49980\3437160765.py in update_data_by_online(self, start_date, end_date, tv_total, reply_total, interval_days)
    199     b2 = time.time()
    200     for index, video in enumerate(video_list):
--> 201       self.__update_video_detail(video, reply_total)
    202       if (index + 1) % 100 == 0:
    203         print(f"进度: {index + 1} / {len(video_list)} = {(index + 1) / len(video_list) * 100:.2f}%, Cost Time : {time.time() - b2:.2f}")

~\AppData\Local\Temp\ipykernel_49980\3437160765.py in __update_video_detail(self, video, reply_total)
    239     data_item["up主粉丝量"] = upData["fans"]
    240     # 获取了所有的视频, 尝试更新评论等其他信息
--> 241     reply_list = self.__load_all_reply(detail["aid"], reply_total)
    242     if len(reply_list) == 0:
    243       reply_list = [{}]

~\AppData\Local\Temp\ipykernel_49980\3437160765.py in __load_all_reply(self, aid, reply_total)
    183     reply_list = []
    184     while True:
--> 185       is_end, replies = self.reply(aid, pn)
    186       reply_list += replies
    187       if len(reply_list) >= reply_total or is_end:

~\AppData\Local\Temp\ipykernel_49980\3437160765.py in reply(self, aid, pn)
    128     logger.debug(f"访问URL: {url}")
    129     data = requests.get(url, headers=headers, proxies=proxies).json()
--> 130     is_end = data[u"data"]["cursor"]["is_end"]
    131     data_list = []
    132     for reply in data[u"data"]["replies"]:

KeyError: 'data'

但是并不是每次运行都出问题的,爬取不同时间段,有的可以正常运行,有的又会出现相关报错
之前是没有u的,我加了u发现代码与报错都不受影响

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-19 02:42
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7423349
    • 这篇博客也不错, 你可以看下python keyerror解决方案
    • 除此之外, 这篇博客: Python的KeyError的解决办法中的 解决办法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      2.1 方法1通过in判断key是否存在

      my = {"nick":"福哥","age":"35","languages":["c/c++","java","php","python","javascript"]}
      
      if "province" in my:
          print(my["province"])
      

      2.2 方法2使用get方法判断key是否存在

      my = {"nick":"福哥","age":"35","languages":["c/c++","java","php","python","javascript"]}
      
      if my.get("province") is not None:
          print(my["province"])
      

      2.3 方法3使用get方法的第二个参数,如果目标key不存在则返回第二个参数

      my = {"nick":"福哥","age":"35","languages":["c/c++","java","php","python","javascript"]}
      
      print(my.get("province", "北京"))
      print(my)
      

      2.4 方法4使用setdefault方法的第二个参数,如果目标key不存在则返回第二个参数同时讲第二个参数写入key位置

      my = {"nick":"福哥","age":"35","languages":["c/c++","java","php","python","javascript"]}
      
      print(my.setdefault("province", "北京"))
      print(my)
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 6月17日

悬赏问题

  • ¥20 代码:Python随机森林反演生物量数据处理问题
  • ¥50 微信野豹球杆小程序数据
  • ¥15 Linux系统的命令行窗口回车变成了换行,无法执行命令了
  • ¥15 vb6.0调用ImageMagick进行图片转换问题
  • ¥15 安卓组件化工程引入Arouter报错there's no route matched path[/login/LoginActivity,如何解决?
  • ¥50 如何进行点云姿态调整优化
  • ¥20 关于c++的问题 如何用qt完成
  • ¥15 台达变频器MS300与伺服驱动器B3系列的抱闸与电路设计如何实现
  • ¥20 C++通过HICON获取argb像素数组
  • ¥15 如何利用支持向量机提高分类器正确率和筛选理想分类器