PHP 实现采集网站数据的方法总结

在一些企业网站的应用中,一些企业可能没有时间去管理自己的网站,定时发布一些相关的新闻资讯到网站中,这时候就需要程序自动去网络上抓取一下自己企业相关的新闻和行业资讯到自己的网站中,这里就需要用到PHP的数据抓取技术,术语称为数据采集。

W3CAPI
1
2020-04-24 22:25:16
文档目录
我的书签
 

PHP 使用socket技术实现数据采集

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 协议规定的响应内容格式,其中包含了我们请求的页面的源码数据:
友情提示