• 技术文章 >后端开发 >php教程

    用php写ftp爬虫 php ftp服务器 ftp php代码 phpstorm ft

    2016-07-29 08:54:03原创887

    今年选修了《英语电影赏析》,老师超级认真负责,课下作业简直******平均每天都要我们看一部电影,而且大部分都是那种狠文艺的7,80年前的,根本看不下去不说,网上还找不到。还好学习有个电影的ftp服务器,资源不少,就是分类比较乱,一个一个文件架找很麻烦,所以写了个小爬虫把资源全都弄下来,包括路径和文件名,以后就方便多了。

    php有专门的ftp操做类,网上一搜一大把。基本的写在注释上面

    记录下我这次遇到的几个问题:

    1,获取目录名

    之前都是用ftp_nlist()函数,但是目前的php改了,ftp_nlist()函数只列出文件,不列文件架名字。只能用ftp_rawlist(),这个就很详细,就像ls -al命令。所以用正则表达式把无关信息去掉,只留名字。这个不能判断文件名中有空格,空格前还是纯数字这种奇葩,o(︶︿︶)o 唉,也就我们学校能出现这种命名了。

    preg_replace("/.+:*\\d+\\s/", "", $filename);
    2,校内网匿名访问

    用户名Anonymous,密码空。如果连不上可能需要该链接方式。

    3,测试过程中可能指定文件路径,中文可能找不到,这时试试utf-8, gbk, ansi编码

    4,在虚拟机xp上搭建ftp服务器测试,ip地址别写错了,囧~

    5,php运行时间,我们学校服务器东西还真不少,各种乱七八糟的视频,默认30秒根本不够用,临时改变php执行时间,set_time_limit(0);//不限时

    最后跑出来443kb的文本,汗~

    贴代码:

    	
    			//建立ftp连接,tcp三次握手
        $login = ftp_login($con, "duola", "你的密码");	//帐号密码登录
        $myfile=fopen("result.txt","w");		//存放结果的txt
    
        $queue = array("//m.sbmmt.com/m/");     //存放目录的队列	//开始的根目录
    
        while(!empty($queue)){    			//还有未遍历目录
            $list_now = array_shift($queue);	//从队列里拿到本次循环要处理的目录
            ftp_chdir($con, $list_now);		//改变当前目录
            $filelist = ftp_rawlist($con, $list_now);	//拿到本目录的内容
    
            $name = preg_replace("/.+:*\\d+\\s/", "", $filelist[2]);	//第一个文件或目录名字
            if(count($filelist) == 3 && ftp_size($con, $name) != -1){
                //只有一个电影,目录名字即为电影名		//这里是因为我们学校的电影大都是放到电影名的文件架下,而电影名是一堆乱码,所以这时记录目录名字
                fwrite($myfile, $list_now."\r\n");   
            }else{
                foreach($filelist as $file)			//合集文件架,下面好多电影,这时正常记录文件名
                {
                    $filename = preg_replace("/.+:*\\d+\\s/", "", $file);
                       if(ftp_size($con, $filename) == -1){
                           						//发现目录 ,存到队列里,以后继续遍历,但不能使.(当前目录)  ..(父目录)
                           if($filename != "." && $filename != ".."){
                               array_push($queue, $list_now."//m.sbmmt.com/m/".$filename);
                               //echo "
    \ndocument:".$list_now."//m.sbmmt.com/m/".$filename; } } else{ //合集里的电影 fwrite($myfile, $list_now."//m.sbmmt.com/m/".$filename."\r\n"); } } } } fclose($myfile); ftp_close($con); ?>

    以上就介绍了用php写ftp爬虫,包括了ftp,php方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:ftp php
    上一篇:数据结构 --- 线性表学习(php模拟) 数据结构与算法 数据结构 严蔚敏 c# 树形数据结 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 一文详解PHP用流方式实现下载文件(附代码示例)• PHP反序列化入门总结(小白必看)• PHP原生类的总结分享• 聊聊PHP escapeshellarg函数使用的中文问题• 分享PHP函数使用小工具(附代码示例)
    1/1

    PHP中文网