方法一:
<code><span><?php </span> header(<span>"Content-type:image/jpeg"</span>); <span><span>class</span><span>download_image</span>{</span><span><span>function</span><span>read_url</span><span>(<span>$str</span>)</span> {</span><span>$file</span>=fopen(<span>$str</span>,<span>"r"</span>); <span>$result</span> = <span>''</span>; <span>while</span>(!feof(<span>$file</span>)) { <span>$result</span>.=fgets(<span>$file</span>,<span>9999</span>); } fclose(<span>$file</span>); <span>return</span><span>$result</span>; } <span><span>function</span><span>save_img</span><span>(<span>$str</span>)</span> {</span><span>$result</span>=<span>$this</span>->read_url(<span>$str</span>); <span>$result</span>=str_replace(<span>"\""</span>,<span>""</span>,<span>$result</span>); <span>$result</span>=str_replace(<span>"\'"</span>,<span>""</span>,<span>$result</span>); preg_match_all(<span>'/<img alt="PHP抓取网站图片脚本" >|>)/i'</span>,<span>$result</span>,<span>$matches</span>); <span>foreach</span>(<span>$matches</span>[<span>1</span>] <span>as</span><span>$value</span>) { <span>echo</span><span>$value</span>.<span>"\n"</span>; <span>$this</span>->GrabImage(<span>$value</span>,<span>$filename</span>=<span>""</span>); } } <span>// $url 是远程图片的完整URL地址,不能为空。 </span><span>// $filename 是可选变量: 如果为空,本地文件名将基于时间和日期 </span><span>// 自动生成. </span><span><span>function</span><span>GrabImage</span><span>(<span>$url</span>,<span>$filename</span>=<span>""</span>)</span> {</span><span>if</span>(<span>$url</span>==<span>""</span>):<span>return</span><span>false</span>;<span>endif</span>; <span>$path</span>=<span>"download/"</span>; <span>//指定存储文件夹 </span><span>//若文件不存在,则创建; </span><span>if</span>(!file_exists(<span>$path</span>)){ mkdir(<span>$path</span>); } <span>if</span>(<span>$filename</span>==<span>""</span>) { <span>$ext</span>=strrchr(<span>$url</span>,<span>"."</span>); <span>if</span>(<span>$ext</span>!=<span>".gif"</span> && <span>$ext</span>!=<span>".jpg"</span>):<span>return</span><span>false</span>;<span>endif</span>; @<span>$filename</span>=<span>$path</span>.date(<span>"YHis"</span>).<span>$ext</span>; } ob_start(); readfile(<span>$url</span>); <span>$img</span> = ob_get_contents(); ob_end_clean(); <span>$size</span> = strlen(<span>$img</span>); <span>$fp2</span>=@fopen(<span>$filename</span>, <span>"a"</span>); fwrite(<span>$fp2</span>,<span>$img</span>); fclose(<span>$fp2</span>); <span>return</span><span>$filename</span>; } } <span>$download_img</span>=<span>new</span> download_image(); <span>$download_img</span>->save_img(<span>"http://www.jb51.net"</span>); <span>?></span></span></code>
方法一思路比较简单清晰,不过有个BUG,图片没有完全抓取,有时间再检查看!
方法二:
<code><span><span><?php </span><span><span>class</span><span>download_image</span>{</span><span>//抓取图片的保存地址</span><span>public</span><span>$save_path</span>; <span>//抓取图片的大小限制(单位:字节) 只抓比size比这个限制大的图片</span><span>public</span><span>$img_size</span>=<span>0</span>; <span>//定义一个静态数组,用于记录曾经抓取过的的超链接地址,避免重复抓取 </span><span>public</span><span>static</span><span>$a_url_arr</span>=<span>array</span>(); <span>/** *<span> @param</span> String $save_path 抓取图片的保存地址 *<span> @param</span> Int $img_size */</span><span>public</span><span><span>function</span><span>__construct</span><span>(<span>$save_path</span>,<span>$img_size</span>)</span>{</span><span>$this</span>->save_path=<span>$save_path</span>; <span>$this</span>->img_size=<span>$img_size</span>; <span>if</span>(!file_exists(<span>$save_path</span>)){ mkdir(<span>$save_path</span>,<span>0775</span>); } } <span>/** * 递归下载抓取首页及其子页面图片的方法 ( recursive 递归) *<span> @param</span> String $capture_url 用于抓取图片的网址 */</span><span>public</span><span><span>function</span><span>recursive_download_images</span><span>(<span>$capture_url</span>)</span>{</span><span>if</span> (!in_array(<span>$capture_url</span>,<span>self</span>::<span>$a_url_arr</span>)){ <span>//没抓取过</span><span>self</span>::<span>$a_url_arr</span>[]=<span>$capture_url</span>; <span>//计入静态数组</span> } <span>else</span> { <span>//抓取过,直接退出函数</span><span>return</span>; } <span>$this</span>->download_current_page_images(<span>$capture_url</span>); <span>//下载当前页面的所有图片</span><span>//用@屏蔽掉因为抓取地址无法读取导致的warning错误</span><span>$content</span>=@file_get_contents(<span>$capture_url</span>); <span>//匹配<strong>a标签</strong>href属性中?之前部分的正则</span><span>$a_pattern</span> = <span>"|<a>]+href=['\" ]?([^ '\"?]+)['\" >]|U"</a></span>; preg_match_all(<span>$a_pattern</span>, <span>$content</span>, <span>$a_out</span>, PREG_SET_ORDER); <span>$tmp_arr</span>=<span>array</span>(); <span>//定义一个数组,用于存放当前<strong>循环</strong>下抓取图片的超链接地址</span><span>foreach</span> (<span>$a_out</span><span>as</span><span>$k</span> => <span>$v</span>) { <span>/** * 去除超链接中的 空'','#','/'和重复值 * 1: 超链接地址的值 不能等于当前抓取页面的url, 否则会陷入死<strong>循环</strong> * 2: 超链接为''或'#','/'也是本页面,这样也会陷入死<strong>循环</strong>, * 3: 有时一个超连接地址在一个网页中会重复出现多次,如果不去除,会对一个子页面进行重复下载) */</span><span>if</span> ( <span>$v</span>[<span>1</span>] && !in_array(<span>$v</span>[<span>1</span>],<span>self</span>::<span>$a_url_arr</span>) &&!in_array(<span>$v</span>[<span>1</span>],<span>array</span>(<span>'#'</span>,<span>'/'</span>,<span>$capture_url</span>) ) ) { <span>$tmp_arr</span>[]=<span>$v</span>[<span>1</span>]; } } <span>foreach</span> (<span>$tmp_arr</span><span>as</span><span>$k</span> => <span>$v</span>){ <span>//超链接路径地址</span><span>if</span> ( strpos(<span>$v</span>, <span>'http://'</span>)!==<span>false</span> ){ <span>//如果url包含http://,可以直接访问</span><span>$a_url</span> = <span>$v</span>; }<span>else</span>{ <span>//否则证明是相对地址, 需要重新拼凑超链接的访问地址</span><span>$domain_url</span> = substr(<span>$capture_url</span>, <span>0</span>,strpos(<span>$capture_url</span>, <span>'/'</span>,<span>8</span>)+<span>1</span>); <span>$a_url</span>=<span>$domain_url</span>.<span>$v</span>; } <span>$this</span>->recursive_download_images(<span>$a_url</span>); } } <span>/** * 下载当前网页下的所有图片 *<span> @param</span> String $capture_url 用于抓取图片的网页地址 *<span> @return</span> Array 当前网页上所有图片img标签url地址的一个数组 */</span><span>public</span><span><span>function</span><span>download_current_page_images</span><span>(<span>$capture_url</span>)</span>{</span><span>$content</span>=@file_get_contents(<span>$capture_url</span>); <span>//屏蔽warning错误</span><span>//匹配img标签src属性中?之前部分的正则</span><span>$img_pattern</span> = <span>"|<img alt="PHP抓取网站图片脚本" >]+src=['\" ]?([^ '\"?]+)['\" >]|U"</span>; preg_match_all(<span>$img_pattern</span>, <span>$content</span>, <span>$img_out</span>, PREG_SET_ORDER); <span>$photo_num</span> = count(<span>$img_out</span>); <span>//匹配到的图片数量</span><span>echo</span><span>$capture_url</span> . <span>"共找到 "</span> . <span>$photo_num</span> . <span>" 张图片\n"</span>; <span>foreach</span> (<span>$img_out</span><span>as</span><span>$k</span> => <span>$v</span>){ <span>$this</span>->save_one_img(<span>$capture_url</span>,<span>$v</span>[<span>1</span>]); } } <span>/** * 保存单个图片的方法 *<span> @param</span> String $capture_url 用于抓取图片的网页地址 *<span> @param</span> String $img_url 需要保存的图片的url */</span><span>public</span><span><span>function</span><span>save_one_img</span><span>(<span>$capture_url</span>,<span>$img_url</span>)</span>{</span><span>//图片路径地址</span><span>if</span> ( strpos(<span>$img_url</span>, <span>'http://'</span>)!==<span>false</span> ){ <span>// $img_url = $img_url;</span> }<span>else</span>{ <span>$domain_url</span> = substr(<span>$capture_url</span>, <span>0</span>,strpos(<span>$capture_url</span>, <span>'/'</span>,<span>8</span>)+<span>1</span>); <span>$img_url</span>=<span>$domain_url</span>.<span>$img_url</span>; } <span>$pathinfo</span> = pathinfo(<span>$img_url</span>); <span>//获取图片路径信息 </span><span>$pic_name</span>=<span>$pathinfo</span>[<span>'basename'</span>]; <span>//获取图片的名字</span><span>if</span> (file_exists(<span>$this</span>->save_path.<span>$pic_name</span>)){ <span>//如果图片存在,证明已经被抓取过,退出函数</span><span>echo</span><span>$img_url</span>.<span>'该图片已经抓取过!'</span>.<span>"\n"</span>; <span>return</span>; } <span>//将图片内容读入一个字符串</span><span>$img_data</span> = @file_get_contents(<span>$img_url</span>); <span>//屏蔽掉因为图片地址无法读取导致的warning错误</span><span>if</span> ( strlen(<span>$img_data</span>) > <span>$this</span>->img_size ){ <span>//下载size比限制大的图片</span><span>$img_size</span> = file_put_contents(<span>$this</span>->save_path . <span>$pic_name</span>, <span>$img_data</span>); <span>if</span> (<span>$img_size</span>){ <span>echo</span><span>$img_url</span>.<span>'图片保存成功!'</span>.<span>"\n"</span>; } <span>else</span> { <span>echo</span><span>$img_url</span>.<span>'图片保存失败!'</span>.<span>"\n"</span>; } } <span>else</span> { <span>echo</span><span>$img_url</span>.<span>'图片读取失败!'</span>.<span>"\n"</span>; } } } set_time_limit(<span>120</span>); <span>//设置脚本的最大执行时间 根据情况设置 </span><span>$download_img</span>=<span>new</span> download_image(<span>'imgages/'</span>,<span>0</span>); <span>//实例化下载图片<strong>对象</strong></span><span>//$download_img->recursive_download_images('http://www.oschina.net/'); //递归抓取图片方法</span><span>//$download_img->download_current_page_images($_POST['capture_url']); //只抓取当前页面图片方法</span><span>$download_img</span>->download_current_page_images(<span>'http://www.jb51.net'</span>); <span>//只抓取当前页面图片方法</span><span>?></span></span></span></code>
http://blog.csdn.net/china_skag/article/details/18452883
http://www.jb51.net/article/21738.htm
版权声明:转载请保留文章署名和链接
以上就介绍了PHP抓取网站图片脚本,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP可以轻松创建互动网页内容。1)通过嵌入HTML动态生成内容,根据用户输入或数据库数据实时展示。2)处理表单提交并生成动态输出,确保使用htmlspecialchars防XSS。3)结合MySQL创建用户注册系统,使用password_hash和预处理语句增强安全性。掌握这些技巧将提升Web开发效率。

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP在现代Web开发中仍然重要,尤其在内容管理和电子商务平台。1)PHP拥有丰富的生态系统和强大框架支持,如Laravel和Symfony。2)性能优化可通过OPcache和Nginx实现。3)PHP8.0引入JIT编译器,提升性能。4)云原生应用通过Docker和Kubernetes部署,提高灵活性和可扩展性。

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

Dreamweaver CS6
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。