当前位置: 首页 > 知识库问答 >
问题:

遍历许多json链接,但遇到jsondecode错误

蓬思博
2023-03-14

问题是我得到一个JSONDecodeError。我做错了什么?我该怎么做?

回溯(最近调用的最后一次):

文件“/import_messages_dev.py”,第35行,在raw_messages_data=requests.get(url3).json()中

import urllib.parse
import requests
import pymongo

###  DATABASE ####
# Connect to database // login user:password
uri = 'mongodb://testuser:password@ds245687.mlab.com:45687/liveme'
# Set client.
client = pymongo.MongoClient(uri)
# Set database.
db = client.get_database()

# Create collection.
messages = db['messages']

# The url to the live.me replays.
replay_url = "http://live.ksmobile.net/live/getreplayvideos?"

userid = 895324164037541888

# Parsing the urls for replays and profile with the userid.
url2 = replay_url + urllib.parse.urlencode({'userid': userid}) + '&page_size=1000'

# Printing urls for own validation.
print(f"Replay url: {url2}\n")

# Pull the data from replay json.
raw_replay_data = requests.get(url2).json()

print("Message links: ")

# Insert messages to database.
for i in raw_replay_data['data']['video_info']:
    url3 = i['msgfile']
    raw_messages_data = requests.get(url3).json()
    messages.insert_many(raw_messages_data)

    print(url3)

client.close()
for i in raw_replay_data['data']['video_info']:
    url3 = i['msgfile']
    raw_message_data = urllib.request.urlopen(url3)
    for line in raw_message_data:
        json_data = json.loads(line)
        messages.insert_many(json_data)

新的错误是:

Traceback (most recent call last):
  File "/import_messages_dev.py", line 54, in <module>
    raw_message_data = urllib.request.urlopen(url3)
  File "/usr/lib/python3.6/urllib/request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.6/urllib/request.py", line 532, in open
    response = meth(req, response)
  File "/usr/lib/python3.6/urllib/request.py", line 642, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python3.6/urllib/request.py", line 570, in error
    return self._call_chain(*args)
  File "/usr/lib/python3.6/urllib/request.py", line 504, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.6/urllib/request.py", line 650, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

共有1个答案

阳博赡
2023-03-14

URL3,可能包含以下值:http://s.live.ksmobile.net/cheetahlive/20/7e/15204559238152116852/15204559238152116852.json

包含单个字典,但整个文件不存储为JSON数组。

结构类似:

   { "channelType":"TEMPGROUP", ... } # line 1
   { "channelType":"TEMPGROUP", ... } # line 2
response = urllib.request.urlopen(url3)

for line in response:
    json_data = json.loads(line)
    # Do something with json_data
 类似资料:
  • 问题内容: 我有一个带有一些数组的JSON文件。我想遍历文件数组并获取它们的元素和它们的值。 这是我的文件的样子: 这是我走了多远: 是否可以做这样的事情? 我要这样做的原因是因为文件中的数组具有不同数量的元素。 问题答案: 更改 至 或者 取决于您使用的是JSON到/来自Java的库。(看起来将为您工作。) 然后,要访问“对象”中的字符串元素,请按元素名称将其取出。 如果需要中的元素名称,则可以

  • 嘿,伙计们,我在让for循环工作时遇到了一些麻烦。myList是一个链表,其中填充了文件中的数字,我正在尝试遍历它并以一种(当前,下一个)的方式打印当前值和每个下一个值- 出于某种原因,for循环无法执行任何操作,或者更确切地说,代码在for循环的开始就中断了。如果我摆脱for循环并只是复制和粘贴 很多时候它会按照我的意愿工作,但我宁愿不这样做。for 循环语法看起来是正确的,如果 say cou

  • 问题内容: 我正在尝试遍历JSON对象以导入数据,即标题和链接。我似乎无法掌握过去的内容。 JSON: 我尝试使用字典: 此代码仅在之前打印信息。( 忽略贾斯汀·比伯的曲目 :) 问题答案: 您加载JSON数据有些脆弱。代替: 您实际上应该这样做: 您不应该将“ JSON对象”视为什么。您所拥有的是清单。该列表包含两个字典。字典包含各种键/值对,所有字符串。当您这样做时,您将要求列表中的第一个字典

  • 问题内容: 我想创建一个函数,该函数需要一个映射或一个数组,然后对其进行迭代,并在每个项目上调用一个函数,该函数知道如何处理遇到的任何类型。 这是我第一次失败的尝试。当前,当我在实际用例中运行它时,它总是显示“呃哦!”。 数组或映射可能包含许多不同的内容,因此无法尝试匹配每个可能的输入。 换句话说, 是否有一种方法可以遍历Go中的数组或映射,而又不确切知道它是什么? 问题答案: 该功能正是您想要的

  • 问题内容: 如何以相反的顺序遍历链接哈希表?地图中是否有预定义的方法可以做到这一点? 我创建它如下: 问题答案: List > list = new ArrayList<>(map.entrySet()); 确实不是很漂亮,但是要花费一个条目集的副本,如果您的地图上有很多条目,则可能会出现问题。 出色的Guava库具有一个,可让您将Java 5用于每个样式循环而不是索引循环:

  • 问题内容: 我试图遍历此以获取“名称”值。这是我目前所拥有的,但是似乎没有用,从此处发布的内容中尝试了一些其他方法,但似乎无济于事。 Json被退回: 我试过使用: 有什么建议? 谢谢! 问题答案: 您必须将字符串解析为JSON(这实际上是字符串,而不是对象的指示):