• 技术文章 >后端开发 >php教程

    php爬取图片并保存到本地的代码示例

    不言不言2019-01-28 09:51:04转载2336
    本篇文章给大家带来的内容是关于php爬取图片并保存到本地的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    通过一个简单的例子复习一下几个php函数的用法

    用到的函数或知识点

    代码

    $url     = 'http://desk.zol.com.cn/bizhi/7386_91671_2.html';
    $headers = [
        'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
    ];
    $ch      = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     //将curl_exec()获取的信息以字符串返回,而不是直接输出。
    curl_setopt($ch, CURLOPT_HEADER, $headers);
    $output = curl_exec($ch);
    curl_close($ch);
    $str = mb_convert_encoding($output, 'utf-8', 'gb2312');
    //或$str = iconv('gb2312//IGNORE', 'utf-8', $output);
    
    preg_match('!<img id="bigImg" src="(?<src>http.*\.(?<ext>jpg|png))".*>!', $str, $m);
    file_put_contents('./meinv.' . $m['ext'], file_get_contents($m['src']));

    效果

    解释

    curl 发送请求

    在php中建立curl连接的步骤一般为:初始化,设置选项,执行操作,释放连接。

    $ch = curl_init();
    curl_setopt($ch, CURLOPT, $opt);
    $out = curl_exec($ch);
    curl_close();

    常用的CURLOPT设置,更多参考文档 http://php.net/manual/zh/function.curl-setopt.php

    CURLOPT_URL, string //设置url必须
    CURLOPT_HEADER, array //设置请求header
    CURLOPT_RETURNTRANSFER, bool //为true时,以字符串返回响应,不包含header
    CURLOPT_SSL_VERIFYPEER, bool //为false时,不验证https证书,用于请求https的url
    CURLOPT_POST, int //为1时配合CURLOPT_POSTFIELDS使用post请求,默认使用get
    CURLOPT_POSTFIELDS, array //post数据数组

    直接输出$output发现乱码,通过查看源码发现网页使用的是gb2312编码,用mb_convert_encoding或者iconv转换成utf-8编码输出。

    preg_match 正则匹配

    通过查看源码发现我们需要的图片标签为<img id="bigImg" src="https://desk-fd.zol-img.com.cn/t_s960x600c5/g5/M00/0A/03/ChMkJ1wY5y-IfHR_AALCDzHE3wwAAt3AgOmA_IAAsIn642.jpg" width="960" height="600">

    正则表达式

    <img id="bigImg" src="(?<src>http.*\.(?<ext>jpg|png))".*>

    .*匹配所有,(?<name>)使用分组可以方便的使用$match['name']取到想要的部分

    最后$match['src']拿到了图片的真实url,通过file_put_contents保存,就算完成了

    以上就是php爬取图片并保存到本地的代码示例的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:博客园,如有侵犯,请联系admin@php.cn删除
    专题推荐:php
    上一篇:Docker下部署LNMP工作环境的教程(详细步骤) 下一篇:php中原子操作与文件锁flock的介绍(代码示例)
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP爬取糗事百科主页糗事• php爬取网页• PHP爬取糗事百科首页糗事_PHP教程• php爬取天猫和淘宝商品数据步骤详解(附代码)• 利用php爬取天猫和淘宝的商品数据
    1/1

    PHP中文网