通過一個簡單的例子復習一下幾個php函數的用法
用到的函數或知識點curl 發送網絡請求
preg_match 正則匹配
代碼$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 ]));效果
在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 //設置請求headerCURLOPT_RETURNTRANSFER, bool //為true時,以字符串返回響應,不包含headerCURLOPT_SSL_VERIFYPEER, bool //為false時,不驗證https證書,用于請求https的urlCURLOPT_POST, int //為1時配合CURLOPT_POSTFIELDS使用post請求,默認使用getCURLOPT_POSTFIELDS, array //post數據數組
直接輸出$output發現亂碼,通過查看源碼發現網頁使用的是gb2312編碼,用mb_convert_encoding或者iconv轉換成utf-8編碼輸出。
preg_match 正則匹配
通過查看源碼發現我們需要的圖片標簽為 img id= bigImg src= /uploads/allimg/190427/1011191627-2.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教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答