beautifulsoup从javascript变量获取URL

时间:2014-11-20 13:28:17

标签: regex beautifulsoup

我试图通过beautifulsoup从javascript获取网址。我有以下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中尝试过以下语句,但是&#34; print m&#34;返回无。

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它似乎能够获得&#34; var abc_url ......&#34;的整行。基于上面的正则表达式,但在我的代码中,它不起作用。想知道我怎样才能得到这个的URL值?

谢谢

2 个答案:

答案 0 :(得分:3)

您无法使用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)

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

最后,re.search和re.match的返回类型都被称为匹配对象,其值为布尔值。当Match对象匹配时,group方法返回匹配组。 group(0)返回整个匹配,group(1)返回第一个带括号的子组,依此类推。

答案 1 :(得分:0)

空白是可能的问题,而且不需要//。这可能是问题(对不起,我现在没有python尝试它):

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