我试图通过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值?
谢谢
答案 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+(.*);')