在爬某招聘网站的时候想要将爬到的信息保存到json文件中但是始终无法将之转化为字典,查遍很多方法还是无法解决,请问各位有什么见解吗?
dumps 是将字典转str,即json
loads 是将str即json转字典
import json
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}
emb_filename = ('/home/cqh/faceData/emb_json.json')
# solution 1
jsObj = json.dumps(name_emb)
with open(emb_filename, "w") as f:
f.write(jsObj)
f.close()
# solution 2
json.dump(name_emb, open(emb_filename, "w"))
解决方案:
针对问题内容中的转换字符串为字典的问题,可以使用json模块将字符串转换为字典。具体操作步骤如下:
首先确认你爬取的数据存储为字符串格式的json数据,可以先在命令行中查看数据的类型。
导入json模块,使用json.loads()将字符串转换为字典格式。代码示例如下:
import json
# 假设data是从网页爬取的json数据字符串
data = '{"name": "Tom", "age": 18}'
# 使用json.loads()将字符串转换为字典
dict_data = json.loads(data)
# 打印转换后的字典数据
print(dict_data)
如果无法将json字符串转换为字典,可以尝试先使用json.load()将json文件加载为字符串,然后再使用json.loads()将字符串转换为字典。
如果json字符串中包含中文或其他特殊字符,可能会导致转换失败,此时可以指定json.loads()中的参数ensure_ascii=Flase,这样可以保持中文、特殊字符等原样输出。代码示例如下:
# 假设data中包含中文字符
data = '{"name": "小明", "age": 18}'
# 指定ensure_ascii参数为False
dict_data = json.loads(data, ensure_ascii=False)
# 打印转换后的字典数据
print(dict_data)
以上是针对如何将字符串转换为字典的解决方案,具体到参考资料中的问题内容,可以按照参考资料中的提取方法获取相应的json数据字符串,然后通过json.loads()将其转换为字典进行处理。例如代码示例如下:
import json
import requests
# 请求商品价格json
p = requests.get('https://p.3.cn/prices/mgets?skuIds=J_' + product_id, headers=header, proxies=random.choice(proxy_list))
# 获取商品价格
product_dict = json.loads(p.text)
# 请求评论json
c = requests.get('https://club.jd.com/comment/productCommentSummaries.action?referenceIds=' + product_id, headers=header, proxies=random.choice(proxy_list))
comment_dict = json.loads(c.text.split('[')[-1].split(']')[0])
以上代码示例中,分别使用requests模块发送请求获取商品价格和评论的json数据字符串,然后使用json.loads()将其转换为字典进行处理。