码字小白菜努力中 2024-02-25 00:41 采纳率: 88%
浏览 13
已结题

为什么keyerror报错?(语言-python)


# -*- coding:utf-8 -*-
import requests
import re
import random
import time

# url = 'https://api.m.jd.com/?appid=item-v3&functionId=pc_club_productPageComments&client=pc&clientVersion=1.0.0&t=1687854826527&loginType=3&uuid=122270672.1687854697612690803356.1687854698.1687854698.1687854698.1&productId=100011754309&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1&bbtf=&shield='

headers = {"user-agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"}

mycomments=[]
for page in range(0,10):
    # url = 'https://api.m.jd.com/?appid=item-v3&functionId=pc_club_productPageComments&client=pc&clientVersion=1.0.0&t=1687854826527&loginType=3&uuid=122270672.1687854697612690803356.1687854698.1687854698.1687854698.1&productId=100011754309&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1&bbtf=&shield='+str(page)\
    #         +'&pageSize=10ISsHAD
    #         OWsKU+)&fold=1'
    url = 'https://api.m.jd.com/?appid=item-v3&functionId=pc_club_productPageComments&client=pc&clientVersion=1.0.0&t=1687857924287&loginType=3&uuid=122270672.1687854697612690803356.1687854698.1687854698.1687854698.1&productId=100011754309&score=0&sortType=5&page='+str(page)+'&pageSize=10&isShadowSku=0&rid=0&fold=1&bbtf=&shield='
    response = requests.get(url=url,headers=headers)
    json_data = response.json()
    # print('----------loading'+str(page)+'----page---------')
    comments=json_data['comments']
    for comment in comments:
        # print(comments)
        guid=comment['guid']
        content=comment['content']
        content=re.sub(r'[\t\n]','',content)
        creationTime=comment['creationTime']
        productColor=comment['productColor']
        nickname=comment['nickname']
        score=comment['score']
        userClient=comment['userClient']
        days=comment['days']
        imageCount=comment['imageCount']
        print(guid,content,creationTime,productColor,score,userClient,days,imageCount)
        mycomments.append( str(guid)+'\t' +str(nickname)+'\t' +str(content)+'\t' +str(creationTime)+'\t' +
                           str(productColor)+'\t' +str(score)+'\t' +str(userClient)+'\t' +str(days)+'\t' +str(imageCount))
    time.sleep(random.randint(2,4))
    print(response.json())
print(mycomments)

明明'imageCount'有在最后一列读取出来,但是还是报错keyerror:'imageCount'。除去imageCount这个相关的其他代码都可以正常运行。

img

img

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-02-25 08:39
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    在你的代码中,报错是因为有些评论中没有imageCount这个键,导致comment['imageCount']访问时报错KeyError。为了解决这个问题,你可以在访问comment['imageCount']前先检查该键是否存在,如果不存在则设置一个默认值,如0。这样可以避免因为缺少imageCount键而导致的错误。
    修改后的代码如下所示:
    pythonCopy code

    import requests
    import re
    import random
    import time
    headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
    }
    mycomments = []
    for page in range(0, 10):
    url = 'https://api.m.jd.com/?appid=item-v3&functionId=pc_club_productPageComments&client=pc&clientVersion=1.0.0&t=1687857924287&loginType=3&uuid=122270672.1687854697612690803356.1687854698.1687854698.1687854698.1&productId=100011754309&score=0&sortType=5&page='+str(page)+'&pageSize=10&isShadowSku=0&rid=0&fold=1&bbtf=&shield='
    response = requests.get(url=url, headers=headers)
    json_data = response.json()
    comments = json_data.get('comments', [])  # 获取评论列表,如果没有评论,则返回空列表
    for comment in comments:
    guid = comment['guid']
    content = re.sub(r'[\t\n]', '', comment['content'])
    creationTime = comment['creationTime']
    productColor = comment['productColor']
    nickname = comment['nickname']
    score = comment['score']
    userClient = comment['userClient']
    days = comment['days']
    imageCount = comment.get('imageCount', 0)  # 获取评论图片数量,如果没有则默认为0
    print(guid, nickname, content, creationTime, productColor, score, userClient, days, imageCount)
    mycomments.append(f"{guid}\t{nickname}\t{content}\t{creationTime}\t{productColor}\t{score}\t{userClient}\t{days}\t{imageCount}")
    time.sleep(random.randint(2, 4))
    print(response.json())
    print(mycomments)
    

    这样修改后,即使某些评论没有imageCount这个键,代码也不会报错了。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月25日
  • 已采纳回答 2月25日
  • 创建了问题 2月25日

悬赏问题

  • ¥30 为什么会失败呢,该如何调整
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析