第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

每日排行榜或價(jià)格跟蹤數(shù)據(jù)

每日排行榜或價(jià)格跟蹤數(shù)據(jù)

catspeake 2024-01-04 09:55:50
我將從頭開(kāi)始,因?yàn)槲矣X(jué)得我迷失了所有不同的可能性。我將討論的是排行榜,但也適用于價(jià)格跟蹤。我的目標(biāo)是從網(wǎng)站(所有時(shí)間排行榜/隱藏)中抓取數(shù)據(jù),將其放入 .csv 文件中并每天中午更新。到目前為止我所取得的成功:抓取數(shù)據(jù)。嘗試使用 BS4進(jìn)行抓取,但由于數(shù)據(jù)是隱藏的,我無(wú)法具體到只能獲取所有時(shí)間點(diǎn)。我發(fā)現(xiàn)這是成功的,因?yàn)槲夷軌颢@得一個(gè)包含我需要的所有數(shù)據(jù)和日期作為標(biāo)題的表格。我對(duì)這個(gè)解決方案的問(wèn)題是 1) 填充 csv 的無(wú)用數(shù)據(jù) 2) 表是垂直的而不是水平的使用 CSS 選擇器抓取數(shù)據(jù),但我放棄了這個(gè)想法,因?yàn)橛袝r(shí)頁(yè)面無(wú)法加載并且數(shù)據(jù)沒(méi)有被抓取。馬上發(fā)現(xiàn)有一個(gè)json文件包含數(shù)據(jù)Json 抓取似乎是最好的選擇,但在創(chuàng)建可以用來(lái)制作圖表的 csv 文件時(shí)遇到困難。這就是讓我陷入困境的原因:將數(shù)據(jù)存儲(chǔ)在一個(gè)看起來(lái)像這樣的表中,其中灰色區(qū)域是點(diǎn),DATE1 是數(shù)據(jù)被抓取的時(shí)刻:我不想過(guò)多地操作 csv 文件中的數(shù)據(jù)。如果表格看起來(lái)像我上面的圖片,那么之后制作圖表會(huì)更容易,但我遇到了麻煩。我做得最好的就是創(chuàng)建一個(gè)看起來(lái)像這樣的表格,并且是垂直的而不是水平的。name,points,dateDennis,52570,10-23-2020Dinh,40930,10-23-2020name,points,dateDennis,52570,10-23-2020Dinh,40930,10-23-2020name,points,dateDennis,52570,10-23-2020Dinh,40930,10-23-2020感謝您的幫助。這是代碼import pandas as pdimport timetimestr = time.strftime("%Y-%m-%d %H:%M")url_all_time = 'https://community.koodomobile.com/widget/pointsLeaderboard?period=allTime&maxResults=20&excludeRoles='data = pd.read_json(url_all_time)table = pd.DataFrame.from_records(data, index=['name'], columns=['points','name'])table['date'] = pd.Timestamp.today().strftime('%m-%d-%Y')table.to_csv('products.csv', index=True, encoding='utf-8')如果我想要的不可能,我可能只是為每個(gè)成員單獨(dú)抓取,為每個(gè)成員制作一個(gè) CSV 文件,并制作一個(gè)引用這些不同文件的圖表。
查看完整描述

2 回答

?
一只萌萌小番薯

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊

所以,我稍微思考了一下你的問(wèn)題,這就是我的想法。

基本上,數(shù)據(jù)存儲(chǔ)的最佳選擇是輕量級(jí)數(shù)據(jù)庫(kù),如評(píng)論中所建議的。然而,通過(guò)一些計(jì)劃、一些跳躍和一些黑客代碼,你可以通過(guò)一個(gè)簡(jiǎn)單的(某種)JSON最終得到一個(gè).csv如下所示的文件:

注意這些值是相同的,因?yàn)槲也幌氲却粌商炫判邪癫耪嬲?/em>。

https://img1.sycdn.imooc.com/6596108000018bdd05900372.jpg

