合并字典;
dic_all=(dic1,**dic2)
如果有多个数据,一定是用列表先存,然后在转化成字典,自己起个键名
而且字典不能append
list_jy=[]#列表形式存储
for i in range(1,count):
list_jy.append(dic_json[key][i][key1])
dic_jy={"jy":list_jy}#字典形式存储
列表是为了存储多组数据,加一个自己命名的键就可以把列表存到字典中,这样就可以和其他字典合并了
postman用法
f12得到url(不是网页地址注意)
用request header不是response header选bulk edit直接复制粘贴,注意,requests header第一行可能不是键值对不要选
然后切换到key_value edit可以选哪些header要或者不要(点对勾)
如果是post请求,需要playload,在网页f12最下面,粘贴到postman 的body选项里的raw,
如果选get请求则不用,不同网页要用不同的方式爬,不然可能得不到正确结果
点击send获得相应
点击code生成代码
sav可以储存整个操作并命名,添加描述
对于url,playload要动态改变参数的,1是得到这个变化的参数,2是在url/playload="{ bulabula }"中替换相应代码换成“str(要替换的内容)”
payload1 = "{\"blockHash\":\"" + str(dict_json['blockHash']) + "\",\"txId\":\"" + str(dict_json['txList'][j]['txId']) + "\",\"transCode\":\"XE0008\",\"clientToken\":\"12345678\"}"
playload比较难搞,postman里可以自动生成,可以看到在上面的例子中,是\"transCode\",有下划线,而且是\" \"这样的像字典但是有下划线,替换时要注意
对于url,playload需要上一个相应的结果中的数据的,1是提取2是要把后面的url,playload,response的定义写在第一个的response后
像这样
for i in range(1,2000000): url1 = "http://io.inchain.org/block/height/"+str(i) headers1 = { 'Cache-Control': "no-cache", 'Postman-Token': "4e1cf563-351a-4c4c-b2a7-174f484542c0" } headers2 = { 'Cache-Control': "no-cache", 'Postman-Token': "364d761b-19a0-4239-9a7a-3d09836ebb03" } headers3 = { 'Accept-Language': "zh-CN,zh;q=0.9", 'Cache-Control': "no-cache", 'Postman-Token': "1025c6e7-2662-4e72-b3a7-542103fce393" } response1 = requests.request("GET", url1, headers=headers1) json_str1 = response1.content.decode() dict_json1 = json.loads(json_str1)#response1的三行代码 #这是下面两个url要用的第一个响应中的信息,提取出来 addres=dict_json1['block']['consensusAddress'] hashh=dict_json1['block']['merkleHash'] url2 = "http://io.inchain.org/address/hash/"+str(addres) url3 = "http://io.inchain.org/transaction/hash/"+str(hashh)#下面是第二个和第三个的三行代码 response2 = requests.request("GET", url2, headers=headers2) response3 = requests.request("GET", url3, headers=headers3) json_str2 = response2.content.decode() dict_json2 = json.loads(json_str2) json_str3 = response3.content.decode() dict_json3 = json.loads(json_str3)
对于{
”key“:value,
"key1":[
”kkey1":value,
...
],
}
获取格式是dic_json["key1"][0/1/2/3]["kkey1"]
postman 生成后
response = requests.request("POST", url, data=payload, headers=headers) json_str = response.content.decode() dict_json = json.loads(json_str)
三行代码获得json的dict形式
键一定是加单引号的
5行代码写入mongdb
rent_info 下面有xichain2
client = pymongo.MongoClient('localhost', 27017) rent_info = client['rent_info'] # 给数据库命名 xichain2 = rent_info['xichain2'] # 创建表单 for item in datas: # 将数据存入数据库 xichain2.insert_one(item)
datas是要存进去的所有信息,是一个列表,对xichain这个例子,把每个区块的信息做成一个字典然后存到列表里,
另外想说,可以自己做一个大字典一个一个提取,当然也可以获得dic_json后直接传到datas里面是一样的除非你不想要一些数据自己整理一下(dic_json以后就表示dict形式的json相应)doc_json本身就是字典,不然你也没法提取数据
dic = {'blockHash': dict_json['blockHash'], 'previousBlockHash':dict_json['previousBlockHash'], 'nextBlockHash': dict_json['nextBlockHash'], 'transTime': dict_json['transTime'], 'clientToken': dict_json['clientToken'], 'blockHeight': dict_json['blockHeight'], 'blockTime': dict_json['blockTime'], 'returnMsg': dict_json['returnMsg'], 'transactionCount': dict_json['transactionCount'], 'transCode': dict_json['transCode'], 'txList':jydata }
(自己做的大字典,一个一个提取)
txlist是一个列表,用了jydata大都拎出来弄一个列表
jydata=[] for j in range (0,dict_json['transactionCount']): jydata.append(dict_json['txList'][j])
(定义一定写在循环外面)