旗下导航:搜·么
当前位置:网站首页 > PHP问题 > 正文

php猎取页面内容的要领有哪些【php题目】

作者:搜搜PHP网发布时间:2019-11-26分类:PHP问题浏览:87


导读:PHP猎取网页内容的几种要领要领1:用file_get_contents以get体式格局猎取内容。<?php$url='http://www.domain...

PHP猎取网页内容的几种要领

要领1:用file_get_contents以get体式格局猎取内容。

<?php 
$url='http://www.domain.com/?para=123'; 
$html= file_get_contents($url); 
echo$html; 
?>

要领2:用file_get_contents函数,以post体式格局猎取url。

<?php 
$url= 'http://www.domain.com/test.php?id=123'; 
$data= array('foo'=> 'bar'); 
$data= http_build_query($data); 
$opts= array( 
'http'=> array( 
   'method'=> 'POST', 
   'header'=>"Content-type: application/x-www-form-urlencoded\r\n"  . 
       "Content-Length: "  . strlen($data) . "\r\n", 
   'content'=> $data 
)
); 
$ctx= stream_context_create($opts);
$html= @file_get_contents($url,'',$ctx);

假如须要再通报cookie数据,则把

'header'=>"Content-type: application/x-www-form-urlencoded\r\n"  .
"Content-Length: "  . strlen($data) . "\r\n",

修改成

'header'=>"Content-type: application/x-www-form-urlencoded\r\n" .
 "Content-Length: " .strlen($data) . "\r\n".
 "cookie:cookie1=c1;cookie2=c2\r\n";

即可。

要领3:用fopen翻开url,以get体式格局猎取内容。

<?php 
$fp= fopen($url,'r'); 
$header= stream_get_meta_data($fp);//猎取报头信息 
while(!feof($fp)) { 
$result.= fgets($fp, 1024); 
} 
echo"url header: {$header} <br>": 
echo"url body: $result"; 
fclose($fp); 
?>

相干引荐:《PHP入门教程》

要领4:用fopen翻开url,以post体式格局猎取内容。

<?php 
$data= array('foo2'=> 'bar2','foo3'=>'bar3'); 
$data= http_build_query($data); 
$opts= array(
'http'=> array( 
'method'=> 'POST',
'header'=>"Content-type: application/x-www-form-urlencoded\r\nCookie:cook1=c3;cook2=c4\r\n"  . 
"Content-Length: "  . strlen($data) . "\r\n", 
'content'=> $data 
) 
); 
$context= stream_context_create($opts); 
$html= fopen('http://www.test.com/zzzz.php?id=i3&id2=i4','rb',false, $context); 
$w=fread($html,1024);
echo$w; 
?>

要领5:用fsockopen函数翻开url,以get体式格局猎取完全的数据,包含header和body。

<?php 
functionget_url ($url,$cookie=false) 
{ 
$url= parse_url($url); 
$query= $url[path]."?".$url[query];
echo"Query:".$query;
$fp= fsockopen($url[host],$url[port]?$url[port]:80 , $errno,$errstr, 30); 
if(!$fp) {
returnfalse; 
}else{ 
$request= "GET $query HTTP/1.1\r\n";
$request.= "Host: $url[host]\r\n"; 
$request.= "Connection: Close\r\n"; 
if($cookie)$request.="Cookie:   $cookie\n"; 
$request.="\r\n"; 
fwrite($fp,$request); 
while(!@feof($fp)) { 
$result.= @fgets($fp, 1024); 
} 
fclose($fp); 
return$result; 
} 
} 
//猎取url的html部份,去掉header 
functionGetUrlHTML($url,$cookie=false) 
{ 
$rowdata= get_url($url,$cookie); 
if($rowdata) 
{ 
$body=stristr($rowdata,"\r\n\r\n"); 
$body=substr($body,4,strlen($body)); 
return$body; 
}    
   returnfalse; 
} 
?>

要领6:用fsockopen函数翻开url,以POST体式格局猎取完全的数据,包含header和body。

<?php 
functionHTTP_Post($URL,$data,$cookie,$referrer="") 
{ 
   // parsing the given URL 
$URL_Info=parse_url($URL);
   // Building referrer 
if($referrer=="")// if not given use this script as referrer 
$referrer="111"; 
   // making string from $data 
foreach($dataas
$key=>$value) 
$values[]="$key=".urlencode($value); 
$data_string=implode("&",$values);
   // Find out which port is needed - if not given use standard (=80) 
if(!isset($URL_Info["port"])) 
$URL_Info["port"]=80;   
   // building POST-request:
$request.="POST ".$URL_Info["path"]." HTTP/1.1\n";
$request.="Host: ".$URL_Info["host"]."\n"; 
$request.="Referer: $referer\n";
$request.="Content-type: application/x-www-form-urlencoded\n"; 
$request.="Content-length: ".strlen($data_string)."\n"; 
$request.="Connection: close\n";    
   $request.="Cookie:   $cookie\n";    
   $request.="\n"; 
$request.=$data_string."\n";    
   $fp= fsockopen($URL_Info["host"],$URL_Info["port"]); 
fputs($fp,$request); 
while(!feof($fp)) { 
$result.= fgets($fp, 1024); 
} 
fclose($fp);    
   return$result; 
} 
?>

要领7:运用curl库,运用curl库之前,能够须要检察一下php.ini是不是已翻开了curl扩大。

<?php
$ch= curl_init(); 
$timeout= 5;
curl_setopt ($ch, CURLOPT_URL, 'http://www.domain.com/');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents= curl_exec($ch);
curl_close($ch); 
echo$file_contents;
?>

这里收集了3种应用php取得网页源代码抓取网页内容的要领,我们能够依据实际须要选用。

1、运用file_get_contents取得网页源代码

这个要领最经常使用,只须要两行代码即可,异常简朴轻易。

参考代码:

<?php
$fh= file_get_contents('http://www.webkaka.com/');
echo $fh;
?>

2、运用fopen取得网页源代码

这个要领用的人也不少,不过代码有点多。

参考代码:

<?php
$fh = fopen('http://www.webkaka.com/', 'r');
if($fh){
    while(!feof($fh)) {
        echo fgets($fh);
    }
}
?>

3、运用curl取得网页源代码

运用curl取得网页源代码的做法,往往是须要更高请求的人运用,比方当你须要在抓取网页内容的同时,获得网页header信息,另有ENCODING编码的运用,USERAGENT的运用等等。

参考代码一:

<?php
// 建立一个新cURL资本
$ch = curl_init();
// 设置URL和响应的选项
curl_setopt($ch, CURLOPT_URL, "http://www.webkaka.com/");
curl_setopt($ch, CURLOPT_HEADER, false);
// 抓取URL并把它通报给浏览器
data=curlexec(ch);
echo $data;
//封闭cURL资本,而且开释系统资本
curl_close($ch);
?>

参考代码二:

<?php
$szUrl = "http://www.webkaka.com/";
$UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 
3.0.04506; 
.NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$curl = curl_init();
curl_setopt(curl,CURLOPTURL,szUrl);
curl_setopt($curl, CURLOPT_HEADER, 0);  //0示意不输出Header,1示意输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_ENCODING, '');
curl_setopt(curl,CURLOPTUSERAGENT,UserAgent);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
data=curlexec(curl);
echo $data;
//echo curl_errno($curl); //返回0时示意顺序实行胜利 怎样从curl_errno返回值猎取错误信息

以上就是php猎取页面内容的要领有哪些的细致内容,更多请关注ki4网别的相干文章!

标签:php获取页面内容