[問題] json多層解析問題

看板Python作者 (sunny_girl)時間3年前 (2020/07/21 11:33), 編輯推噓4(4023)
留言27則, 3人參與, 3年前最新討論串1/1
python + 爬蟲新手在爬google trends資料時遇到問題 找了好多資料都無法解決困擾 請版上神人幫忙解救QQ 以下為部分的json格式 https://i.imgur.com/gG7mDYP.jpg
https://i.imgur.com/PezSFi0.jpg
https://i.imgur.com/tpZE6uS.jpg
以下是目前的code webdatas = data['default']['trendingSearchesDays'][0]['trendingSearches'] for news in webdatas : print (news['title']['query']) print (news['formattedTraffic']) count len() if count !=0 : for i in count : print (news['relatedQueries'][i]['query'])  print (news['articles'][i]['title']) 遇到的問題是: 最後那兩行想抓 1.每個relatedQueries下的每個query 2.每個articles下的每個title 例如 title1是動滋券 relatedQueries有6個query(動滋網、動滋、體育署…) articles有9個title title2是威力彩 relatedQueries有0個query articles有1個title 每個數量都不同,可能需要用count和for迴圈去跑 但功力還不夠不太知道count len()那邊可以怎麼寫 還是有其他寫法嗎 再麻煩大家了QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.52.53 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1595302393.A.929.html

07/21 11:41, 3年前 , 1F
根本不需要計算個數啊
07/21 11:41, 1F

07/21 11:41, 3年前 , 2F
那是個list就讓for幫你去跑每一個就好了
07/21 11:41, 2F

07/21 11:41, 3年前 , 3F
for rquery in news['relatedQueries']: 之類的
07/21 11:41, 3F

07/21 11:42, 3年前 , 4F
article那邊也一樣
07/21 11:42, 4F

07/21 11:42, 3年前 , 5F
for article in news['articles']: 就好
07/21 11:42, 5F

07/21 11:43, 3年前 , 6F
也不用去判定個數,反正是空list自然就一次也不會跑,除非
07/21 11:43, 6F

07/21 11:43, 3年前 , 7F
空的時候它會刻意設定為None或其他處理方式才需要特別判斷
07/21 11:43, 7F

07/21 11:47, 3年前 , 8F
還是說你的問題是卡在沒用json.loads()解析json字串?
07/21 11:47, 8F

07/21 12:30, 3年前 , 9F
前面有用json.loads處理過了,因為這邊還有https:/
07/21 12:30, 9F

07/21 12:30, 3年前 , 10F
/i.imgur.com/nOtWPJA.jpg所以比較難處裡,剛剛試
07/21 12:30, 10F

07/21 12:30, 3年前 , 11F
這個跑不出東西for i in news['relatedQueries']:
07/21 12:30, 11F

07/21 12:30, 3年前 , 12F
print (news['relatedQueries'][i]['query'])
07/21 12:30, 12F

07/21 12:34, 3年前 , 13F
你搞錯for的意義了吧
07/21 12:34, 13F

07/21 12:34, 3年前 , 14F
for rquery in news['relatedQueries']:
07/21 12:34, 14F

07/21 12:35, 3年前 , 15F
print(rquery['query'])
07/21 12:35, 15F

07/21 12:36, 3年前 , 16F
這邊for的不是index,直接是裡面物件本身
07/21 12:36, 16F

07/21 13:23, 3年前 , 17F
這樣的話只跑的出第一個query,第二個第三個都跑不
07/21 13:23, 17F

07/21 13:23, 3年前 , 18F
出來QQ,跟我之前print (news['relatedQueries'][0
07/21 13:23, 18F

07/21 13:23, 3年前 , 19F
]['query'])結果是一樣的
07/21 13:23, 19F

07/21 15:31, 3年前 , 20F
你的news['relatedQueries']是一個list,裡面的物件是dic
07/21 15:31, 20F

07/21 15:34, 3年前 , 21F
t所以還要一層for迴圈把dict東西疊代出來
07/21 15:34, 21F

07/21 15:43, 3年前 , 22F
抱歉以為你要多個key的內容 如要query的話就照dd大就行
07/21 15:43, 22F

07/21 15:44, 3年前 , 23F
你可以先試著print看看rquery,會出現所有list中的dict才
07/21 15:44, 23F

07/21 15:44, 3年前 , 24F
07/21 15:44, 24F

07/21 18:14, 3年前 , 25F
你先確定你print(news['relatedQueries'])真的有複數筆,
07/21 18:14, 25F

07/21 18:14, 3年前 , 26F
print(news['relatedQueries'][1])真的有東西
07/21 18:14, 26F

07/21 18:16, 3年前 , 27F
如果根本就沒有多筆資料在裡面,那可能前面哪邊早就有問題
07/21 18:16, 27F
文章代碼(AID): #1V5c7vaf (Python)