[問題] json多層解析問題

作者: love11098787 (Laipi_lai)   2020-07-21 11:33:11
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
作者: ddavid (謊言接線生)   2020-07-21 11:41:00
根本不需要計算個數啊那是個list就讓for幫你去跑每一個就好了for rquery in news['relatedQueries']: 之類的article那邊也一樣for article in news['articles']: 就好也不用去判定個數,反正是空list自然就一次也不會跑,除非空的時候它會刻意設定為None或其他處理方式才需要特別判斷還是說你的問題是卡在沒用json.loads()解析json字串?
作者: love11098787 (Laipi_lai)   2020-07-21 12:30:00
前面有用json.loads處理過了,因為這邊還有https://i.imgur.com/nOtWPJA.jpg所以比較難處裡,剛剛試這個跑不出東西for i in news['relatedQueries']:print (news['relatedQueries'][i]['query'])
作者: ddavid (謊言接線生)   2020-07-21 12:34:00
你搞錯for的意義了吧for rquery in news['relatedQueries']:print(rquery['query'])這邊for的不是index,直接是裡面物件本身
作者: love11098787 (Laipi_lai)   2020-07-21 13:23:00
這樣的話只跑的出第一個query,第二個第三個都跑不出來QQ,跟我之前print (news['relatedQueries'][0]['query'])結果是一樣的
作者: hongyan (Yan)   2020-07-21 15:31:00
你的news['relatedQueries']是一個list,裡面的物件是dict所以還要一層for迴圈把dict東西疊代出來抱歉以為你要多個key的內容 如要query的話就照dd大就行你可以先試著print看看rquery,會出現所有list中的dict才對
作者: ddavid (謊言接線生)   2020-07-21 18:14:00
你先確定你print(news['relatedQueries'])真的有複數筆,print(news['relatedQueries'][1])真的有東西如果根本就沒有多筆資料在裡面,那可能前面哪邊早就有問題

Links booklink

Contact Us: admin [ a t ] ucptt.com