beautifulsoup 从 javascript 变量中获取 URL

Bih*_*eng 3 regex beautifulsoup

我正在尝试通过 beautifulsoup 从 javascript 获取 URL。我有以下 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>
Run Code Online (Sandbox Code Playgroud)

我在 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           
Run Code Online (Sandbox Code Playgroud)

使用RegExr似乎能够获得基于上述正则表达式的整行“var abc_url...”,但在我的代码中它不起作用。想知道如何获取此 URL 值?

谢谢

ofr*_*mel 9

你不能用 BeautifulSoup 解析 Javascript。本质上,您可以使用 BS 获取脚本标记的内容,然后开始使用 Stock python 将 Javascript 作为文本处理。就像使用 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)
Run Code Online (Sandbox Code Playgroud)

请务必使用 re.search 而不是 re.match,因为 re.match 仅匹配字符串的开头,但您的字符串中有前导空格。并从正则表达式字符串中删除斜杠。

最后, re.search 和 re.match 的返回类型都是所谓的 Match 对象,它们的计算结果为布尔值。当匹配匹配对象时,group 方法返回匹配组。group(0) 返回整个匹配,group(1) 返回第一个带括号的子组,依此类推。