php curl 抓取页面几种方法介绍

    xiaoxiao2021-04-19  188

    转载自:PHP100

    [导读] curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者是登录以后的页面就比较困难了。是把PHP的主

    curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者是登录以后的页面就比较困难了。

    是把PHP的主页取回放到一个文件中。

    例 1. 使用PHP的CURL模块取回PHP主页

     代码如下复制代码 <?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.hzhuti.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')  *例如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种方法

    页面访问控制的3种方法张映 发表于 2010-10-12

    分类目录: 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_close — 关闭一个CURL会话 curl_version — 返回当前CURL版本 curl_init — 初始化一个CURL会话 描述 int curl_init ([string url]) 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.zend.com/”); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_exec ($ch); curl_close ($ch); ?>

    转载请注明原文地址: https://ju.6miu.com/read-676245.html

    最新回复(0)