GAS로 네이버 키워드 크롤링하고, 구글 스프레드시트에 저장하기

![main001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/1302d55a-7279-b7a3-e029-6b0c54d70cd1.png)

## TL;DR
> 원하는 키워드를(예: 배달)의 네이버 검색 결과를 구글 스프레드시트에 저장하는 방법을 기록하였습니다.
> [GAS](https://developers.google.com/apps-script)(Google Apps Script)를 사용하였습니다. (무료 + 서버리스)

## How To
### 구글 스프레드시트
도구 > 스크립트 편집기
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/47292496-1855-8595-8d43-691c3b575781.png)

### 구글 스크립트
리소스 > 라이브러리 > 제목 없는 프로젝트 > Add a library 입력 후 추가> Parser 사용 > 저장
> Add a library : `M1lugvAXKKtUxn_vdAG9JZleS6DrsjUUV`
> Parser 버전 8 선택, Development mode 사용

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/0b9bf6e6-3896-7535-d32c-18683bbf882a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/93f20645-0991-90fe-1409-996e84a14370.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/76b6f13e-4325-30c3-7492-a2d8c6eb3092.png)

##### 코드입력 후 저장

```javascript:코드.gs
function myFunction() {  
    // request
    var keyword = '배달';
    var url = "https://m.search.naver.com/search.naver?where=m_news&sm=mtb_jum&query=" + keyword;
    var options = {
        'method': 'GET',
        'muteHttpExceptions': true,
    }
    // 네이버에 요청하기
    var response = UrlFetchApp.fetch(url, options);
    var html = response.getContentText('UTF-8');

    // 제목, 링크, 언론사, 날짜 : 15개 결과 나옴
    var subject = Parser.data(html).from('<div class="api_txt_lines tit">').to('</div>').iterate();
    var link = Parser.data(html).from('<div class="dsc_wrap">').to('class=').iterate();
    var press = Parser.data(html).from('default_press\'"></span>').to('<').iterate();
    var date = Parser.data(html).from('</a><span class="info">').to('<').iterate();

    // subject
    var subjectArray = [];
    for (i = 0; i < subject.length; i++) {
        // 1차 가공
        subject[i] = subject[i].replace('</b>', '').replace('<b class="hl">', '').replace(/&quot;/g, '').replace(/"/g, '').replace(/&gt;/g, '');
        // 2차 가공
        subject[i] = subject[i].replace(/(<([^>]+)>)/ig, "");
        subjectArray.push(subject[i]);
    }

    // link
    var linkArray = [];
    for (i = 0; i < link.length; i++) {
        link[i] = link[i].replace('<a href=', '').replace(/"/g, '').trim();
        linkArray.push(link[i]);
    }

    // press
    var pressArray = [];
    for (i = 0; i < press.length; i++) {
        press[i] = press[i].replace('</span>', '').replace('<', '').replace('>', '').replace(/&quot;/g, '').replace(/"/g, '').replace(/&gt;/g, '');
        pressArray.push(press[i]);
    }

    // date
    var dateArray = [];
    for (i = 0; i < date.length; i++) {
        date[i] = date[i].replace('</span>', '').replace('<', '').replace('>', '').replace(/&quot;/g, '').replace(/"/g, '').replace(/&gt;/g, '');
        dateArray.push(date[i]);
    }
  
    // 스프레드시트 시작
    var sheet = SpreadsheetApp.getActiveSheet();
    // 시트 클린
    sheet.clear();
    // row, col 
    // A1,B1,C1,D1 고정한다.
    sheet.getRange(1, 1).setValue('링크'); // 1행,1열
    sheet.getRange(1, 2).setValue('제목');
    sheet.getRange(1, 3).setValue('언론사');
    sheet.getRange(1, 4).setValue('날짜');
    
    // 링크값 길이로 루프를 돌린다.
    for (i = 0; i < linkArray.length; i++) {        
        row_list = [linkArray[i], subjectArray[i], pressArray[i], dateArray[i]]; // 링크, 제목, 언론사, 날짜
        // 시트에 넣기
        sheet.appendRow(row_list);        
    }
}
```
##### 코드실행
실행 > 함수 실행 > myFunction > 권한 검토 > 확인되지 않은 앱 > 고급 > 제목 없는 프로젝트(으)로 이동(안전하지 않음) > 허용

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/dad6d65b-9bc3-105f-7810-40c105ea3124.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/b2332fe6-d780-c07c-ec03-befc21e49f08.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/e7c32705-601d-21b0-c00f-c4dd1e834844.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/9d9dd0b5-ca35-f928-95a4-5f15592e358b.png)

`Running function myFunction` 약 5초 내외로 동작되요. > 스프레드시트 확인
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/166843ec-b50b-e1d4-cae0-e0702a557dc0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/ed96a474-8fd2-38a7-17eb-835f0ea7df63.png)