Как получить конкретное c json значение с помощью регулярного выражения - PullRequest
0 голосов
/ 04 апреля 2020

Я пытался выяснить, как получить значение "form:" из тега html, который выглядит следующим образом:

window.__webpack_public_path__='https://renderer-assets.helloWorld.com/';
window.__webpack_nonce__='ca0aa826f043cfc50cc24f6ae5a2fb4a';
window.rendererAssets='["https://renderer-assets.helloWorld.com/vendors~attachment~form-container.0ca60599ecb1b55e02bf.js","https://renderer-assets.helloWorld.com/vendors~libphonenumber~submission.7a28f3a3fe6660429a73.js","https://renderer-assets.helloWorld.com/country-data.62e9eca111db492e793d.js","https://renderer-assets.helloWorld.com/form-container.c34f13ff7b2a95addd81.js","https://renderer-assets.helloWorld.com/renderer.c8aaed3fb2c5d344f80d.js","https://renderer-assets.helloWorld.com/submission.a2f19d1069d330fd0866.js","https://renderer-assets.helloWorld.com/vendors~form-container.9853dbb220cd33f30c2f.js"]';
window.rendererData= {
    scriptSrc: 'https://renderer-assets.helloworld.com/renderer.c8aaed3fb2c5d344f80d.js',
    rootDomNode: 'root',
    form: {
        "id":"Z3PvTW",
        "title":"TESTING",
        "theme": {
            "id":"xwizbR",
            "font":"Oswald",
            "name":"Plain Blue (copy)",
            "colors": {
                "question": "#3D3D3D", "answer": "#000000", "button": "#000000", "background": "#FFFFFF"
            }
            ,
            "has_transparent_button":false,
            "visibility":"private"
        }
        ,
        "workspace": {
            "href": "https:\u002F\u002Fapi.helloWorld.com\u002Fworkspaces\u002FnutqqY"
        }
        ,
        "settings": {
            "is_public":true,
            "is_trial":false,
            "language":"en",
            "progress_bar":"proportion",
            "show_progress_bar":true,
            "show_helloWorld_branding":true,
            "meta": {
                "allow_indexing": false
            }
        }
        ,
        "welcome_screens":[ {
            "ref":"a13820db-af60-40eb-823d-86cf0f20299b",
            "title":"TESTING VALUES",
            "properties": {
                "show_button": true, "button_text": "Start"
            }
        }
        ],
        "thankyou_screens":[ {
            "ref":"default_tys",
            "title":"Done! Your information was sent perfectly.",
            "properties": {
                "show_button": false, "share_icons": false
            }
        }
        ],
        "fields":[ {
            "id":"kxWycKljdtBq",
            "title":"FIRST NAME",
            "ref":"27f403f7-8c5b-4e18-b19d-1501e8f137ee",
            "validations": {
                "required": true
            }
            ,
            "type":"short_text"
        },
        {
            "id":"WEXCnZ7EAFjN",
            "title":"LAST NAME",
            "ref":"a6bf6d83-ee37-4870-b6c5-779822290cde",
            "validations": {
                "required": true
            }
            ,
            "type":"short_text"
        }

        ],
        "_links": {
            "display": "https:\u002F\u002Fautosnkr.helloWorld.com\u002Fto\u002FZ3PvTW"
        }
    }
    ,
    trackingInfo: {
        "segmentKey": "9at6spGDYXelHDdz4r0cP73b3wV1f0ri", "accountId": 12587347, "accountLimitName": "Essentials", "userId": 12586030
    }

Моя точка зрения заключается в том, чтобы иметь возможность получить всю форму: значение в json .loads, где позже я могу изменить его так, как я хочу, но до этого мне нужно иметь возможность получить значение form:, и я попытался сделать следующее:

regexTest = re.compile(r'form:\((.*?)\);', re.DOTALL)
data = regexTest.findall(response.text)

, который только что вернулся []

Мой вопрос: как я могу получить целое значение form: json в getAllForm = json.loads(...)?

Ответы [ 2 ]

1 голос
/ 04 апреля 2020
match = re.search(r"form: ({(\s+.*){1,}\})", response.text).group(1)
print(match)

Вывод:

{
        "id":"Z3PvTW",
        "title":"TESTING",
        "theme": {
            "id":"xwizbR",
            "font":"Oswald",
            "name":"Plain Blue (copy)",
            "colors": {
                "question": "#3D3D3D", "answer": "#000000", "button": "#000000", "background": "#FFFFFF"
            }
            ,
            "has_transparent_button":false,
            "visibility":"private"
        }
        ,
        "workspace": {
            "href": "https://api.helloWorld.com/workspaces/nutqqY"
        }
        ,
        "settings": {
            "is_public":true,
            "is_trial":false,
            "language":"en",
            "progress_bar":"proportion",
            "show_progress_bar":true,
            "show_helloWorld_branding":true,
            "meta": {
                "allow_indexing": false
            }
        }
        ,
        "welcome_screens":[ {
            "ref":"a13820db-af60-40eb-823d-86cf0f20299b",
            "title":"TESTING VALUES",
            "properties": {
                "show_button": true, "button_text": "Start"
            }
        }
        ],
        "thankyou_screens":[ {
            "ref":"default_tys",
            "title":"Done! Your information was sent perfectly.",
            "properties": {
                "show_button": false, "share_icons": false
            }
        }
        ],
        "fields":[ {
            "id":"kxWycKljdtBq",
            "title":"FIRST NAME",
            "ref":"27f403f7-8c5b-4e18-b19d-1501e8f137ee",
            "validations": {
                "required": true
            }
            ,
            "type":"short_text"
        },
        {
            "id":"WEXCnZ7EAFjN",
            "title":"LAST NAME",
            "ref":"a6bf6d83-ee37-4870-b6c5-779822290cde",
            "validations": {
                "required": true
            }
            ,
            "type":"short_text"
        }

        ],
        "_links": {
            "display": "https://autosnkr.helloWorld.com/to/Z3PvTW"
        }
    }
    ,
    trackingInfo: {
        "segmentKey": "9at6spGDYXelHDdz4r0cP73b3wV1f0ri", "accountId": 12587347, "accountLimitName": "Essentials", "userId": 12586030
    }

Теперь о загрузке вашего JSONP dict в действительный JSON dict.

Проверьте, что key, то есть trackingInfo, фактически отсутствует trackingInfo, чтобы быть как "trackingInfo". Так что вам нужно процитировать его, так как это будет считаться дубликатом. Пожалуйста, отметьте этот ответ

0 голосов
/ 04 апреля 2020

window.rendererData не является ни JSON объектом, ни какой-либо строкой.

Вы можете получить доступ к форме значения, обычно набирая window.rendererData.form.

Получить было бы сложно по элементу REGEX form значение из такой строки не знает фиксированную структуру объекта JSON. Вторая проблема в том, что с (.*?) вы игнорируете символы новой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...