php curl 抓取页面几种方法介绍
发布:smiling 来源: PHP粉丝网 添加日期:2014-08-28 13:43:57 浏览: 评论:0
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.phpfensi.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')//开源代码phpfensi.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_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.phpfensi.com/”);
- curl_setopt ($ch, CURLOPT_HEADER, 0);
- curl_exec ($ch);
- curl_close ($ch);
Tags: php curl抓取页面 php抓取页面
相关文章
- ·PHP中通过Web 执行C/C++应用程序(2013-11-13)
- ·用PHP实现Ftp用户的在线管理(2013-11-13)
- ·用PHP自动把纯文本转换成Web页面(2013-11-13)
- ·用实例分析PHP5异常处理(2013-11-13)
- ·php5的simplexml解析错误(2013-11-13)
- ·PHP后门的隐藏技巧测试报告(2013-11-13)
- ·PHP缓存技术详谈(2013-11-27)
- ·利用PHP自定义错误处理器处理出错信息(2013-11-27)
- ·PHP作wap开发时遇到的问题(2013-11-27)
- ·php编写大型网站问题集(2013-11-27)
- ·php测试性能代码(2013-11-28)
- ·php 安全register globals设置为TRUE的危害(2013-11-28)
- ·XSLTProcessor 中 registerPHPFunctions 后无法调用 php 函数(2013-11-30)
- ·PHP中常用三种缓存技术(2013-11-30)
- ·新浪微博PHP版SDK的导致20007错误(2013-12-03)
- ·linux中phpMyAdmin错误提示Wrong permissions on configuration file, should no(2013-12-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)