知識點:
1、編碼設定、特殊字元處理
2、正規表示式提取json字串
3、遞迴列印json屬性值
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys, time
import urllib.request, requests, bs4
import re, json, demjson
import importlib
# 設定utf-8編碼
importlib.
reload
(sys)
# 特殊字元處理
non_bmp_map =
dict
.fromkeys(
range
(0x10000
, sys.maxunicode +1)
,0xfffd
)'''
斷點列印
'''def
dump
(msg)
:print
(msg)
os._exit(0)
'''解析jsonp格式為json
'''def
loads_jsonp
(jsonp)
:#jsonp = 'jsonp1()'
return json.loads(re.match(
".*?().*"
,str
(jsonp)
, re.s)
.group(1)
)'''
'''def
downfiles
(imglist)
:#fname = time.strftime("%y%m%d%h%m%s", time.localtime()) # 日期命名
x =0# 遍歷
for imgurl in imglist:
# 獲取獲得的從imglist中遍歷得到的imgurl
("第"
, x ,
"張")
print()
'''讀取詳情頁
'''def
getdetails
(url)
: res = requests.get(url)
downloadedlist =
res.raise_for_status(
) html = bs4.beautifulsoup(res.text,
'html5lib'
) data = html.select(
'.reveal-work-wrap > img'
)# 返回陣列
for path in data:
target = path.get(
'src'
)# 返回src屬性
target = target.split(
'@')[0
]# 路徑處理
# 加入全域性陣列
print
(target)
downfiles(downloadedlist)
'''獲取頁面原始碼
'''def
geturl
(url)
: res = requests.get(url)
res.raise_for_status(
) html = bs4.beautifulsoup(res.text,
'html5lib'
)return html
'''解析json,僅一層
'''def
printjson
(json)
: obj = demjson.decode(json)
for name in obj:
print
(name,
':', obj[name]
)'''
遞迴解析json
'''def
dict_generator
(indict, pre=
none):
pre = pre[:]
if pre else
ifisinstance
(indict,
dict):
for key, value in indict.items():
ifisinstance
(value,
dict):
iflen
(value)==0
:yield pre+
[key,
'{}'
]else
:for d in dict_generator(value, pre +
[key]):
yield d
elif
isinstance
(value,
list):
iflen
(value)==0
:yield pre+
[key,'']
else
:for v in value:
for d in dict_generator(v, pre +
[key]):
yield d
elif
isinstance
(value,
tuple):
iflen
(value)==0
:yield pre+
[key,
'()'
]else
:for v in value:
for d in dict_generator(v, pre +
[key]):
yield d
else
:yield pre +
[key, value]
else
:yield indict
'''列印目標型別
'''def
typeof
(target)
:print
(type
(target)
)#jsonp = 'jsonp1()'
jsonp = geturl(
'')result = re.match(r'.*?().*'
,str
(jsonp)
, re.s)
.group(1)
# 利用遞迴解析json
result = result.translate(non_bmp_map)
#特殊字元處理
svalue = json.loads(result)
for i in dict_generator(svalue)
:print
('.'
.join(i[0:
-1])
,':'
, i[-1
])os._exit(
0)
遞迴解析Json字串
json.parsearray string 將json字串解析為jsonarray物件 parseobject string 將json字串解析為jsonobject物件 jsonobject繼承json,所以json有的方法,jsonobject也有。json的優點 可以像map一樣取資料,可以...
python 解析多層json
原始檔案內容 channels 3 height 1080 width 1920 修改並儲存 coding utf 8 import os import json 獲取目標資料夾的路徑 filedir r j numberdata mrcnnhik test 獲取資料夾中的檔名稱列表 filenam...
Python解析JSON詳解
json 函式 使用 json 函式需要匯入 json 庫 import json。函式 描述 json.dumps 將 python 物件編碼成 json 字串 json.loads 將已編碼的 json 字串解碼為 python 物件 json.dumps 語法 json.dumps obj,s...