JS 代码如下:
var pageConfig = {
compatible: true,
product: {
modules: ['address', 'prom', 'colorsize', 'buytype', 'baitiao', 'o2o', 'buybtn', 'track', 'suits', 'crumb', 'fittings', 'detail', 'contact', 'popbox', 'preview', 'info', 'imcenter', 'jdservice', 'commitments'],
skuid: 10243462096,
name: '\u5357\u6781\u4eba\u0020\u56db\u4ef6\u5957\u0020\u7eaf\u68c9\u5e8a\u54c1\u5957\u4ef6\u5168\u68c9\u5e8a\u4e0a\u7528\u54c1\u0020\u5e8a\u5355\u5f0f\u56db\u4ef6\u5957\u0020\u88f8\u5a5a\u65f6\u4ee3\u0020\u0031\u002e\u0035\u002d\u0031\u002e\u0038\u7c73\u5e8a\u9002\u7528\u0028\u88ab\u5957\u0032\u0030\u0030\u002a\u0032\u0033\u0030\u0063\u006d\u0029',
skuidkey: 'F9F3BECE978D5E0345181BC15517C53B',
href: '//item.jd.com/10243462096.html',
src: 'jfs/t1861/55/2425052793/508499/f647fc2d/57060cacNa18bc327.jpg',
cat: [1620, 1621, 1626],
forceAdUpdate: '8279',
brand: 155645,
pType: 2,
isClosePCShow: false,
isPop: true,
venderId: 215439,
shopId: '206668',
commentVersion: '3818',
specialAttrs: ["isFlashPurchase-2", "is7ToReturn-1"],
recommend: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
easyBuyUrl: "//easybuy.jd.com/skuDetail/newSubmitEasybuyOrder.action",
qualityLife: "//c.3.cn/qualification/info?skuId=10243462096&pid=10048844986&catId=1626",
colorSize: [{
"Color": "裸婚时代",
"SkuId": 10243462096,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "航海日记",
"SkuId": 10243462097,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "小清新",
"SkuId": 10243462098,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "海边拾趣",
"SkuId": 10243462099,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "洛卡小镇-桔",
"SkuId": 10243462100,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "似水流年",
"SkuId": 10243468801,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "宠爱-蓝",
"SkuId": 10243468802,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "花音",
"SkuId": 10243468803,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "爱丽丝",
"SkuId": 10243468804,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "浓浓情思",
"SkuId": 10243468805,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "韵律",
"SkuId": 10243468806,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "真爱永恒",
"SkuId": 10243468807,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "图拉朵",
"SkuId": 10243468808,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "彩色梦境-蓝",
"SkuId": 10243468809,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "格莱美-蓝",
"SkuId": 10243468810,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "夏日摩卡",
"SkuId": 10243468811,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "都市情怀",
"SkuId": 10243468812,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "花瓣雨",
"SkuId": 10243468813,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "水手",
"SkuId": 10243468814,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "爱的海洋",
"SkuId": 10243468815,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "化蝶",
"SkuId": 10243468816,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "嫁给我吧",
"SkuId": 10243468817,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "艾米丽",
"SkuId": 10243468818,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
},
{
"Color": "时尚爱-蓝",
"SkuId": 10243468819,
"Size": "1.5-1.8 米床适用(被套 200*230cm)"
}],
warestatus: 1,
tips: [{
"order": 3,
"tip": "支持 7 天无理由退货"
}],
desc: '//d.3.cn/desc/10048844986?cdn=2',
/**/
/**/
twoColumn: false,
isCloseLoop: true,
foot: '//d.3.cn/footer?type=common_config2',
shangjiazizhi: false
}
};
目前我用的是 PyV8 解析所有的字段(页面的字段内容不是全部相同),感觉效果不太理想,主要是两个方面: 1 )速度有点慢 2 )资源占用比较高,
想请教一下各位有什么更好的办法可以解析的更快,资源占用更少的
1
bdbai 2016-09-20 22:27:50 +08:00 via Android
开头和结尾去掉,用第三方 json 库直接加载试试。
|
2
techmoe 2016-09-20 22:39:02 +08:00 via Android
eval 直接把这个花括号变成 py 的 dict 然后赋值给变量?
|
3
zhuangzhuang1988 2016-09-20 22:39:47 +08:00
js:jsonfiy ==> python: json.loads
|
4
SlipStupig OP @bdbai 早试过了没用的
|
5
bdbai 2016-09-20 22:58:23 +08:00 via Android
|
6
bdbai 2016-09-20 22:59:24 +08:00 via Android
好吧你解决了啊。
|
7
ldbC5uTBj11yaeh5 2016-09-20 22:59:25 +08:00 1
一楼的方法可行,亲测可用,见下图。
https://cloud.githubusercontent.com/assets/195836/18675705/cf08a6bc-7f85-11e6-919b-66937d458731.gif 鉴于你这么言之凿凿,劳烦自己按一楼的提示再去找找吧。 |
8
binux 2016-09-20 23:01:25 +08:00
demjson
|
9
SlipStupig OP @jigloo 想知道“就不告诉你这个函数到底做了什么。。。。。”
|
10
bramblex 2016-09-21 08:41:42 +08:00
别打我,这东西自己手动实现一个 parser 也不是很大难度啊 /w\。
# PEG file __: 'var' 'pageConfig' '=' expr ';' EOF expression __: '{' object_body '}' __| '[' array_body ']' __| NUMBER __| BOLLEAN __| STRING object_body __: object_body ',' kev_value __| key_value key_value __: string ':' expression __| ID ':' expression array_body __: array_body ',' expression __| expression # LEX identifier ("_"|{letter})({letter}|{digit}|"_")* letter {lowercase}|{uppercase} lowercase [a-z] uppercase [A-Z] digit [0-9] string {string_double}|{string_single} string_double '"'{stringitem_double}*'"' string_single "'"{stringitem_single}*"'" stringitem_double {stringchar_double}|{escapeseq} stringitem_single {stringchar_single}|{escapeseq} stringchar_single [^\\\n\'] stringchar_double [^\\\n\"] escapeseq \\. /** numbers **/ integer {decinteger}|{hexinteger}|{octinteger} decinteger ([1-9]{digit}*) hexinteger "0"[x|X]{hexdigit}+ octinteger "0"[o|O]?{octdigit}+ bininteger "0"[b|B]({bindigit}+) hexdigit {digit}|[a-fA-F] octdigit [0-7] bindigit [0|1] /** floats **/ floatnumber {exponentfloat}|{pointfloat} exponentfloat ({digit}+|{pointfloat}){exponent} pointfloat ({digit}*{fraction})|({digit}+".") fraction "."{digit}+ exponent [e|E][\+|\-]{digit}+ /** booleans **/ boolean "true"|"false" symbols "="|":"|","|";" brackets "["|"]"|"{"|"}" /** whitespaces **/ whitespaces ([\ \t\f\n])+ <<EOF>> return 'EOF' {whitespaces} /** skip **/ {symbols|brackets} return yytext {floatnumber} return 'NUMBER' {integer} return 'NUMBER' {boolean} return 'BOOLEAN' {string} return 'STRING' {identifier} return 'ID' |