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 值?
谢谢
你不能用 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) 返回第一个带括号的子组,依此类推。