【问题标题】:How to print json data from url to excel?如何将 json 数据从 url 打印到 excel?
【发布时间】:2016-09-03 12:06:15
【问题描述】:
import urllib 
import json
import re
import csv
from bs4 import BeautifulSoup

game_code = open("/Users//Desktop/PYTHON/gc.txt").read()

game_code = game_code.split("\r")


for gc in game_code:

    htmltext =urllib.urlopen("http://cluster.leaguestat.com/feed/index.php?feed=gc&key=f109cf290fcf50d4&client_code=ohl&game_id="+gc+"&lang_code=en&fmt=json&tab=pxpverbose")

    soup= BeautifulSoup(htmltext, "html.parser")
    j= json.loads(soup.text)
    summary = ['GC'],['Pxpverbose']
    for event in summary:
        print gc, ["event"]

我似乎无法访问该库来打印正确的标题和行。我最终想将特定行导出到 csv。我两天前下载了python,所以我很新。我需要一个项目的数据集。任何建议或指导将不胜感激。

如果有人想看看,这里有一些游戏代码。谢谢

21127,20788,20922,20752,21094,21196,21295,21159,21128,20854,21057

【问题讨论】:

    标签: python json parsing csv url


    【解决方案1】:

    以下是一些想法:

    • 我想指出优秀的 requests 可以替代 urllib 来满足您在 Python 中的所有 HTTP 需求(您可能需要 pip install requests)。
    • requests 带有一个内置的 json 解码器(你不需要 BeautifulSoup)。
    • 事实上,您已经导入了一个很棒的模块 (csv) 来打印标题和数据行。您还可以使用此模块将数据写入文件。
    • 您的数据在 Python 中以字典 (dict) 的形式返回,这是一种由 keys 索引的数据结构。您可以使用这些键访问数据中的(我认为这就是“特定行”的意思)。

    实现您想要的许多可能方法之一:

    import requests
    import csv
    
    game_code = open("/Users//Desktop/PYTHON/gc.txt").read()
    game_code = game_code.split("\r")
    
    for gc in game_code:
        r = requests.get("http://cluster.leaguestat.com/feed/index.php?feed=gc&key=f109cf290fcf50d4&client_code=ohl&game_id="+gc+"&lang_code=en&fmt=json&tab=pxpverbose")
        data = r.json()
    
        with open("my_data.csv", "a") as csvfile:
            wr = csv.writer(csvfile,delimiter=',')
            for summary in data["GC"]["Pxpverbose"]:
                wr.writerow([gc,summary["event"]])
                # add keys to write additional values;
                # e.g. summary["some-key"].  Example: 
                # wr.writerow([gc,summary["event"],summary["id"]])
    

    【讨论】:

    • 谢谢! @Daniel 添加其他键的最佳方式是什么?
    • 我的荣幸!在我的答案中添加了 cmets;很高兴澄清它是否没有意义。
    • 这意味着您正在尝试引用每个“摘要”字典中不存在的键。无需在 cmets 中陷入困境,您可能会查看错误处理:docs.python.org/2/tutorial/errors.html#handling-exceptions。如果您刚开始使用 Python,这有点先进,但这是正确的方向。这个想法是:try: wr.writerow([gc,summary["event"],summary["some-key-that-doesn't-exist"]]) except KeyError: #do something with the error
    • 我的荣幸!由于您是 Stackoverflow 的新手,因此说“谢谢”的最佳方式是接受并投票赞成答案:stackoverflow.com/help/someone-answers。祝你好运!
    【解决方案2】:

    你不需要漂亮的汤;数据可以直接从 URL 读取成 JSON 格式。

    import urllib, json
    response = urllib.urlopen("http://cluster.leaguestat.com/feed/index.php?feed=gc&key=f109cf290fcf50d4&client_code=ohl&game_id=" + gc +"&lang_code=en&fmt=json&tab=pxpverbose")
    data = json.loads(response.read())
    

    此时,data 是您网页的解析后的 JSON。

    Excel 可以读取 csv 文件,因此最简单的方法是使用 this 库将您想要的数据导出到 CSV 文件中。

    这应该足以让您入门。修改 fieldnames 以在 csv 文件的列中包含特定的事件详细信息。

    import csv
    
    with open('my_games.csv', 'w') as csvfile:
        fieldnames = ['event', 'id']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames,
                                extrasaction='ignore')
        writer.writeheader()
        for event in data['GC']['Pxpverbose']:
            writer.writerow(event)
    

    【讨论】:

    • 感谢您的帮助。仍然打印为仅带有标题名称的空白 .csv。似乎无法找到我想要的实际数据的字典键。
    • @denn9268 哎呀,看起来代码有几个错误。现在应该给你一个包含事件和 ID 列的 CSV 文件。
    • 我收到错误“返回 self.writer.writerow(self._dict_to_list(rowdict))”
    猜你喜欢
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2021-06-05
    • 1970-01-01
    相关资源
    最近更新 更多