您的位置:首页 > 编程语言 > PHP开发

使用PHP%20cURL扩展模拟浏览器抓取网页

2010-05-28 13:24 281 查看
抓取网页内容,PHP内置了几个函数都可以实现,如file()、file_get_contents()等都支持URL参数。但要实现更复杂的操作,这些函数就无能为力了。
cURL是一个利用URL语法在命令行下工作的文件传输工具,cURL提供了一个PHP扩展,使用该扩展,可以完完全全地模拟浏览器操作,就像使用浏览器浏览一个网页一样,可以设置header内容、设置COOKIE数据、POST数据、上传文件、设置代理等。其实我们这里讨论的抓取网页内容,只是它的一个常用的应用罢了。
cURL官方网站:http://curl.haxx.se/
PHP cURL扩展:http://curl.haxx.se/libcurl/php/
Windows下添加该扩展很简单,只要载入php_curl.dll即可。去掉php.ini文件extension=php_curl.dll前面的分号,将php_curl.dll拷入PHP扩展目录或C:\Windows\system32目录下重启Web服务器即可。php_curl.dll在PHP的ZIP包中提供。
Linux下需要先安装cURL,一个方法是将其编译进PHP,编译配置时候加上--with-curl[=DIR],另一个方法是编译成PHP模块载入,编译cURL模块方法和编译其它PHP模块方法雷同,以下是基本的命令:
cd /path/to/php/source 进入PHP源码目录
cd ext/curl 进入cURL模块源码目录
/usr/local/php/bin/phpize 生成编译配置文件
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
编译完成生成curl.so,修改php.ini,将该模块载入:
extension="/path/to/extension/curl.so"
测试cURL扩展是否载入,新建PHP文件:
<?php
if(extension_loaded('curl')) {
echo 'cURL模块已载入!';
} else {
echo 'cURL模块未载入!';
}
?>
抓取网页的例子:
<?php
$url = 'http://www.baidu.com'; // 抓取网页URL
$ch = curl_init($url); // 初始化,返回一个handler
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 设置选项,有返回值
curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.cn/'); // 设置选项,来源页,这意味着可以伪造referer达到不可告人的目的


curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)'); // 设置选项,浏览器信息
$raw = curl_exec($ch); // 执行
curl_close($ch); // 关闭handler
echo $raw; // 输出结果
?>
curl_setopt()可设置很多选项,更多选项请参考PHP手册。
更多函数及其用法请参考PHP手册(再次废话一句,以强调PHP手册真乃圣经也

)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: