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) первую подгруппу в скобках и так далее.