我正在使用“googleapiclient”python 從 YouTube API V3 獲取資料。
回應是巨大的,我想要的只是決議一些鍵,然后將它們附加到一個 csv 檔案中。
為了快速作業而不是遍歷每個專案,每個頁面有 50 個專案,多個頁面估計數量在 50 左右,因此如果我回圈提取密鑰,我可能需要進行 250 次迭代。
所以,我決定使用 Pandas 來加快這個程序,但我還不知道怎么做。
你能告訴我如何加快決議程序,最好是使用熊貓嗎?
這是回應中的專案之一:
{
"kind": "youtube#searchListResponse",
"etag": "9C4YPSA6KJ2_ZQe6k0khyWyZw4U",
"nextPageToken": "CDIQAA",
"regionCode": "DE",
"pageInfo": { "totalResults": 569, "resultsPerPage": 50 },
"items": [
{
"kind": "youtube#searchResult",
"etag": "-tjutsrDQfkNJkMufUBxwHakEkE",
"id": { "kind": "youtube#video", "videoId": "wnnKjI1m2Ug" },
"snippet": {
"publishedAt": "2019-11-14T10:00:11Z",
"channelId": "UCVdfgrCLfJQfO5EgPlzaYAQ",
"title": "Was ist XML? Einfach und schnell erkl\u00e4rt!",
"description": "Werbung: Jetzt Premium Mitgliedschaft sichern ...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/wnnKjI1m2Ug/default.jpg",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/wnnKjI1m2Ug/mqdefault.jpg",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/wnnKjI1m2Ug/hqdefault.jpg",
"width": 480,
"height": 360
}
},
"channelTitle": "Programmieren Starten",
"liveBroadcastContent": "none",
"publishTime": "2019-11-14T10:00:11Z"
}
}
我想從每個專案中提取:
['id'] > ['videoId']
['snippet'] > ['title']
['snippet'] > ['channelTitle']
謝謝你。
uj5u.com熱心網友回復:
如果您可以使用熊貓來幫助加快速度,我會感到驚訝。Pandas 是一個用于操作和處理資料幀的庫。也許您可以使用 Pandas 來構建這些資料的資料框,或者將其另存為 CSV,但我認為這對基本處理沒有幫助。
要處理這些資料,我認為您只需要應用您想要的功能,即收集您正在尋找的那三個資料點,到您擁有的資料。您的回應作為 json 回傳,因此將其決議為 json,獲取專案串列,然后為專案串列中的每個專案提取您想要的資料。
import json
item_list = json.loads(YOUR_RESPONSE)["items"]
def extract(item):
return [item["id"]["videoId"], item["snippet"]["title"], item["snippet"]["channelTitle"]]
for item in item_list:
print(extract(item))
我不確定一旦獲得提取的資訊,您想對它做什么,但是這種方法可以讓您從專案中獲得您關心的值。
uj5u.com熱心網友回復:
我只是想補充一點,pandas對于這種型別的作業負載來說,這是出了名的慢。由于這是您遇到的一個非常簡單的問題,如果可以,我建議pandas您不要使用。請參閱下面的快速性能比較我能夠放在一起。
from timeit import timeit
import pandas as pd
data = {
"kind": "youtube#searchListResponse",
"etag": "9C4YPSA6KJ2_ZQe6k0khyWyZw4U",
"nextPageToken": "CDIQAA",
"regionCode": "DE",
"pageInfo": { "totalResults": 569, "resultsPerPage": 50 },
"items": [
{
"kind": "youtube#searchResult",
"etag": "-tjutsrDQfkNJkMufUBxwHakEkE",
"id": { "kind": "youtube#video", "videoId": "wnnKjI1m2Ug" },
"snippet": {
"publishedAt": "2019-11-14T10:00:11Z",
"channelId": "UCVdfgrCLfJQfO5EgPlzaYAQ",
"title": "Was ist XML? Einfach und schnell erkl\u00e4rt!",
"description": "Werbung: Jetzt Premium Mitgliedschaft sichern ...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/wnnKjI1m2Ug/default.jpg",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/wnnKjI1m2Ug/mqdefault.jpg",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/wnnKjI1m2Ug/hqdefault.jpg",
"width": 480,
"height": 360
}
},
"channelTitle": "Programmieren Starten",
"liveBroadcastContent": "none",
"publishTime": "2019-11-14T10:00:11Z"
}
}
]
}
def extract(item):
snippet = item['snippet']
return [item["id"]["videoId"], snippet["title"], snippet["channelTitle"]]
print('Pandas: ', timeit("_ = pd.json_normalize(data['items'])[['id.videoId', 'snippet.title', 'snippet.channelTitle']]",
number=1000, globals=globals()))
print('Dict key lookup: ', timeit("""
for item in data["items"]:
_ = extract(item)
""", number=1000, globals=globals()))
結果:
Pandas: 0.7727613999741152
Dict key lookup: 0.00024690001737326384
我認為這些結果不言自明。也就是說,pandas當然有它的位置和用例,但我敢說這似乎不是其中之一。
uj5u.com熱心網友回復:
您可以使用 pandas json_normalize來展平嵌套資料。結合過濾所需的列,這將使(假設輸入是一個名為 的字典data):
import pandas as pd
df = pd.json_normalize(data['items'])[['id.videoId', 'snippet.title', 'snippet.channelTitle']]
結果:
| id.videoId | 片段.title | 片段.頻道標題 | |
|---|---|---|---|
| 0 | wnnKjI1m2Ug | 是 XML 嗎?Einfach 和 schnell erkl?rt! | 程式員入門 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/343486.html
