php 正则表达式抓取网页内容 我想在youku网抓取高清视频的链接,然后发到手机客户端那里,可是抓取的时间不理想(大概50个视频,电脑抓取显示在网页都要6秒多,发送到手机更要30秒),想问有什么优化方法呢?php 抓取网页内容优化 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主是要抓链接吧,不是抓视频内容吧,用CURL 我现在用的是正则表达式抓取标签,时间太长了,你是说可以用curl来做?有没有具体的思路 <?php$url="http://m.youku.com/wap/";//$reg1="/^<a\s*href=\"(.*?)version=2\">$/i";$reg1="/<a\s*href=\"(.*?)version=2\"(.*?)>(.*?)<\/a>/i";//获取视频链接$reg2="/<img([^>]*)\s*class=\"imgdetail\"\s*src=('|\")([^'\"]+)('|\")/i";$reg3="<a\s*href=\"(.*?)&format=3gphd\"\s*id=\"click_play\"\s*>";$reg4= "/<p\s*class=\"videotitle\".*?>.*?<\/p>/i";//获取视频标题$content=file_get_contents($url);preg_match_all($reg1, $content,$matches);$video=$matches[0];//首页视频的链接$resultArray=array();//装载所有数据的数组//$subArray=array();//子数组foreach ($video as $key){ //处理url,得到视频的点击网址 $position=strpos($key, "href"); $substring=substr($key, $position+11); $pos=strpos($substring, ">"); $link=substr($substring, 0,$pos-1); $nextUrl=$url.$link; $nextContent=file_get_contents($nextUrl); //获取视频图片 preg_match_all($reg2, $nextContent,$img); $img_arr=$img[0]; foreach ($img_arr as $arr) { $position=strpos($arr, "src"); $sub=substr($arr, $position+5); $last=substr($sub, 0,$pos); } //获取视频高清点播地址 preg_match_all($reg3, $nextContent,$vids); $video_arr=$vids[0]; $vid=$video_arr[0]; $position=strpos($vid, "href"); $v_string=substr($vid, $position+11); $pos=strpos($v_string, "\""); $add=substr($v_string, 0,$pos); $video_url=$url.$add; //获取视频的标题 preg_match_all($reg4, $nextContent,$match); $title=$match[0]; $r=serialize($title); $position=mb_strpos($r, "</p>"); $sub=substr($r, 0,$position); $pos=mb_strrpos($sub, ">"); $til=substr($sub, $pos+1); $subArray=array('image'=>$last,'video'=>$video_url,'title'=>$til); array_push($resultArray, $subArray);}$resultJson=json_encode($resultArray);file_put_contents('web.txt', print_r($resultJson,true));以上就是全部代码了.. foreach ($video as $key){ $nextContent=file_get_contents($nextUrl); ...我说换光纤吧,循环地 file_get_contents,6秒很便宜了 smarty config_load 和 自定义函数 报错 有没有实现这样功能的相关数组函数? 请问如何在php中定某一天弹出网页? 新手求教,在先等 记录登陆信息 iframe 表单的参数传递 关于@fsockopen jpgraph使用问题 关于session的问题 递归加遍历文件,如何以数组形式返回文件 急!session问题 GD 函数合成图片问题(一张jpg,一张png)
有没有具体的思路
<?php
$url="http://m.youku.com/wap/";
//$reg1="/^<a\s*href=\"(.*?)version=2\">$/i";
$reg1="/<a\s*href=\"(.*?)version=2\"(.*?)>(.*?)<\/a>/i";//获取视频链接
$reg2="/<img([^>]*)\s*class=\"imgdetail\"\s*src=('|\")([^'\"]+)('|\")/i";
$reg3="<a\s*href=\"(.*?)&format=3gphd\"\s*id=\"click_play\"\s*>";
$reg4= "/<p\s*class=\"videotitle\".*?>.*?<\/p>/i";//获取视频标题$content=file_get_contents($url);
preg_match_all($reg1, $content,$matches);
$video=$matches[0];//首页视频的链接
$resultArray=array();//装载所有数据的数组
//$subArray=array();//子数组
foreach ($video as $key)
{
//处理url,得到视频的点击网址
$position=strpos($key, "href");
$substring=substr($key, $position+11);
$pos=strpos($substring, ">");
$link=substr($substring, 0,$pos-1);
$nextUrl=$url.$link;
$nextContent=file_get_contents($nextUrl);
//获取视频图片
preg_match_all($reg2, $nextContent,$img);
$img_arr=$img[0];
foreach ($img_arr as $arr)
{
$position=strpos($arr, "src");
$sub=substr($arr, $position+5);
$last=substr($sub, 0,$pos);
}
//获取视频高清点播地址
preg_match_all($reg3, $nextContent,$vids);
$video_arr=$vids[0];
$vid=$video_arr[0];
$position=strpos($vid, "href");
$v_string=substr($vid, $position+11);
$pos=strpos($v_string, "\"");
$add=substr($v_string, 0,$pos);
$video_url=$url.$add; //获取视频的标题
preg_match_all($reg4, $nextContent,$match);
$title=$match[0];
$r=serialize($title);
$position=mb_strpos($r, "</p>");
$sub=substr($r, 0,$position);
$pos=mb_strrpos($sub, ">");
$til=substr($sub, $pos+1);
$subArray=array('image'=>$last,'video'=>$video_url,'title'=>$til);
array_push($resultArray, $subArray);
}
$resultJson=json_encode($resultArray);
file_put_contents('web.txt', print_r($resultJson,true));以上就是全部代码了..
{
$nextContent=file_get_contents($nextUrl);
...我说换光纤吧,循环地 file_get_contents,6秒很便宜了