设为首页 收藏本站
查看: 582|回复: 0

[经验分享] php 抓取网站图片的简单程序

[复制链接]

尚未签到

发表于 2017-4-2 12:47:55 | 显示全部楼层 |阅读模式
PHP下载CSS文件中的图片
<?
function getImagesFromCssFile() {
//note 设置PHP超时时间
set_time_limit(0);
//note 取得样式文件内容
$styleFileContent = file_get_contents('images/style.css');
//note 匹配出需要下载的URL地址
preg_match_all("/url\(.+?\)/", $styleFileContent, $imagesURLArray);
//note 循环需要下载的地址,逐个下载
$imagesURLArray = array_unique($imagesURLArray[0]);
foreach ($imagesURLArray as $imagesURL) {
$imagesURL = str_ireplace(array("url(", ")", "'",'"'), '', $imagesURL);  //url(" ") url('')
if (preg_match('/^http.*/', $imagesURL)) {   //跳过网络图片
continue;
}
file_put_contents(basename($imagesURL), file_get_contents($imagesURL));
}
}

<?php
/*完成网页内容捕获功能*/
function get_img_url($site_name) {
$site_fd = fopen($site_name, "r");
$site_content = "";
while (!feof($site_fd)) {
$site_content .= fread($site_fd, 1024);
}
/*利用正则表达式得到图片链接*/
$reg_tag = '/<img.*?\"([^\"]*(jpg|bmp|jpeg|gif)).*?>/';
$ret = preg_match_all($reg_tag, $site_content, $match_result);
fclose($site_fd);
return $match_result[1];
}
/* 对图片链接进行修正 */
function revise_site($site_list, $base_site) {
foreach ($site_list as $site_item) {
if (preg_match('/^http/', $site_item)) {
$return_list[] = $site_item;
} else {
$return_list[] = $base_site . "/" . $site_item;
}
}
return $return_list;
}
/*得到图片名字,并将其保存在指定位置*/
function get_pic_file($pic_url_array, $pos) {
$reg_tag = '/.*\/(.*?)$/';
$count = 0;
foreach ($pic_url_array as $pic_item) {
$ret = preg_match_all($reg_tag, $pic_item, $t_pic_name);
$pic_name = $pos . $t_pic_name[1][0];
$pic_url = $pic_item;
print("Downloading " . $pic_url . "\n");
$img_read_fd = fopen($pic_url, "r");
$img_write_fd = fopen($pic_name, "w");
$img_content = "";
while (!feof($img_read_fd)) {
$img_content .= fread($img_read_fd, 1024);
}
fwrite($img_write_fd, $img_content);
fclose($img_read_fd);
fclose($img_write_fd);
print("[OK]\n");
}
return 0;
}
function main() {
/* 待抓取图片的网页地址 */
$site_name = "http://image.cn.yahoo.com";
$img_url = get_img_url($site_name);
$img_url_revised = revise_site($img_url, $site_name);
$img_url_unique = array_unique($img_url_revised); //unique array
get_pic_file($img_url_unique, "./");
}
main();
?>
  此程序略有不足,如果图片在网站服务器上不同目次下但文件名是相同的,此时图片有可能是不一样的,但在最后生存时,后面得到的图片会将前边已生存的图片覆 盖掉,如在http://example.com/网站上有图片链接http://example.com/pic/test1.jpg和http: //example.com/pic/new/test1.jpg那么在下载时这两张图片只有一张生存,另外一张就被覆盖掉,修正的方法是在每派生的存前 先检索当前目次下是否已有此文件名,有的话对将派生的存的图片从头命名即可。

<?php
//取得页面所有的图片地址
function getimages($str){
$match_str = "/((http://)+([^ rn()^$!`"'|[]{}<>]*)((.gif)|(.jpg)|(.bmp)|(.png)|(.GIF)|(.JPG)|(.PNG)|(.BMP)))/";
preg_match_all ($match_str,$str,$out,PREG_PATTERN_ORDER);
return $out;
}?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359145-1-1.html 上篇帖子: 九个PHP很有用的功能(3) 下篇帖子: php + acpache 配置多个虚拟目录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表