웹 개발 & 정보/PHP

[PHP] curl 페이지 크롤링 함수

Rozera 2017. 10. 16. 11:57
반응형


기본적인 php curl 함수에 필요할만한 옵션을 몇가지 추가하여 함수로 만들어 보았습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
// 페이지 크롤링 함수 (페이지주소, post값, 리퍼러, 헤더포함? (포함시 y), 쿠기파일 생성경로)
function getPage($pageURL$post=array(), $referer=""$header=""$cookieURL=""){
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $pageURL);
 
    if ($referer != "") {
        $referer = getSiteHost($referer);
        curl_setopt($ch, CURLOPT_REFERER, $referer . "/");
    }
 
    if ($header == "y") {
        curl_setopt($ch, CURLOPT_HEADER, true);
    }
 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 
    if (count($post> 0) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }
    
    if ($cookieURL != "") {
        // 쿠키가 필요하다면, 쿠키 생성 폴더 검사 및 없을시 생성 과정도 포함하는게 좋을 듯.
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieURL);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieURL);
    }
 
    $result = curl_exec ($ch);
    curl_close($ch);
 
    return $result;
}
 
// 정확한 호스트를 얻기위해 편의상 쓰는 함수
function getSiteHost($pageURL) {
    $siteParts = parse_url($pageURL);
    return $siteParts['scheme'].'://'.$siteParts['host'];
}
?>




실제로 평소 어떤 페이지를 크롤링 및 파싱할 때 자주 사용하는 기능들을 모아서 만든 php curl 함수입니다.


post 전송, 리퍼러 지정, 쿠키처리 정도까지만 넣었고,


header 지정이나 uesragent 지정 등은 필요하다면 따로 넣어서 사용하면 될 듯 합니다.


일반적인 페이지 (+로그인이 필요한 페이지) 정도는 무리없이 파싱 작업이 가능할 것입니다.



반응형