爬虫:如果导出json文件里嵌套字典和列表的层次结构
halo 各位大神们关于爬虫这边,我这边已经把B站里的html 转换成json了 ,但是按照小甲鱼的课程导出来了字典类的数据结构,但是经过我子集不断尝试发现:我们需要的数据 视频标题藏在result 里,而result是一个列表,然后列表里的的字典里的 字典里 如图:
实际要到下面这一层才能找到我们需要的所有数据的字典data = soup['data']['result'])[-1]['data']##定位到数据结构层,这还是我试了好多次的。。。
有没有办法跟小甲鱼一样显示所有非字符串的迭代结构都显示出来啊。。。要不然太难找到title这个对应在哪个层次下面了?
##下面是为了直接显示 嵌套字典的层次关系
import requests
import json
import re
def get_space_end(level): ##无子集
return '' * level + '-'
def get_space_expand(level): ##可以继续扩展
return '' * level + '+'
def find_keys(tar ,level):##tar 是一个嵌套字典
keys = iter(tar)## 利用迭代器将字典的键拿出来
for each in keys:
if (type(tar) is not (dict)): ## 设置退出条件,如果字典的值不是另字典,则退出递归
print (get_space_end(level) + each)
else:
next_level = level + 1
print(get_space_expand(level) + each)
find_keys(tar, next_level) ## 如果字典的值是另外一个字典,继续将这个值调用函数 进行递归
def get_res(url):
headers = {
'uesr-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
}
res = requests.get(url, headers = headers )
res_json = json.loads(res.text)
find_keys(res_json, 1)
def main():
keywords = '编程'
url = f'https://api.bilibili.com/x/web-interface/search/all/v2?__refresh__=true&_extra=&context=&page=1&page_size=42&order=&duration=&from_source=&from_spmid=333.337&platform=pc&highlight=1&single_column=0&keyword={keywords}&preload=true&com2co=true'
get_res(url)
if __name__ =='__main__':
main()
#!/usr/bin/env python3
import requests
def main():
url = 'https://api.bilibili.com/x/web-interface/search/all/v2?__refresh__=true&_extra=&context=&page=1&page_size' \
'=42&order=&duration=&from_source=&from_spmid=333.337&platform=pc&highlight=1&single_column=0&keyword={' \
'keywords}&preload=true&com2co=true '
headers = {'user-agent': 'firefox'}
r = requests.get(url, headers=headers)
data = r.json()['data']['result'][-1]['data']
for item in data:
print(item['title'])
if __name__ == '__main__':
main()
suchocolate 发表于 2022-5-1 21:00
啊哈。。 那个我自己瞎找的确找到了。。。 但是我就是好奇想找到有没有办法可以快速的找到,因为第一眼我就定位到了肯定是title的那个列表里。。。然后往上找就根本看不出结构。 Victor0321 发表于 2022-5-1 21:58
啊哈。。 那个我自己瞎找的确找到了。。。 但是我就是好奇想找到有没有办法可以快速的找到,因为第一眼我 ...
你可以看一下这个:
https://www.cnblogs.com/xingdian/p/7411832.html Victor0321 发表于 2022-5-1 21:58
啊哈。。 那个我自己瞎找的确找到了。。。 但是我就是好奇想找到有没有办法可以快速的找到,因为第一眼我 ...
从最内往最外层逐层看,遇到逗号就是列表用序号索引,遇到冒号就是字典就用键索引,有那么难吗?
浏览器自带格式化,一眼就能看到结构了。
不行就pycharm或vscode都在了自动格式化功能,就算没有IDLE,用notepad++ 加上 json viewer也能格式化json。 suchocolate 发表于 2022-5-2 10:22
从最内往最外层逐层看,遇到逗号就是列表用序号索引,遇到冒号就是字典就用键索引,有那么难吗?
浏览器 ...
自己找 感觉眼睛要看瞎掉。。
还是用notepad++ 吧。。。。 感谢感谢
页:
[1]