使用re.findall解析javascript - javascript

因此,我有几个要解决的问题。

首先,我尝试解析从html获取的此javascript。

  $(document).ready(function(){
        $('#commodity-show-thumbnails')。bxSlider({模式:“垂直”,自动:
  false,控制项:true,寻呼机:false,minSlides:4,maxSlides:4
  moveSlides:1,slideWidth:250});
        itemSelector('商品展示形式','商品展示添加购物车提交',
  [['color','Choose color'],['size','Choose size']],{“ 39805”:{
  “ params”:[“ Smokey Blue / Mica Blue”,“ 36”]},“ 39806”:{“ params”:
  [“ Smokey Blue / Mica Blue”,“ 36,5”]},“ 39807”:{“ params”:[“ Smokey
  蓝/云母蓝“,” 37,5“]},” 39808“:{” params“:[”烟熏蓝/云母
  蓝色“,” 38“]},” 39809“:{”参数“:[”烟熏蓝/云母蓝“,
  “ 38,5”]},“ 39810”:{“ params”:[“烟熏蓝/云母蓝”,“ 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],“主推车”,
  “商品展示图片”); });

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

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

print(final)

我得到以下输出

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

但是现在我不知道该怎么做,我想找到这个值39805的值

{“ 39805”:{“ params”:[“ Smokey Blue / Mica Blue”,“ 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

如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript

我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…

打印二维阵列 - javascript

我正在尝试打印子元素。在this example之后。怎么做?。$myarray = array("DO"=>array('IDEAS','BRANDS','CREATIVE','CAMPAIGNS'), "JOCKEY"=>a…

使用JS和PHP更改弹出窗口背景图像 - javascript

我有一个JS函数:function zoom(now) { document.getElementById("popup").style.display = "block"; document.getElementById("photos").style.backgroundImage = …

变更事件时道具无法正常工作 - javascript

我有一些代码,当用户从下拉列表中选择一个项目时,这会触发一个change事件,然后调用php页面进行处理。首次加载页面时,我选择一个项目,并在触发change事件时,这应更改所选select输入的占位符并禁用相同的输入:“#box_ffrtv”。但是,发生的事情是更改仅在我在下拉菜单中进行了第二选择之后才发生,然后更改了占位符并禁用了输入。我对jquery还…

使用Selenium和python在textBox中快速编写 - javascript

我正在使用Selenium和Python(Chorme驱动程序)在文本框中编写内容,但是有很多文本框,我需要它来更快地填充它们。我使用一系列driver.find_element_by_xpath("//input[@class='string required' and @id='order_billing_name…