[问题] 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