抓取网页并检索javascript变量

时间:2012-01-12 23:05:47

标签: php javascript screen-scraping

我需要抓一个内嵌javascript代码嵌入javascript数组的网页,例如:

<script>
    var videos = new Array();
    videos[0] = 'http://myvideos.com/video1.mov'; 
    videos[1] = ....
    ....
</script>

最简单的方法是什么,最终得到这些视频网址的PHP数组?

编辑: 所有视频都是.mov扩展名。

2 个答案:

答案 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]);