yangakw yangakw

一个bt网站爬取程序

in 代码read (79) 文章转载请注明来源!

分析链接

首先分析链接http://www.80s.tw/ju/3008
3008 是影片信息的id,是影片的唯一标识 。
我猜测链接的ju应该是程序的分类,我认为每个分类都要单独进行爬取分析。
后来我尝试把ju改成其他单词movie,然后在浏览器打开,结果是页面依旧会跳转回/ju/3008,说明,程序做了重定向,
只要id正确既可以找到指定id信息。
我又尝试更改影片的id,随着id的值的变化,当然会有404出现,不过有些页面 比如/ju/4000 打开后 会跳转到 /movie/4000. 页面会重定向到其他分类的页面,说明所有影片应该在一起靠这个id作索引,并做了重定向处理。
从3009以前的数据还是比较少的,3009-19256的区间有较多影片

分析页面元素

分析页面元素,这个页面的语义性不是很好,随便定义css类的名字,分析起来很麻烦,还好,整体的数据位置今本不变。
thunder链接

通过iframe的形式引入到页面,链接都写到子页面中。
爬虫
写好程序开始抓

任务管理器

速度不是很快,还可以多开几个进程。

wlan

看看网速

我用自己做得一个爬虫框架进行爬取 https://git.oschina.net/yang95/crawlerpic

        class movie
    {
        #public $deep = 3009;
        public $deep = 10749;
        public $size = 500;
        public $url =[
            "movie"
        ];
        public $type=[
            "bd",
            "hd",
            "mp4",
            "bt",
        ];
        public function run($f,$urlp,$deep)
        {
            $dir = DIR_DATA . "/movie";
            /** @var CrawlerManage $manage */
            $manage  = new CrawlerManage($dir);
            $crawler = $manage->Crawler();

            $func = function ($url,$deep) use ($manage,$f) {

                $Item_run=function($url,$deep,$type) use ($manage,$f){

                    $li        = [];
                    $url = $url."/".$deep."/".$type."-1";#建立url
                    echo $url."\t\t\t $deep  $type \n\n";
                    $str       = $manage->Page($url);
                    if(empty($str)){
                        goto END;
                    }
                    $dom       = $manage->Dom($str);
                    if( !is_object($dom) ){
                        goto END;
                    }
                    $list      = $dom->find("li");


                    $trim = function ($str){
                        $str = str_ireplace("\t",'',$str);
                        $str = str_ireplace("\n",'',$str);
                        $str = str_ireplace(" ",'',$str);
                        return $str;
                    };
                    foreach ($list as $val) {
                        $nm = $val->find(".nm",0);
                        if(!is_object($nm)){
                            continue;
                        }
                        $tmp["name"] =$trim($nm->plaintext);
                        $xunlei = $val->find(".xunlei a",0);
                        $tmp["thunder"] = $xunlei->href;
                        if(empty($tmp["name"]) || empty($tmp["thunder"])){
                            continue;
                        }
                        array_push($li, $tmp);
                    }
                    END:
                    return $li;
                };

                $tmp=[];
                foreach ($this->type as $type){
                    $tmp[$type]=$Item_run($url,$deep,$type);
                } 
                 # $func_name = "set$deep";  ##保存详情数据
                 # call_user_func([$f, $func_name], $tmp);
                 # $f->save(); 

            };

            $success = function ($array) use ($manage, $func,$urlp, &$success,$f) {
                $url  = $array[0];
                $deep  = $array[1];
                echo $deep."\t\trunning...! \n\n";
                $url = $url."/".$deep;#建立url
                $str  = $manage->Page($url);
                $dom  = $manage->Dom($str);##解析页面
                $li["deep"] =  $deep;
                ##解析数据
                if( !is_object($dom) ){
                    goto END;
                }
                $list = $dom->find("#minfo .span_block");
                if(empty($list)){
                    goto END;
                }

                $trim = function ($str){
                    $str = str_ireplace("\t",'',$str);
                    $str = str_ireplace("\n",'',$str);
                    $str = str_ireplace(" ",'',$str);
                    return $str;
                };
                foreach($list as $val){
                    $tmp = $val->find(".font_888",0);
                    if(!is_object($tmp)){
                        continue;
                    }
                    $tmp= $tmp->plaintext;
                    if(empty($tmp) ){
                        continue;
                    }
                    $tmp=$trim($tmp);
                    $li[$tmp] = $trim($val->plaintext) ;

                }

                $li["logo"] = $trim($dom->find("#minfo img",0)->src) ;
                $li["title"] = $trim($dom->find("#minfo img",0)->title) ;
                $li["content"] = $trim($dom->find("#movie_content",0)->plaintext) ;

                //@todo 找到url
                $func($urlp,$deep);

                ##保存列表数据
                # $f->psh($li);
                # $f->save();
                END:
                ##继续工作
                $success( [$urlp , ++$deep] );


            };

            $crawler->set($success, [
                [$urlp , $deep]
            ]);

            $crawler->run();
        }
        public function go(){
            ##读取开始的id
            $this->_init($this->deep);
        }
        public function _init($deep){
            if(!isset($deep) || empty($deep)){
                exit("need a param of begin id ");
            }
            $deep = intval($deep);
            $url =  $this->url;
            foreach($url as $v){
                $iu = "http://www.80s.tw/$v/";
                $f = new F_File("movie/movie-$v-$deep");
                $this->run($f,$iu,$deep);
            }
        }  
    }
jrotty WeChat Pay

微信打赏

jrotty Alipay

支付宝打赏

文章二维码

扫描二维码,在手机上阅读!

此处评论已关闭

博客已运行
© 2017 yangakw
PREVIOUS NEXT
雷姆
拉姆