加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php curl 抓取页面几种方法说明

发布时间:2022-02-14 00:54:38 所属栏目:PHP教程 来源:互联网
导读:curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等,但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者是登录以后的页面就比较困难了,是把PHP的主页取回放到一个文件中. 例 1,使用PHP的CURL模块取
  curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等,但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者是登录以后的页面就比较困难了,是把PHP的主页取回放到一个文件中.
 
  例 1,使用PHP的CURL模块取回PHP主页,代码如下:
 
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, "http://localhost/mytest/phpinfo.php");
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出
  $result=curl_exec($ch);
  curl_close($ch);  
  2,使用代理进行抓取
 
  为什么要使用代理进行抓取呢?以google为例吧,如果去抓google的数据,短时间内抓的很频繁的话,你就抓取不到了,google对你的ip地址做限制这个时候,你可以换代理重新抓,代码如下:
 
  <?php
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, "http://www.Cuoxin.com");
   curl_setopt($ch, CURLOPT_HEADER, false);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
   curl_setopt($ch, CURLOPT_PROXY, 125.21.23.6:8080);
   //url_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');如果要密码的话,加上这个
   $result=curl_exec($ch);
   curl_close($ch);
   ?>
  3,post数据后,抓取数据
 
  单独说一下数据提交数据,因为用 curl的时候,很多时候会有数据交互的,所以比较重要的,代码如下:
 
  <?php
   $ch = curl_init();
   /*在这里需要注意的是,要提交的数据不能是二维数组或者更高
   *例如array('name'=>serialize(array('tank','zhang')),'sex'=>1,'birth'=>'20101010')//开源代码Cuoxin.com
   *例如array('name'=>array('tank','zhang'),'sex'=>1,'birth'=>'20101010')这样会报错的*/
   $data = array('name' => 'test', 'sex'=>1,'birth'=>'20101010');
   curl_setopt($ch, CURLOPT_URL, 'http://localhost/mytest/curl/upload.php');
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
   curl_exec($ch);
   ?>
  在 upload.php文件中,print_r($_POST);利用curl就能抓取出upload.php输出的内容Array ( [name] => test [sex] => 1 [birth] => 20101010 )
 
  4,抓取一些有页面访问控制的页面,页面访问控制的3种方法.
 
  分类目录: apache/nginx
 
  apache 页面访问控制:为什么要进行这样的控制呢,给不同的人看不同的东西,对信息进行保护,虽然这种保护比较低级,多多少少还是有点用的.
 
  一,用htpasswd命令,产生权限控制文件,代码如下:
 
  1.[zhangy@BlackGhost test]$ htpasswd -c ./access tank  //生成一个密码文件 ,-c是新建一个文件  htpasswd -h可查看    
  2.New password:            //提示输入密码    
  3.Re-type new password:        //重复密码    
  4.Adding password for user tank    
  5.[zhangy@BlackGhost test]$ cat access    //查看一下密码文件    
  6.tank:Uj5B3qIF/BNdI      //用户名是明文的,密码是加密的。   
  [zhangy@BlackGhost test]$ htpasswd -c ./access tank  //生成一个密码文件 ,-c是新建一个文件  htpasswd -h可查看
  New password:            //提示输入密码
  Re-type new password:        //重复密码
  Adding password for user tank
  [zhangy@BlackGhost test]$ cat access    //查看一下密码文件
  tank:Uj5B3qIF/BNdI      //用户名是明文的,密码是加密的。到这儿密码文件是生成好了。
  二,页面访问控制方法
 
  1,能过修改httpd.conf或者是httpd-vhosts.conf来进行配置,代码如下:
 
  listen 10004
  NameVirtualHost *:10004
  <VirtualHost *:10004>
   DocumentRoot "/home/zhangy/www/test"
   ServerName *:10004
   BandwidthModule On
   ForceBandWidthModule On
   Bandwidth all 1024000
   MinBandwidth all 50000
   LargeFileLimit * 500 50000
   MaxConnection all 2
  
   ErrorLog "/home/zhangy/apache/blog.51yip.com.com-error.log"
   CustomLog "/home/zhangy/apache/blog.51yip.com-access.log" common
  //看一下,下面的配置
   <Directory /home/zhangy/www/test>
   AuthType Basic
   AuthName "access test"
   AuthUserFile /home/zhangy/www/test/access
   Require valid-user
   </Directory>
  
  </VirtualHost>
  2,我们可以利用.htaccess文件来进行控制,在test的根目录下面建一个.htaccess的文件,代码如下:
 
  [zhangy@BlackGhost test]$ vi .htaccess   //打开个文件 ,添加权限内容
  [zhangy@BlackGhost test]$ cat .htaccess  //下面就是.htaccess的内容
   AuthType Basic
   AuthName "access test"
   AuthUserFile /home/zhangy/www/test/access
   Require valid-user
  3,不用密码文件,也可以进行访问控制,代码如下:
 
  define('ADMIN_USERNAME','tank');     // Admin Username
  define('ADMIN_PASSWORD','tank');      // Admin Password
  
  //log check
  if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
   $_SERVER['PHP_AUTH_USER'] != ADMIN_USERNAME ||$_SERVER['PHP_AUTH_PW'] != ADMIN_PASSWORD) {
   Header("WWW-Authenticate: Basic realm="access test"");
   Header("HTTP/1.0 401 Unauthorized");
  
   echo <<<EOB
   <html><body>
   <h1>Rejected!</h1>
   <big>Wrong Username or Password!</big>
   </body></html>
  EOB;
   exit;
  }
  curl相关函数列表:
 
  curl_init — 初始化一个CURL会话
 
  curl_setopt — 为CURL调用设置一个选项
 
  curl_exec — 执行一个CURL会话
 
 
  curl_init()函数将初始化一个新的会话,返回一个CURL句柄供 curl_setopt(), curl_exec(),和 curl_close() 函数使用,如果可选参数被提供,那么CURLOPT_URL选项将被设置成这个参数的值,你可以使用curl_setopt()函数人工设置.
 
  例 1.初始化一个新的CURL会话,且取回一个网页,代码如下:
 
  $ch = curl_init();
  curl_setopt ($ch, CURLOPT_URL, “http://www.Cuoxin.com/”);
  curl_setopt ($ch, CURLOPT_HEADER, 0);
  curl_exec ($ch);
  curl_close ($ch);
 

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读