로그인 ID/패스
낙서 유머 성인유머 음악 PC 영화감상
게임 성지식 러브레터 요리 재태크 야문FAQ  
익헨 사이트는 하루 이미지 다운로드 제한이 있나 보군요. (크롤링 소스 포함)
레이라 | 추천 (0) | 조회 (495)

2021-10-01 13:45

익헨 사이트에 하드코어한 이미지들이 많이 있어서 자주 보는데요,

 

최근 어떤 작품은 토렌트 다운이 없어서 하나하나 클릭해서만 이미지를 봐야 되더라구요.

 

그래서 귀찮아서 php로 크롤링 돌려놨더니, 3시간 뒤에 너무 많은 이미지를 다운받았다고 차단이 되버렸네요;

 

하루 지나면 이 제한이 풀릴지 모르겠지만, 혹시 영구차단이면... ㅎㄷㄷ

 

혹시 크롤링 궁금하신 분들은 허접하지만, 참고하시도록 소스 남깁니다. 

 

<?php

set_time_limit(0);

 

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');
 

require_once('simple_html_dom.php');

$urls[] = '주소 url';


foreach ($urls as $url) {
    $tmp = parse_url($url);
    $referer = $tmp['scheme'].'://'.$tmp['host'];

    $result = curlConnect($url, $referer);
    $html = str_get_html($result);

    $link1 = [];
 

    foreach ($html->find('div a') as $e) {
        if (strpos($e->href, '/g/') !== false) $link1[$e->href] = true;
    }

 

    foreach($link1 as $link => $_) {
        $tmp2 = parse_url($link);
        $tmp3 = explode("/", $tmp2['path']);
        $folder = $tmp3[2].'_'.$tmp3[3];
        unset($tmp2, $tmp3);

        $path = './'.$folder.'/';

 

        if (!file_exists($path)) {
            mkdir($path, 0777, true);

            $result2 = curlConnect($link, $referer);
            $html2 = str_get_html($result2);

            $page = 0;

 

            // 페이지 추출
            foreach ($html2->find('table.ptt a') as $e2) {
                $tmp2 = explode("?p=", $e2->href);

 

                if (isset($tmp2[1]) && $page < $tmp2[1]) $page = $tmp2[1];
            }

 

            for ($i = 0; $i <= $page; $i++) {
                $result3 = curlConnect($link.'?p='.$i, $referer);
                $html3 = str_get_html($result3);

 

                foreach ($html3->find('div.gdtm a') as $n => $e2) {
                    $result4 = curlConnect($e2->href, $referer);
                    $html4 = str_get_html($result4);
                    $img = $html4->find('img[id=img]', 0);

                    $tmp3 = explode('.', $img->src);
                    $ext = strtolower($tmp3[count($tmp3)-1]);

                    $fn = $path.sprintf("%03d", $i).'-'.sprintf("%03d", $n).'.'.$ext;

 

                    if (!file_exists($fn)) {
                        $fp = fopen($fn, 'wb');
                        $ch = curl_init();
                        curl_setopt($ch, CURLOPT_URL, $img->src);
                        curl_setopt($ch, CURLOPT_POST, FALSE);
                        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                        curl_setopt($ch, CURLOPT_REFERER, $referer);
                        curl_setopt($ch, CURLOPT_FILE, $fp);
                        curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
                        curl_exe($ch);
                        curl_close($ch);
                        fclose($fp);
                        unset($ch, $fp);

                    }


                    $html4->clear();
                }

                $html3->clear();
            }

            $html2->clear();
        }
    }

    $html->clear();
}

 

 

function curlConnect($url, $referer) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    $result = curl_exe($ch); 
    curl_close($ch);

    return $result;
}

 

나중에 직접 돌릴 때는 소스의 curl_exe 뒤에 c를 하나 더 붙이세요. (필터링 되네요)