php抓取并保存网站图片的实现代码

这篇文章主要介绍了php抓取并保存网站图片的实现代码,网页源代码捕获,图片链接获取、分析、并将同样的图片链接合并功能,功能很全面,需要的朋友可以参考下。

此程序实现了网页源代码捕获,图片链接获取、分析、并将同样的图片链接合并功能,实现了图片抓取功能。利用php强大的网络内容处理函数将指定的网站上的所有图片抓取下来,保存在当前目录下,以下为代码:

  1. /*完成网页内容捕获功能*/
  2. function get_img_url($site_name){
  3. $site_fd = fopen($site_name, "r");
  4. $site_content = "";
  5. while (!feof($site_fd)) {
  6. $site_content .= fread($site_fd, 1024);
  7. }
  8. /*利用正则表达式得到图片链接*/
  9. $reg_tag = '//'*?\"([^\"]*(jpg|bmp|jpeg|gif)).*?>;
  10. $ret = preg_match_all($reg_tag, $site_content, $match_result);
  11. fclose($site_fd);
  12. return $match_result[1];
  13. }
  14. /* 对图片链接进行修正 */
  15. function revise_site($site_list, $base_site){
  16. foreach($site_list as $site_item) {
  17. if (preg_match('/^http/', $site_item)) {
  18. $return_list[] = $site_item;
  19. }else{
  20. $return_list[] = $base_site."/".$site_item;
  21. }
  22. }
  23. return $return_list;
  24. }
  25. /*得到图片名字,并将其保存在指定位置*/
  26. function get_pic_file($pic_url_array, $pos){
  27. $reg_tag = '/.*\/(.*?)$/';
  28. $count = 0;
  29. foreach($pic_url_array as $pic_item){
  30. $ret = preg_match_all($reg_tag,$pic_item,$t_pic_name);
  31. $pic_name = $pos.$t_pic_name[1][0];
  32. $pic_url = $pic_item;
  33. print("Downloading ".$pic_url." ");
  34. $img_read_fd = fopen($pic_url,"r");
  35. $img_write_fd = fopen($pic_name,"w");
  36. $img_content = "";
  37. while(!feof($img_read_fd)){
  38. $img_content .= fread($img_read_fd,1024);
  39. }
  40. fwrite($img_write_fd,$img_content);
  41. fclose($img_read_fd);
  42. fclose($img_write_fd);
  43. print("[OK] ");
  44. }
  45. return 0;
  46. }
  47. function main(){
  48. /* 待抓取图片的网页地址 */
  49. $site_name = "https://www.phpfensi.com/";
  50. $img_url = get_img_url($site_name);
  51. $img_url_revised = revise_site($img_url, $site_name);
  52. $img_url_unique = array_unique($img_url_revised); //unique array
  53. get_pic_file($img_url_unique,"./");
  54. }
  55. main();
  56. ?>

此程序还有待完善的地方是,如果图片在网站服务器上不同目录下但文件名是相同的,此时图片有可能是不一样的,但在最后保存时,后面得到的图片会将前面已经保存的图片覆盖掉,解决方法是在每次保存前先检索当前目录下是否已有此文件名,有的话对将要保存的图片重新命名即可。