javascript - 使用 re.findall 解析 javascript

标签 javascript python html regex python-2.7

所以我有几个问题需要解决。

首先,我尝试解析从 html 获得的 JavaScript。

$(document).ready(function() { $('#commodity-show-thumbnails').bxSlider({ mode: 'vertical', auto: false, controls: true, pager: false, minSlides: 4, maxSlides: 4, moveSlides: 1, slideWidth: 250 }); itemSelector('commodity-show-form', 'commodity-show-addcart-submit', [['color', 'Choose color'], ['size', 'Choose size']], { "39805": { "params": ["Smokey Blue/Mica Blue", "36"]}, "39806": { "params": ["Smokey Blue/Mica Blue", "36,5"]}, "39807": { "params": ["Smokey Blue/Mica Blue", "37,5"]}, "39808": { "params": ["Smokey Blue/Mica Blue", "38"]}, "39809": { "params": ["Smokey Blue/Mica Blue", "38,5"]}, "39810": { "params": ["Smokey Blue/Mica Blue", "39"]}, "39811": { "params": ["Smokey Blue/Mica Blue", "40"]}, "39812": { "params": ["Smokey Blue/Mica Blue", "40,5"]}, "39814": { "params": ["Smokey Blue/Mica Blue", "42"]} }, [39805,39806,39807,39808,39809,39810,39811,39812,39814], 'main-cart', 'commodity-show-image'); });

res = re.findall(r'{ "params": (.+?)}', text)  # text is where javascript text is stored

final = [eval(i) for i in res]

print(final)

我得到以下输出

[['烟熏蓝/云母蓝', '36'], ['烟熏蓝/云母蓝', '36,5'], ['烟熏蓝/云母蓝', '37,5'], ['烟熏蓝/云母蓝', '38'], ['烟熏蓝/云母蓝', '38,5'], ['烟熏蓝/云母蓝', '39'], ['烟熏蓝/云母蓝', '39']蓝色', '40'], ['烟熏蓝/云母蓝', '40,5'], ['烟熏蓝/云母蓝', '42']]

但是现在我不知道如何从这里开始。我想从中找到这个值39805

{ "39805": { "params": ["烟蓝色/云母蓝", "36"]}.我该如何解析它,这样如果我正在寻找与 36 相关的值,它会给我 39805?

我很抱歉,但我对解析真的很糟糕,而且我对此还很陌生。

最佳答案

你可以这样得到36:

import re
import ast

a="""$(document).ready(function() { $('#commodity-show-thumbnails').bxSlider({ mode: 'vertical', auto: false, controls: true, pager: false, minSlides: 4, maxSlides: 4, moveSlides: 1, slideWidth: 250 }); itemSelector('commodity-show-form', 'commodity-show-addcart-submit', [['color', 'Choose color'], ['size', 'Choose size']], { "39805": { "params": ["Smokey Blue/Mica Blue", "36"]}, "39806": { "params": ["Smokey Blue/Mica Blue", "36,5"]}, "39807": { "params": ["Smokey Blue/Mica Blue", "37,5"]}, "39808": { "params": ["Smokey Blue/Mica Blue", "38"]}, "39809": { "params": ["Smokey Blue/Mica Blue", "38,5"]}, "39810": { "params": ["Smokey Blue/Mica Blue", "39"]}, "39811": { "params": ["Smokey Blue/Mica Blue", "40"]}, "39812": { "params": ["Smokey Blue/Mica Blue", "40,5"]}, "39814": { "params": ["Smokey Blue/Mica Blue", "42"]} }, [39805,39806,39807,39808,39809,39810,39811,39812,39814], 'main-cart', 'commodity-show-image'); });"""
b = re.findall(r'.*?({ ".*?} }).*}', a)[0]

d1 = ast.literal_eval(b)
print d1, '\n'

for a,b in d1.iteritems():
    if b['params'][1]=='36':
        print a

输出:

{'39809': {'params': ['Smokey Blue/Mica Blue', '38,5']}, '39808': {'params': ['Smokey Blue/Mica Blue', '38']}, '39805': {'params': ['Smokey Blue/Mica Blue', '36']}, '39807': {'params': ['Smokey Blue/Mica Blue', '37,5']}, '39806': {'params': ['Smokey Blue/Mica Blue', '36,5']}, '39812': {'params': ['Smokey Blue/Mica Blue', '40,5']}, '39814': {'params': ['Smokey Blue/Mica Blue', '42']}, '39810': {'params': ['Smokey Blue/Mica Blue', '39']}, '39811': {'params': ['Smokey Blue/Mica Blue', '40']}} 

39805

关于javascript - 使用 re.findall 解析 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41400382/

相关文章:

javascript - 使用 jasmine-node 在 Frisby JS 中忽略 child 测试

javascript - 延迟重定向页面

javascript - 在小书签中使用@import 和@font-face(适用于 Chrome,但不适用于 Firefox)

javascript - 从 React Native(android) 中的 .jar 文件访问方法

python - Pyparsing:检测具有特定结尾的标记

html - 如何使 <td> 在空格处中断并且仅在单词对于空格来说太大时才在单词中中断

javascript - 在 JavaScript 中格式化 HTML、CSS 和 JavaScript 代码的最佳方式是什么

python - 标准化之前/之后训练/测试多项式回归时的 RMSE 不同

python - 是否有用于 python 的 webkit2 模块?

javascript - 如何动态显示 div 而无需先将其加载到页面上?