BeautifulSoup получить URL из переменной JavaScript

Я пытаюсь получить URL из JavaScript через BeautifulSoup. У меня есть следующий источник JavaScript

<script type="text/javascript">
            var abc_url = "http://www2.example.com/ar/send/0?tk=13_s&id=12345678&l=9";
            var etc = [
                    'http://xyz.example.com/content/1.png',
                     'http://xyz.example.com/content/2,png' ];
</script>

Я пробовал следующее утверждение в python, но "print m" возвращает None.

soup = BeautifulSoup(page)

p = re.compile('/var abc_url = (.*);/')        
all_script  = soup.find_all("script", {"src":False})
for individual_script in all_script:
    all_value =  individual_script.string        
    if all_value:            
        m = p.match(all_value)
        print m           

Используя RegExr, кажется, что можно получить всю строку "var abc_url..." на основе приведенного выше регулярного выражения, но в моем коде это не работает. Хотите знать, как я могу получить значение URL этого?

Спасибо

2 ответа

Решение

Возможно, что пробел является проблемой, а // не нужен. Это может быть проблемой (извините, у меня сейчас нет python, чтобы попробовать):

p = re.compile('var\s+abc_url\s+=\s+(.*);') 

Вы не можете разобрать Javascript с BeautifulSoup. По сути, вы можете получить содержимое тега script с помощью BS, а затем начать обработку Javascript как текста с использованием стандартного python. Как простая обработка строк с str.split или более сложная обработка с регулярными выражениями. Следующий код печатает искомую строку:

p = re.compile('var abc_url = (.*);')        
for script in soup.find_all("script", {"src":False}):
    if script:            
       m = p.search(script.string)
       print m.group(1)

Обязательно используйте re.search вместо re.match, потому что re.match совпадает только в начале строки, но у вас есть начальные пробелы в вашей строке. И удалите косые черты из строки регулярных выражений.

Наконец, возвращаемый тип как re.search, так и re.match - это так называемые объекты Match, которые оцениваются как логическое значение. При совпадении объекта Match метод group возвращает группы совпадений. group(0) возвращает все совпадение, group(1) первую подгруппу в скобках и так далее.

Другие вопросы по тегам