设为首页 加入收藏

TOP

网页采集之php采集函数
2015-12-05 20:45:30 来源: 作者:风之轨迹 【 】 浏览:747次 评论:0
复制正文内容

网页采集就是将其它网站的网页数据拿过来,包括最基本的报头信息与正文的htm代码这些,而采集过来的网页可以通过编辑取出想要的那部分数据,
通过基础的php采集函数,抓包与发包两节经验来讲解采集的原理。
第1节我们先了解三个常用的php采集函数,
file_get_contents(),fsockopen(),curl(),这是现在常用的php采集的函数,以下举例说明和我使用中感觉到的优缺点

file_get_contents
这个函数最简易,只需简单一句代码就可以,,缺点是只能采集所有的网页代码,但不能获取header(报头)信息,这个代码可以get与post发送数据给服务端,但我喜欢用fsockopen与curl,
范例代码
<?php
$url="http://www.baidu.com";
$tp=file_get_contents($url);
echo $tp;
?>
fsockopen,相比于file_get_contents,它可以获取返回的header的报头信息,但相对于curl它的代码过于长而繁锁,以下代码以get方式发送用户信息给服务端,
范例代码
<?php
//要访问的网页的域名
$domain="www.baidu.com";
//相对地址,相对地址就是除域名的地址,例如www.baidu.com/123,/123就是相对地址
$getfile="/";
//cookie
$cookie="";
//用fsockopen采集数据
$content = @fsockopen("$domain", 80, $errno, $errstr, 12);
//向服务器发送数据
fputs($content, "GET $getfile HTTP/1.0\r\n");
fputs($content, "Host: $domain\r\n");
//伪造浏览器等信息
fputs($content, "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\r\n");
//伪造cookie信息
fputs($content, "cookie: $cookie\r\n\r\n");
while (!feof($content)) {
 $tp.=fgets($content, 128);
strstr($tp,"200 OK");
}
echo $tp;
?>
curl是现在最流行采集网页的php函数,也是我最喜欢用的采集函数,以下代码用get发送数据给服务端来获取数据,
范例代码
<?php
//要采集的地址
$url="http://www.baidu.com";
//header的报头信息,将用来发送给客户端
$header = array();
//初始化curl
$ch = curl_init();
//对url进行采集
curl_setopt($ch, CURLOPT_URL, $url);
//是否获取返回的header(报头)信息,true 是,false 否
curl_setopt($ch, CURLOPT_HEADER, true);
//发送$header里的报头信息到服务端
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
//获取返回的数据
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//获取的信息以文件流的形式返回
$tp = curl_exec($ch);
//关闭curl
curl_close($ch);
echo $tp;
?>

采集后如何取需要的那一部分,通常我使用
preg_match函数或者explode函数
preg_match是通过正则来匹配相关的内容
范例代码
<?php
$url="http://www.baidu.com";
$tp=file_get_contents($url);
preg_match("/http.\/\/(.*?).com/", $tp, $data);
echo $data[1];
?>
这里应该输出
s1.bdstatic
正则更多的了解请参看百度百科的介绍
http://baike.baidu.com/link?url=z9SPj-jbONYbFzccAFCZecKZZfZXX-fSFpAeBcIGqnCeCwGpbW9yjdnSbyTm8oYa

explode方法是节取文本,好像平时我们用读屏软件选择开始点和选择结束点来复制那一部份的文本内容那样,
范例代码
<?php
$url="http://www.baidu.com";
$tp=file_get_contents($url);
$aa=explode('http://',$tp);
$bb=explode('com',$aa[1]);
echo $bb[0];
?>
这里应该输出
s1.bdstatic

这三个例子是最基础的采集网页,更多的网页采集需要向客户端提交验证数据,下节内容是对网页所需提交的验证数据进行抓包分析,

您看到此篇文章时的感受是:
Tags: 责任编辑:风之轨迹
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到QQ空间
分享到: 
定点下篇直链之威盘 上一篇百度网盘分享平台

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

相关栏目

最新文章

图片主题

热门文章

推荐文章

相关文章

广告位