我需要抓一个内嵌javascript代码嵌入javascript数组的网页,例如:
<script>
var videos = new Array();
videos[0] = 'http://myvideos.com/video1.mov';
videos[1] = ....
....
</script>
最简单的方法是什么,最终得到这些视频网址的PHP数组?
编辑: 所有视频都是.mov扩展名。
答案 0 :(得分:1)
您可以通过使用file_get_contents阅读页面来获取此信息,然后使用正则表达式检索网址。 这是我所知道的最简单的方法,特别是如果您知道视频的文件扩展名。 例:
<?php
$file = file_get_contents('http://google.com');
$pattern = '/http:\/\/([a-zA-Z0-9\-\.]+\.[fr|com]+)/i';
preg_match_all($pattern, $file, $matches);
var_dump($matches);
答案 1 :(得分:1)
这有点复杂,但它只会获得那些videos[0] = 'http://myvideos.com/video1.mov';
$tmp=str_replace(array("\r","\n"),'',$original,$matches);
$pattern='/\<script\>\s+var\ videos.*?((\s*videos\[\d+\]\ \=\ .http\:\/\/.*?\;\s*?)+)(.*?)\<\/script\>/';
$a=preg_match_all($pattern,$tmp,$matches);
unset($tmp);
if (!$a) die("no matches");
$pattern="/videos\[\d+\]\ \=\ /";
$matches=preg_split($pattern,$matches[1][0]);
$final=array();
while(sizeof($matches)>0) {
$match=trim(array_shift($matches));
if ($match=='') continue;
$final[]=substr($match,1,-2);
}
unset($matches);
print_r($final);
来自OP的反馈在这里是简化版本:
$original=file_get_contents($url);
$pattern='/http\:\/\/.*?\.mov/';
$a=preg_match_all($pattern,$original,$matches);
if (!$a) die("no matches");
print_r($matches[0]);