python как пропарсить javascript строки?
Нужно пропарсить js код, и вытащить нужные значения.
js = """
"auth_token":"zI1NiJ9.eyJza","app_config":[],"return_auth_hash":null};
"""
Как я могу вытащить значение из auth_token?
Пытался через re+bs4 но не получилось
Скорее всего ошибка в этой строке
pattern = re.compile(r'\\"auth_token\\":\s*\\"(.*?)\\"', re.MULTILINE | re.DOTALL)
Ответы (3 шт):
Попробуйте через findall:
import re
js = """
"auth_token":"zI1NiJ9.eyJza","app_config":[],"return_auth_hash":null};
"""
p = re.compile("auth_token\":\s*\"(.*?)\"")
m = p.findall(js)
print(m) # ['zI1NiJ9.eyJza']
Вы скорее всего и искали через match, в данном случае есть проблемы со строкой из тройных кавычек.
Экранировать кавычки в питоне вообще не нужно, если строка у вас в одних кавычках ', а внутри строки другие кавычки ". Тем более, что экранирование и не будет работать как экранирование при использовании raw string (символ r перед строкой). А вы даже дважды пытаетесь кавычки экранировать, у вас в шаблоне в итоге просто получаются лишние символы \\, которых в самой строке, конечно, нет. Достаточно убрать ненужное экранирование кавычек и всё заработает:
pattern = re.compile(r'"auth_token":\s*"(.*?)"', re.MULTILINE | re.DOTALL)
Вывод:
['zI1NiJ9.eyJza']
Можно подпилить эту строку до вида корректного json, и разобрать с помощью соответствующего модуля:
js = """
"auth_token":"zI1NiJ9.eyJza","app_config":[],"return_auth_hash":null};
""".strip().rstrip(';')
js = '{' + js
import json
print(json.loads(js)['auth_token']) # Вывод: zI1NiJ9.eyJza