낙서 | 유머 | 성인유머 | 음악 | PC | 영화감상 | |
게임 | 성지식 | 러브레터 | 요리 | 재태크 | 야문FAQ |
익헨 사이트에 하드코어한 이미지들이 많이 있어서 자주 보는데요,
최근 어떤 작품은 토렌트 다운이 없어서 하나하나 클릭해서만 이미지를 봐야 되더라구요.
그래서 귀찮아서 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를 하나 더 붙이세요. (필터링 되네요)