我所做的就是重新排列從 API 請(qǐng)求返回的數(shù)據(jù),并構(gòu)建一個(gè)如下所示的結(jié)構(gòu):


    "BobTheElectrician": {

        "id": 7160010,

        "rank": 14,

        "score_data": {

            "2020-10-24 18:45": 4187,

            "2020-10-24 18:57": 4187,

            "2020-10-24 19:06": 4187,

            "2020-10-24 19:13": 4187

        }

每個(gè)球員都是你的主要關(guān)鍵,除其他外,都有其scores_data價(jià)值。這反過(guò)來(lái)又為您運(yùn)行腳本的每一天dict保留價(jià)值。points

現(xiàn)在,訣竅是讓它JSON看起來(lái)像.csv你想要的。問(wèn)題是——如何?

  • 好吧,既然您打算更新所有玩家的數(shù)據(jù)(我只是假設(shè)),他們都應(yīng)該具有相同數(shù)量的score_data.

  • 的鍵score_data是您的時(shí)間戳。抓住任何玩家的score_data鑰匙,你就會(huì)得到日期標(biāo)題,對(duì)嗎?

  • 話雖如此,您可以以.csv相同的方式構(gòu)建行:從 中獲取玩家的姓名及其所有分值score_data。這應(yīng)該會(huì)給你一個(gè)列表的列表,對(duì)吧?正確的。

然后,當(dāng)您擁有所有這些后,您只需將其轉(zhuǎn)儲(chǔ)到一個(gè).csv文件中即可!

把它們放在一起:

import csv

import json

import os

import random

import time

from urllib.parse import urlencode


import requests



API_URL = "https://community.koodomobile.com/widget/pointsLeaderboard?"

LEADERBOARD_FILE = "leaderboard_data.json"



def get_leaderboard(period: str = "allTime", max_results: int = 20) -> list:

    payload = {"period": period, "maxResults": max_results}

    return requests.get(f"{API_URL}{urlencode(payload)}").json()



def dump_leaderboard_data(leaderboard_data: dict) -> None:

    with open("leaderboard_data.json", "w") as jf:

        json.dump(leaderboard_data, jf, indent=4, sort_keys=True)



def read_leaderboard_data(data_file: str) -> dict:

    with open(data_file) as f:

        return json.load(f)



def parse_leaderboard(leaderboard: list) -> dict:

    return {

        item["name"]: {

            "id": item["id"],

            "score_data": {

                time.strftime("%Y-%m-%d %H:%M"): item["points"],

            },

            "rank": item["leaderboardPosition"],

        } for item in leaderboard

    }



def update_leaderboard_data(target: dict, new_data: dict) -> dict:

    for player, stats in new_data.items():

        target[player]["rank"] = stats["rank"]

        target[player]["score_data"].update(stats["score_data"])

    return target



def leaderboard_to_csv(leaderboard: dict) -> None:

    data_rows = [

        [player] + list(stats["score_data"].values()) 

        for player, stats in leaderboard.items()

    ]

    random_player = random.choice(list(leaderboard.keys()))

    dates = list(leaderboard[random_player]["score_data"])

    with open("the_data.csv", "w") as output:

        w = csv.writer(output)

        w.writerow([""] + dates)

        w.writerows(data_rows)



def script_runner():

    if os.path.isfile(LEADERBOARD_FILE):

        fresh_data = update_leaderboard_data(

            target=read_leaderboard_data(LEADERBOARD_FILE),

            new_data=parse_leaderboard(get_leaderboard()),

        )

        leaderboard_to_csv(fresh_data)

        dump_leaderboard_data(fresh_data)

    else:

        dump_leaderboard_data(parse_leaderboard(get_leaderboard()))



if __name__ == "__main__":

    script_runner()


該腳本還會(huì)檢查您是否有一個(gè)JSON冒充正確數(shù)據(jù)庫(kù)的文件。如果沒(méi)有,它將寫(xiě)入排行榜數(shù)據(jù)。下次運(yùn)行該腳本時(shí),它將更新JSON并生成一個(gè)新.csv文件。


希望這個(gè)答案能引導(dǎo)您走向正確的方向。


查看完整回答
反對(duì) 回復(fù) 2024-01-04
?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊

嘿,既然您將其加載到 panda 框架中,那么操作就相當(dāng)簡(jiǎn)單了。我先運(yùn)行你的代碼


 import pandas as pd

import time

timestr = time.strftime("%Y-%m-%d %H:%M")

url_all_time = 'https://community.koodomobile.com/widget/pointsLeaderboard?period=allTime&maxResults=20&excludeRoles='

data = pd.read_json(url_all_time)

table = pd.DataFrame.from_records(data, index=['name'], columns=['points','name'])

table['date'] = pd.Timestamp.today().strftime('%m-%d-%Y')

然后我添加了幾行代碼來(lái)根據(jù)您的需要修改 panda 框架表。


idxs = table['date'].index

for i,val in enumerate(idxs):

    table.at[ val , table['date'][i] ] = table['points'][i]

table = table.drop([ 'date', 'points' ], axis = 1)

在上面的代碼片段中,我使用 pandas 框架通過(guò)索引分配值的能力。因此,首先我獲取日期列的索引值,然后遍歷每個(gè)索引值以添加所需日期的列(日期列中的值),并根據(jù)我們之前提取的索引獲取相應(yīng)的點(diǎn)


這給了我以下輸出:


name    10-24-2020

Dennis  52570.0

Dinh    40930.0

Sophia  26053.0

Mayumi  25300.0

Goran   24689.0

Robert T    19843.0

Allan M 19768.0

Bernard Koodo   14404.0

nim4165 13629.0

Timo Tuokkola   11216.0

rikkster    7338.0

David AKU   5774.0

Ranjan Koodo    4506.0

BobTheElectrician   4170.0

Helen Koodo 3370.0

Mihaela Koodo   2764.0

Fred C  2542.0

Philosoraptor   2122.0

Paul Deschamps  1973.0

Emilia Koodo    1755.0

然后我可以使用代碼中的最后一行將其保存到 csv 中。類似地,您可以提取更多日期的數(shù)據(jù)并將其格式化以將其添加到同一個(gè)熊貓框架中


table.to_csv('products.csv', index=True, encoding='utf-8')


查看完整回答
反對(duì) 回復(fù) 2024-01-04
  • 2 回答
  • 0 關(guān)注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)