상세 컨텐츠

본문 제목

웹스크래핑으로 채용정보 가져오는 PHP코드, 예제 ... 웹크롤링과 웹스크래핑의 차이

IT공부방/PHP

by 동해둘리 2023. 8. 10. 07:20

본문

반응형

웹스크래핑으로 채용정보 가져오기

 

웹스크래핑은 특정 웹페이지의 데이터를 가져와서 원하는 데이터를 추출하여 가공 또는 표시하는 방법을 말합니다. 반면 웹크롤링은 여러 URL을 반복적으로 탐색해서 데이터를 가져오는 방법입니다. 

 

 

 

 

저는 웹스크래핑을 설명드릴건데요, 제가 작업했던 실 사례를 들어서 설명해 볼까 합니다. 

 

웹스크래핑 채용정보

 

 

 

 

 

 

장애인 고용포털 사이트에서 채용정보 가져오기

 

저의 경우는 [장애인 고용포털 사이트] 에 올라와 있는 취업정보를 가져와서 브라우저에 표시하는 작업이었습니다. 개발언어는  PHP로 개발했습니다. 

 

웹스크래핑 채용정보

 

 

 

 

전체 코드를 먼저 살펴보시죠

 

아래에 전체 PHP 코드가 있습니다. 원하는 웹페이지의 데이터를 crul 을 이용하여 가져와서 파싱하는 방법을 사용했습니다. curl은 다양한 프로토콜로 데이터 전송이 가능한 Command Line Tool 입니다. 

 

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
 
//접속 할 URL을 지정
$url = "https://www.worktogether.or.kr/empInfo/empInfoBbs/empScrapInfoList.do";
 
//cURL 세션 초기화
$ch = curl_init();
 
//URL과 옵션을 설정
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // https 일때 이 한줄 추가 필요
 
//cURL 실행
$str = curl_exec($ch);
 
$enc = mb_detect_encoding($strarray('EUC-KR''UTF-8''shift_jis''CN-GB'));
if ($enc != 'UTF-8') {
    $str = iconv($enc'UTF-8'$str);
}
 
include_once 'simple_html_dom.php';
 
$html = new simple_html_dom(); // Create a DOM object
$html->load($str); // Load HTML from a string
 
 
$ret = $html->find( 'tr td' );
 
 
//var_dump($ret);
 
//결과 표시
//var_dump($str);
 
//세션을 종료
curl_close($ch);
 
?>
 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
<head>
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?
for ( $k = 1$k <= 60$k++ )
{
    $ret[$k= str_replace("/empInfo/"'https://www.worktogether.or.kr/empInfo/'$ret[$k]);    
    $ret[$k= str_replace("<a ""<a target='NEW'"$ret[$k]);
    $ret[$k= str_replace("<br>"""$ret[$k]);
    $ret[$k= str_replace("  "" "$ret[$k]);
    $ret[$k= str_replace("<td ""<td style='font-size:16px;height:45px;' "$ret[$k]);
}
 
?>
<table style="width:100%;" border = "1">
    <tr>
        <td style="color:#676767;border-top:1px solid black;font-size:15px;height:42px;text-align:center;width:50px;">번호</td>
        <td style="color:#676767;border-top:1px solid black;font-size:15px;height:42px;text-align:left;width:110px;">분류</td>
        <td style="color:#676767;border-top:1px solid black;font-size:15px;height:42px;text-align:left;width:750px;">제목</td>
        <td style="color:#676767;border-top:1px solid black;font-size:15px;height:42px;text-align:left;width:18%;">등록기관</td>
        <td style="color:#676767;border-top:1px solid black;font-size:15px;height:42px;text-align:left;width:18%;">등록/마감일</td>
    </tr>
    <?
 
    for ( $k = 0$k < 10$k++ )
    {
        $myIndex = ($k * 6 ) + 1;
 
        ?>
        <tr>
            <td style="text-align:center;"><?echo $k+1;?></td>
            <?echo $ret[$myIndex ];?>
            <?echo $ret[$myIndex + 1];?>
            <?echo $ret[$myIndex + 2];?>
            <?echo $ret[$myIndex + 3];?>                
        </tr>
        <?
    }
 
?>
</table>
 
</body>
</html>
cs

 

 

위 코드중에서 curl 접속시의 옵션을 설정하는 부분이 있는데요, 그 중에서 CURLOPT_SSL_VERIFYPEER 는, 접속하려는 URL이 https 프로토콜을 사용하는 경우 설정해 줘야 하는 옵션입니다. 

 

 

 

 

 

 

 

 

아래와 같이 curl_exec() 함수를 이용하여 데이터를 가져오게 되는데요

1
2
//cURL 실행
$str = curl_exec($ch);
cs

 

위 함수를 실행한 후에 $str 을 화면에 출력해보면, 아래와 같이 특정 웹사이트의 데이터가 바로 출력되는 걸 확인할 수 있습니다. 

 

웹스크래핑php예제

 

 

 

 

 

 

 

소스코드를 확인해 보면, 특정 사이트의 소스와 동일하다는 것을 확인할 수 있습니다. 

 

웹스크래핑php예제

 

 

 

 

 

 

 

 

HTML DOM Parser 를 이용하여 파싱하기

 

가져온 소스코드 중에서 내가 원하는 특정 데이터를 추려내기 위해서는 파싱(Parsing)을 해줘야 하는데요, 저의 경우는 tr태그와 td 태그를 추려내여 표시하는 케이스 였습니다

 

1
2
3
4
5
6
$html = new simple_html_dom(); // Create a DOM object
$html->load($str); // Load HTML from a string
 
 
$ret = $html->find( 'tr td' );
 
cs

 

 

 

 

 

 

tr태그와 td태그만을 골라내서 $ret 변수에 넣고 출력하기

 

아래 부분은 가져온 데이터를 화면에 뿌려준 후에, 클릭시 원래 링크로 이동할 수 있도록 링크를 걸기위한 부분입니다. 이는, 가져온 데이터에 따라 다르기 때문에 참고만 하시기 바랍니다.  중요한 것은 $ret 배열에 있는 데이터 이니까, 각 케이스에 맞게 활용하시면 될듯합니다. 

 

1
2
3
4
5
6
7
8
for ( $k = 1; $k <= 60; $k++ )
{
    $ret[$k] = str_replace("/empInfo/", 'https://www.worktogether.or.kr/empInfo/', $ret[$k]);    
    $ret[$k] = str_replace("<a ", "<a target='NEW'", $ret[$k]);
    $ret[$k] = str_replace("<br>", "", $ret[$k]);
    $ret[$k] = str_replace("  ", " ", $ret[$k]);
    $ret[$k] = str_replace("<td ", "<td style='font-size:16px;height:45px;' ", $ret[$k]);
}
cs

 

 

 

 

웹스크래핑php예제

 

 

반응형

관련글 더보기

댓글 영역