php数据采集的思路,PHP 实现采集网站数据的方法总结

PHP中的socket扩展模块,是基于对计算机网络技术网络层和传输层的实现,使用socket来实现采集是在网络层面上来说最底层的实现方式,它只是建立了一个长连接(TCP连接),然后我们要自己构造 http协议的请规则去实现数据的获取。例如:要想获取这个页面的内容,http://www.w3capi.com/cms/column/id/4.html,用socket实现代码如下:

function collect_by_url($domain,$url) {

//连接,$error错误编号,$errstr错误的字符串,30s是连接超时时间

$fp = fsockopen($domain, 80, $errno, $errstr, 30);

if (!$fp) die("连接失败" . $errstr);

//因为socket是网路偏底层协议实现,这里需要构造http协议的请求头(http协议属于网络应用层协议,有自己规定的请求和响应格式)

$http = "GET ".$url." HTTP/1.1\r\n"; // \r\n表示前面的是一个命令

$http .= "Host:".$domain."\r\n"; //请求的主机

$http .= "Connection:close\r\n\r\n"; // 连接关闭,最后一行要两个\r\n

//发送这个字符串到服务器

fwrite($fp, $http, strlen($http));

//接收服务器返回的数据

$data = '';

while (!feof($fp)) {

$data .= fread($fp, 4096); //fread读取返回的数据,一次读取4096字节

}

//关闭连接

fclose($fp);

return $data;

}

$domain = "www.w3capi.com";

$url = "/cms/column/id/4.html";

var_dump(collect_by_url($domain,$url));

返回结果如下所示,这也是 http 协议规定的响应内容格式,其中包含了我们请求的页面的源码数据:

8d6e70bdc097405c6d12c48d57d14db3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值