|
本帖最后由 kevinmy 于 2014-10-29 22:05 编辑
前言:
在初级篇和中级篇之前期准备我们介绍了利用火车头采集内容并发布到wordpress的过程(帖子地址:http://www.eefaq.com/thread-121090-1-1.html),也介绍如何在本机搭建PHP环境,在结尾处贴出了一个由3行代码组成的最简易的采集小程序(帖子地址:http://www.eefaq.com/thread-121117-1-1.html),帖子发出20多分钟,就得到了朋友们的积极反馈,会员:mulao在回帖中提到“不建议使用file_get_contents采集,推荐使用php的curl库”并在帖中贴出了两者
读取google.com首页的效率对比。mulao的说法是正确的,curl和file_get_contents对比起来,不仅是效率高,同时它还支持很多协议,如HTTP、FTP、TELNET等,用curl还可以完成一些高难度任务,比如:处理coockies、验证、表单提交、文件上传等等。file_get_contents相比较起来只有一个简单、让新手树立信心的优势了,不知道昨天的3行采集程序有多少人去实验了?好,今天我们正式开始中级篇:使用Curl抓取网页内容
在学习更为复杂的功能之前,先来看一下在PHP中建立curl请求的基本步骤:
1.初始化
2.设置变量
3.执行并获取结果
4.释放curl句柄
以下为采集TGL帖子列表的代码:
<?php
set_time_limit(0);//设置程序执行时间
header("Content-Type: text/html; charset= utf-8"); //设置页面的编码,不设置会乱码
$url="http://www.eefaq.com/forum-4-1.html";
$ch = curl_init($url);//初始化
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//返回的内容我们是作为变量储存, 而不输出,所以这里选1.
$contents = curl_exec($ch);// 运行cURL,请求网页
preg_match_all('{<a href="([^"]+)" class="xst" >(.*)</a>}',$contents,$matches);//正则匹配想要的内容
curl_close($ch);// 关闭URL请求
for ($i=0;$i<count($matches[1]);$i++)//for循环结构很常用,这里的作用是循环记录总数的的次数,每次循环中可以任意处理采集到的内容
{
$title = $matches[2][$i];
$geturl = $matches[1][$i];
echo "我要的标题是:" . $title. "<br/>" . "对应的网址是:" . $geturl . "<br/><br/><br/>";
}
?>
代码运行的结果如下:
要点:
1.在curl这段代码中 curl_setopt() )最为重要,通过参数指定URL请求的各个细节来实现一些复杂的功能,但由于参数众多,要一次性看完并理解也比较困难,所以今天我们只用了这一个选项,curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);这里的参数我们设置为1或者true的原因是,返回的内容我们要作为变量储存, 而不直接输出到屏幕上。
2. preg_match_all这段正则匹配,想要学好采集,正则是必须学会的。这个一句两句说不清,请百度搜索:正则表达式,有很多教程。
3.for循环读出数组内的内容。这个结构在采集中经常用到的。
今天的教程好像解释的不清楚,也不知道该写点什么,可能还是因为本人水平有限,无法简单易懂的说明原理。有问题回帖吧
|
评分
-
查看全部评分
|