Ai-macro

게시글 검색
게시판에서 닉네임만 추출 하는 방법
조회수:1156
2018-05-27 02:00:00

이번 게시글에서는 게시판의 특정값을 추출하는 방법을 알려드리겠습니다.

 

주로 사용이 되는 특정값 추출! 이번에는 홈페이지의 게시판 닉네임 추출편입니다.

 

[매크로소스1]

 

첨부된 파일에는 위와 같은 매크로 소스가 작성되어 있습니다.

[매크로소스1]을 풀이해 드릴거에요. 매크로에 해당 샘플을 설치하시면 더 이해하기 쉽습니다!

 

라인 2 - 리스트가 잘 안보여 확인을 위해 스크립트로 스크롤을 내린 부분입니다. 무시하셔도 됩니다.

 

 

라인 6 - [명령어 strpos] 를 이용하여 게시글이 있는지 없는지 체크하기위해 있는 소스입니다.

복사한 html 소스내에 "등록된 게시글이 없습니다." 라는 텍스트가 있는지 없는지를 체크합니다.

텍스트가 있을 경우 0이상을 없을경우 -1을 $list_chk 에 반환합니다.

 

 

라인 8 ~ 12 - 반환된 $list_chk 을 [명령어 if] 를 이용하여 게시글이 없을경우 매크로를 정지합니다.

 

게시글을 체크했으니 라인 13 부터는 리스트가 있을때 실행이 되겠죠? 이제 리스트를 추출할거에요.

아래의 [참고소스1]을 참고해 주세요.

 

[참고소스1] - 매크로에서 이동되는 사이트는 아래와 같이 소스가 구성되어 있습니다.


<table class="content_table">

    <thead></thead>

    <tbdoy>

       <tr align="center">

         <td>13</td>

         <td>Ai-macro 게시판의 제목입니다. 첫번째 게시글입니다.</td>

         <td><span class="wordbreak">홍길동</span></td>

         <td>2018-01-01</td>

         <td>30</td>

         <td>0</td>

       </tr>

       <tr align="center">

         <td>12</td>

         <td>Ai-macro 게시판의 제목입니다. 두번째 게시글입니다.</td>

         <td><span class="wordbreak">홍길동</span></td>

         <td>2018-01-01</td>

         <td>30</td>

         <td>0</td>

       </tr>

       <tr align="center">

         <td>13</td>

         <td>Ai-macro 게시판의 제목입니다. 세번째 게시글입니다.</td>

         <td><span class="wordbreak">홍길동</span></td>

         <td>2018-01-01</td>

         <td>30</td>

         <td>0</td>

       </tr>

    </tbody>

</table>


 

라인 14 - 게시판을 감싸고 있는 <table> 내의 소스를 추출하여 $tbdoy 에 저장합니다. (빨간색 텍스트 내의 소스 추출)

라인 15 - $tbdoy[0] 에서 <tbody> 내의 소스를 추출하여 $tr 에 저장합니다. (파란색 텍스트 내의 소스 추출)

라인 16 - $tr[0] 에서 <tr> 내의 소스를 추출하여 $td 에 저장합니다. (같은 패턴인 녹색 텍스트 내의 소스 모두 추출)

- 여기서 $td 에 저장된 값은 리스트 각 줄별로 데이터가 들어갑니다. (자세한 html 소스가공내용은 여기서 확인해 주세요.)

- $td 를 [명령어 log] 로 출력을 해보면 아래와 같이 10개가 출력됩니다.

 

[참고소스2]


17    2018-06-04 15:02:41
log : $td[0] => <td style="padding: 0px; color: rgb(37, 37, 37); font-size: 12px;" ~~생략~~ </td>
log : $td[1] => <td style="padding: 0px; color: rgb(37, 37, 37); font-size: 12px;" ~~생략~~ </td>
log : $td[2] => <td style="padding: 0px; color: rgb(37, 37, 37); font-size: 12px;" ~~생략~~ </td>
log : $td[3] => <td style="padding: 0px; color: rgb(37, 37, 37); font-size: 12px;" ~~생략~~ </td>
log : $td[4] => <td style="padding: 0px; color: rgb(37, 37, 37); font-size: 12px;" ~~생략~~ </td>
log : $td[5] => <td style="padding: 0px; color: rgb(37, 37, 37); font-size: 12px;" ~~생략~~ </td>
log : $td[6] => <td style="padding: 0px; color: rgb(37, 37, 37); font-size: 12px;" ~~생략~~ </td>
log : $td[7] => <td style="padding: 0px; color: rgb(37, 37, 37); font-size: 12px;" ~~생략~~ </td>
log : $td[8] => <td style="padding: 0px; color: rgb(37, 37, 37); font-size: 12px;" ~~생략~~ </td>
log : $td[9] => <td style="padding: 0px; color: rgb(37, 37, 37); font-size: 12px;" ~~생략~~ </td>


Tip1. 여러번 추출하는 이유는 같은 패턴이 있을경우 모두 추출되기 때문입니다. 

만약 같은패턴이 없다면 바로 <tr>을 추출해도 무관합니다.

 


리스트가 추출되었으니 각각 가공을 하여 닉네임을 추출해 볼게요.

라인 20 - [명령어 while] 반복문을 이용하여 각 리스트별로 추출을 시작합니다.

- 리스트 배열이 추출되면 [명령어 while] 사용! 바로 연관되는 명령어이니 한세트로 기억해 주세요~!

$list_val 로 각각 리스트값을 출력해줍니다. 첫번째 출력소스는 아래와 같습니다.

 

[참고소스3]


<td>13</td>

<td>Ai-macro 게시판의 제목입니다. 첫번째 게시글입니다.</td>

<td><span class="wordbreak">홍길동</span></td>

<td>2018-01-01</td>

<td>30</td>

<td>0</td>


 

 

라인 21 - [명령어 split] </td> 부분을 기준으로 자르고 $td_data 에 배열로 생성합니다.

[명령어 log] 에 $td_data 를 출력해 보시면 아래와 같이 나옵니다.

 

[참고소스4]


$td_data[0] => <td>13

$td_data[1] => <td>Ai-macro 게시판의 제목입니다. 첫번째 게시글입니다.

$td_data[2] => <td><span class="wordbreak">홍길동</span>

$td_data[3] => <td>2018-01-01

$td_data[4] => <td>30

$td_data[5] => <td>0


 

저희가 필요한건 $td_data[2] 에 있네요. 아직 소스가 남아있으니 <span>을 제거해야겠죠?

라인 21 - [참고소스4] 에서 [명령어 filter] 를 이용해 빨간부분 내의 텍스트를 추출합니다.

 

 

라인 22[명령어 log] 로 $nick_name[0] 을 출력하면 각 게시글별로 닉네임이 추출됩니다!

 

필자는 Ai-macro에서 추출하는 소스를 프로그램 소스라고 생각는것보다

하나의 문장이라 생각하고 나누고 버리고 자르며 소스작성을 하시면 조금더 접근하기가 쉽지 않을까 생각합니다.

 

다음 [게시판 관련] 게시글에서는 페이지이동하며 html소스를 추출해 볼게요~

페이지 이동은 게시판리스트 추출에서는 꼭 필요한부분이니 게시글 확인하시는거 잊지마세요~! (페이지 이동관련 바로가기)