在一些企业网站的应用中,一些企业可能没有时间去管理自己的网站,定时发布一些相关的新闻资讯到网站中,这时候就需要程序自动去网络上抓取一下自己企业相关的新闻和行业资讯到自己的网站中,这里就需要用到PHP的数据抓取技术,术语称为数据采集。
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));
function collect_by_url($url) { //生成一个curl对象 $curl=curl_init(); //设置URL和相应的选项 curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //将curl_exec()获取的信息以字符串返回,而不是直接输出。 //执行curl操作 $data=curl_exec($curl); return $data; } $url = "http://www.w3capi.com/cms/column/id/4.html"; var_dump( collect_by_url($url) );
php.ini
的中进行配置:在php.ini
中搜索allow_url_fopen
,然后设置allow_url_fopen=On
即可,实现代码如下:function collect_by_url($url) { //使用file_get_contents() $data=file_get_contents($url); return $data; } $url = "http://www.w3capi.com/cms/column/id/4.html"; var_dump( collect_by_url($url) );
项目官方地址:http://code.google.com/p/phpquery/
项目官方地址:https://querylist.cc/