Heim  >  Artikel  >  Backend-Entwicklung  >  php 正则表达式抓取网页内容

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

WBOY
WBOYOriginal
2016-06-23 14:21:331392Durchsuche

php 抓取网页内容优化

   我想在youku网抓取高清视频的链接,然后发到手机客户端那里,可是抓取的时间不理想(大概50个视频,电脑抓取显示在网页都要6秒多,发送到手机更要30秒),想问有什么优化方法呢?

回复讨论(解决方案)

换光纤    !

楼主是要抓链接吧,不是抓视频内容吧,用CURL

楼主是要抓链接吧,不是抓视频内容吧,用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 ([^ alt="php 正则表达式抓取网页内容" >]*)\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秒很便宜了

foreach ($video as $key)
{
    $nextContent=file_get_contents($nextUrl);
    ...

我说换光纤吧,循环地 file_get_contents,6秒很便宜了
?丝换不起

用curl_multi_exec()并发抓取

用curl_multi_exec()并发抓取
虽然还没弄好,但是大神提供了思路,也提供我学习的方向!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn