Heim > Backend-Entwicklung > PHP-Tutorial > PHP网页抓图

PHP网页抓图

WBOY
Freigeben: 2016-07-25 08:43:39
Original
1006 Leute haben es durchsucht
  1. header('Content-Type:text/html;charset=utf-8');
  2. /**
  3. * 一个用于抓去图片的类
  4. */
  5. class download_image {
  6. public $_save_path = NULL; //图片保存路劲
  7. public $_limit_size = NULL; //图片限制大小
  8. public static $_img_url_old = array(); //存储已抓取过的图片链接地址
  9. public static $_a_page_url = array(); //存储抓取过的页面
  10. public function __construct( $_save_path, $_limit_size) {
  11. $this->_save_path = $_save_path;
  12. $this->_limit_size = $_limit_size;
  13. }
  14. public function get_all_page_image( $site_url ) {
  15. if ( $site_url == '' ) {
  16. return false;
  17. }
  18. if ( ! in_array( $site_url, self::$_a_page_url ) ) { //判断当前页面是否抓取过
  19. self::$_a_page_url[] = $site_url; //将超链接存入静态数组中
  20. } else {
  21. return; //若抓取过则跳出
  22. }
  23. $this->download_the_page_image( $site_url );
  24. $content = @file_get_contents($site_url);
  25. $a_page_url = "|]+href=['\\" ]?([^ '\\"?]+)['\\" >]|U";
  26. $all_url = array();
  27. preg_match_all( $a_page_url, $content, $all_url, PREG_SET_ORDER );
  28. if ( $all_url != NULL ) {
  29. foreach( $all_url as $key => $val ) {
  30. /**
  31. * 静态化超链接,防止进入死循环
  32. * 出去当前页面链接表示方式('','#','/')
  33. */
  34. if ( trim($val[1]) != '' && ! in_array( $val[1], self::$_a_page_url ) && ! in_array( $val[1], array('#','/',$site_url) ) ) {
  35. self::$_a_page_url[] = $val[1]; //将符合要求的超链接写入静态数组中
  36. }
  37. }
  38. }
  39. if ( self::$_a_page_url != NULL ) {
  40. foreach( self::$_a_page_url as $keys => $vals ) {
  41. if ( strpos( $vals, 'http://' ) === false ) { //超链接不包含http://时,不能直接访问
  42. // 当图片链接地址为相对地址是重新拼凑地址
  43. $a_domain_url = substr( $site_url, 0, strpos( $site_url, '/',8 ) + 1 );
  44. $a_img_url = $a_domain_url.$vals;
  45. }
  46. //递归调用,访问每一个超链接页面
  47. $this->get_all_page_image( $a_img_url );
  48. }
  49. }
  50. }
  51. /**
  52. * 下载当前页面下的所有图片链接
  53. * @param $site_url
  54. */
  55. public function download_the_page_image( $site_url ) {
  56. // 获取当前链接地址页面的所有内容
  57. $img_pattern = NULL;
  58. $content = @file_get_contents( $site_url );
  59. $img_pattern = "|PHP网页抓图 ]+src=['\\" ]?([^ '\\"?]+)['\\" >]|U";
  60. //全局匹配所有的PHP网页抓图 中的图片链接
  61. $img_out = array();
  62. preg_match_all( $img_pattern, $content, $img_out, PREG_SET_ORDER );
  63. echo '

    '. $site_url . '共找到' . count($img_out) . '张图片

    ';
  64. //print_r($img_out[1]);
  65. foreach( $img_out as $key => $val ) {
  66. //echo htmlspecialchars($val[1]).'
    ';
  67. $this->save_one_image( $site_url, $val[1]);
  68. }
  69. }
  70. public function save_one_image( $site_url, $img_url ) {
  71. if ( strpos( $img_url, 'http://' ) === false ) {
  72. // 当图片链接地址为相对地址是重新拼凑地址
  73. $domain_url = substr( $site_url, 0, strpos( $site_url, '/',8 ) + 1 );
  74. $img_url = $domain_url.$img_url;
  75. }
  76. $pic_name = basename( $img_url ); //获取图片名称
  77. if ( in_array( $img_url, self::$_img_url_old ) ) {
  78. echo $img_url .'该图片已经抓取过!
    ';
  79. return;
  80. }
  81. //获取图片内容,并写入一个字符串
  82. $img_data = @file_get_contents( $img_url );
  83. if ( strlen($img_data) _limit_size ) { //图片大小在限制范围内
  84. $img_boo = @file_put_contents( $this->_save_path.md5(microtime()).$pic_name, $img_data );
  85. if ( $img_boo ) {
  86. echo $img_url .'图片保存成功!
    ';
  87. self::$_img_url_old[] = $img_url;
  88. } else {
  89. echo $img_url .'图片保存失败!
    ';
  90. }
  91. } else {
  92. echo $img_url .'图片大小在限制范围之外!
    ';
  93. }
  94. }
  95. }
  96. set_time_limit(0);
  97. $download_images = new download_image('surces_Img/',1024*1024*100);
  98. $download_images->get_all_page_image('http://www.baidu.com/');
  99. ?>
复制代码

抓图, PHP


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage