php 正则表达式抓取网页内容

ancc4 2013-09-09 12:27:18
我想在youku网抓取高清视频的链接,然后发到手机客户端那里,可是抓取的时间不理想(大概50个视频,电脑抓取显示在网页都要6秒多,发送到手机更要30秒),想问有什么优化方法呢?
...全文
278 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ancc4 2013-09-11
  • 打赏
  • 举报
回复
引用 10 楼 hengyu654 的回复:
用curl_multi_exec()并发抓取
虽然还没弄好,但是大神提供了思路,也提供我学习的方向!
hengyu654 2013-09-10
  • 打赏
  • 举报
回复
用curl_multi_exec()并发抓取
ancc4 2013-09-10
  • 打赏
  • 举报
回复
引用 8 楼 snmr_com 的回复:
foreach ($video as $key) { $nextContent=file_get_contents($nextUrl); ... 我说换光纤吧,循环地 file_get_contents,6秒很便宜了
屌丝换不起
ImN1 2013-09-10
  • 打赏
  • 举报
回复
foreach ($video as $key) { $nextContent=file_get_contents($nextUrl); ... 我说换光纤吧,循环地 file_get_contents,6秒很便宜了
ancc4 2013-09-10
  • 打赏
  • 举报
回复
引用 6 楼 jordan102 的回复:
你可以把你的代码贴出来,看有没有可优化的地方。

<?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));
以上就是全部代码了..
ImN1 2013-09-09
  • 打赏
  • 举报
回复
换光纤 !
一起混吧 2013-09-09
  • 打赏
  • 举报
回复
你可以把你的代码贴出来,看有没有可优化的地方。
ancc4 2013-09-09
  • 打赏
  • 举报
回复
引用 4 楼 ahui_lcm 的回复:
楼主是要抓链接吧,不是抓视频内容吧,用CURL
我现在用的是正则表达式抓取标签,时间太长了,你是说可以用curl来做? 有没有具体的思路
ahui_lcm 2013-09-09
  • 打赏
  • 举报
回复
楼主是要抓链接吧,不是抓视频内容吧,用CURL
艾薇儿More 2013-09-09
  • 打赏
  • 举报
回复
森之树 2013-09-09
  • 打赏
  • 举报
回复

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