一、用scoket方式采集数据
$fp = fsockopen('www.baidu.com',80,$errno,$errstr,30); if(!$fp){ echo '错误号:'.$errno." 错误信息:".$errstr; }else{ $header = "GET / HTTP/1.1\r\n"; $header .= "Host: www.baidu.com\r\n"; $header .= "Connection: Close\r\n\r\n"; fwrite($fp,$header); while (!feof($fp)){//如果没有指向结尾,则继续读取 echo fgets($fp,1024); } fclose($fp); }
函数解释:
1、fsockopen 打开一个网络连接或者一个Unix套接字连接 参数 hostname:域名 port:端口号 错误号 错误信息 timeout:超时时间
2、fwrite 写入文件(二进制) 参数 handle:文件指针 string:写入的内容(字符串) length:写入长度
3、feof 检查文件指针是否到了文件结束的位置 参数 handle:文件指针 返回值:bool Ture 或者 False
4、fgets 从文件中读取一行 参数 handle:文件指针 length 长度
5、fclose 关闭一个已打开的文件指针
二、生成一个curl对象来爬取
//创建cURL句柄 $curl=curl_init(); //设置URL和相应的选项 curl_setopt($curl, CURLOPT_URL, "http://www.php.cn/map/dugu.html"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //执行curl操作 $data=curl_exec($curl); //打印结果 var_dump($data);
函数解释:
1、curl_init 初始化 cURL 会话 参数:string:url 返回值:如果成功,返回 cURL 句柄,出错返回 FALSE。
2、curl_setopt 设置 cURL 传输选项 参数 resource:句柄 返回值:TRUE 或者 FALSE
3、curl_exec curl_exec 执行给定的 cURL 会话 参数:resource:句柄 返回值
三、file_get_contents直接获取网页(不可用于https)
$url = 'http://www.php.cn/map/dugu.html'; $html = file_get_contents($url); echo $html;
1、file_get_contents 将整个文件读入一个字符串,在这里可以理解为从网络上返回了一个文件
四、用file_get_contents函数以post方式获取url
//组装post提交的数据 $data =array(); $data = http_build_query($data); //请求需要的设置 $options = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type:application/x-www-form-urlencoded', 'content' => $data 'timeout' => 60 * 60 // 超时时间(单位:s) ) ); //定义请求地址 $url = "http://www.php.cn/map/dugu.html"; $context = stream_context_create($options); echo file_get_contents($url, false, $context);
3、file_get_contents 参数:filename:文件路径(可以是url地址) use_include_path:是否读取包含文件 context:上下文资源流(就是stream_context_create处理的)
五、用fopen方式获取
//定义url $url = 'http://www.php.cn/map/dugu.html'; //创建指针 $fp = fopen($url, 'r'); //获取报头,元数据 stream_get_meta_data($fp); //读取数据 $result = ''; while(!feof($fp)) { $result .= fgets($fp, 1024); } //关闭指针 fclose($fp); //输出数据 echo $result;