2012-01-12 98 views
1

我需要刮一个网页,在内嵌的JavaScript代码,比如内嵌JavaScript数组:刮网页和检索的JavaScript变量

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

什么是接近这一点,并有最终的最简单方法这些视频网址的PHP数组?

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

+0

我有几行使用file_get_contents并尝试了几个正则表达式。正则表达式,我不擅长。 – Nacho 2012-01-12 23:17:33

回答

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]); 
+0

谢谢,我会检查这一点。我认为它可以更容易,因为所有的视频总是.mov – Nacho 2012-01-12 23:37:25

+1

所以实际上你想要从该页面刮取.mov文件的所有链接? – 2012-01-12 23:40:08

+0

没错。 [dummytext] – Nacho 2012-01-12 23:42:05

1

您可以通过使用file_get_contents读取页面,然后使用正则表达式来检索url。 这是我知道的最简单的方法,特别是如果你知道视频的文件扩展名。 例:

<?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); 
+0

这正是我的第一个方法。我想没有太多的选择,是吗? – Nacho 2012-01-12 23:18:15