как извлечь переменные javascript с помощью python bs4

#python #regex #web-scraping #beautifulsoup

Вопрос:

 <script type="text/javascript">var csrfMagicToken = "sid:bf8be784734837a64a47fcc30b9df99,162591180";var csrfMagicName = "__csrf_magic";</script>
 

Приведенный выше тег скрипта взят с веб-страницы.

 script = soup.find_all('script')[5]
 

Используя приведенную выше строку кода,я смог извлечь тег скрипта, который мне нужен, но мне нужно извлечь значения переменных в скрипте python, я использую BeautifulSoup в своем скрипте python для извлечения данных.

Комментарии:

1. Пожалуйста, назовите URL-адрес?

Ответ №1:

Вы могли бы использовать

 (?:var|let)s (w )s*=s*"([^"] )"
 

Смотрите демонстрацию на regex101.com.


Примечание: Однако в целом использование регулярных выражений в коде имеет несколько недостатков. Например, с учетом вышеизложенного, sth. подобное let x = -10; не будет совпадать, но будет полностью допустимым JavaScript кодом. Кроме того, одинарные кавычки не поддерживаются (пока) — это полностью зависит от вашего фактического ввода.


Тем не менее, вы могли бы пойти на:

 (?:var|let)s 
(?P<key>w )s*=s*
(['"])?(?(2)(?P<value1>. ?)2|(?P<value2>[^;] ))
 

Смотрите еще одну демонстрацию на regex101.com.


Это по-прежнему оставляет вас беспомощными против экранированных кавычек, таких как let x = "some " string"; объявления переменных в комментариях или против них. В общем, отдайте предпочтение решению синтаксического анализатора.

Комментарии:

1. Спасибо за попытку, я преобразовал «скрипт» в строку и использовал нарезку строк,это сработало для меня