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