博客列表 >php爬取网页的几种方式

php爬取网页的几种方式

空城的博客
空城的博客原创
2019年05月07日 15:06:502085浏览

一、用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);

函数解释:
1、http_build_query  生成 URL-encode 之后的请求字符串 参数 query_data:可以是数组或包含属性的对象

2、stream_context_create 创建资源流上下文,可用于fopen(),file_get_contents()等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程 参数:必须是关联数组  返回值:resource类型的上下文资源流  

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;

函数解释:

1、fopen 打开文件或者 URL 参数:filename:文件地址或者url model:模式(只读、只写、或者读写)

2、feof 检查文件指针是否到了文件结束的位置 参数 handle:文件指针  返回值:bool Ture 或者 False

3、fgets 从文件中读取一行 参数 handle:文件指针 length 长度

4、fclose 关闭一个已打开的文件指针
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
步履不停2019-06-29 16:39:221楼
这个可以有