干货分享,灵感创作,不定期更新,敬请期待。

php视频抓取

php xhq 1424℃ 0评论

最近做个项目需要抓取yy视频,

  • 1,curl函数模拟浏览器获取代码
  • 2代码输出到前端,浏览器进行处理
  • 3把一些不必要的部分用js去掉

首先抓取到的代码,你会发现某些资源文件用的是相对路径,这里提供两种做法,1、把相应的资源放到自己网站的相应目录,2、把相对路径换为绝对路径,这里采取第二种做法。

<?php

/**
*
*/
class ClassName
{

function __construct()
{
# code…
//$url = ‘www.baidu.com’;
$url = ‘ws.3g.yy.com/s/live/share.html?u=647813659&sid=42238731&ssid=42238731&from=singlemessage&isappinstalled=0′;
$res = $this->https_request($url);
$pattern=”/<[img|IMG].*?src=[\”|\’]?(.*?)[\”|\’]?\s.*?>/i”;
$res = $this->chang_goodsimg_url($res,$pattern);
$pattern=”/<[link|LINK].*?href=[\”|\’]?(.*?)[\”|\’]?\s.*?>/i”;
$res = $this->chang_goodsimg_url($res,$pattern);
$pattern=”/<[script|SCRIPT].*?src=[\”|\’]?(.*?)[\”|\’]?\s.*?>/i”;
$res = $this->chang_goodsimg_url($res,$pattern);
// echo htmlspecialchars($res);exit;

//添加js文件,用于做后面的处理
$script = ‘<script src=”/script.js”></script>’;
$res = $this->addscript($res,$script);
echo $res;
}

//远程请求

protected function https_request($url,$data = null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERAGENT, “Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4″);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
//
public function chang_goodsimg_url($cont,$pattern=”){
$cont = stripslashes($cont);

// /* $pattern=”/<[img|IMG].*?src=[\’|\”](.*?(?:[\.gif|\.jpg|\.png|\.jpeg]))[\’|\”].*?[\/]///*?”;*/
/* $pattern=”/<[img|IMG].*?src=[\”|\’]?(.*?)[\”|\’]?\s.*?>/i”;*/
preg_match_all($pattern,$cont,$match);
$listimg = $match[1];
// $this->dump($listimg,’ddd’);exit;
//过滤数据
$imglisttemp = array();
foreach($listimg as $k =>$v){
if((strpos($v,’http://ws.3g.yy.com’)===false)){
$imglisttemp[] = $v;
}
}

//不存在链接直接返回原字符串
if(empty($imglisttemp)){
return $cont;
}

//去掉重复数据
$imglisttemp = array_unique($imglisttemp);
// $this->dump($imglisttemp,’d’);exit;
//替换链接
foreach($imglisttemp as $k =>$v){
$cont = str_replace($v,’http://ws.3g.yy.com’.$v,$cont);
}
// str_replace(search, replace, subject)
return $cont;
}
protected function addscript($cont,$script){
return substr_replace($cont, $script.'</html>’, -7);
// substr_replace(string, replacement, start)
}
function dump($array,$flag=false){
if($flag){
echo $flag.'<br>’;
}
$len = count($array);
for($i=0;$i<$len;$i++){
echo $i.’->’.$array[$i];
echo ‘<br>’;
}
}

}

new ClassName();

当然,数据已经拿到了,前端要什么效果,可以自行处理,可以在后端处理给body加上隐藏属性,等前端处理完再显示,如果还想折腾的话可以先在后端处理把相应的视频加载需要的代码截取出来再放到前端处理,

备注,微信浏览器实验过(pc行不通,地址:http://dwz.cn/2epXZS)

转载请注明:爱游思 » php视频抓取

喜欢 (1)

您必须 登录 才能发表评论!