0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-12-15

main001.png

TL;DR

원하는 키워드를(예: 배달)의 네이버 검색 결과를 구글 스프레드시트에 저장하는 방법을 기록하였습니다.
GAS(Google Apps Script)를 사용하였습니다. (무료 + 서버리스)

How To

구글 스프레드시트

도구 > 스크립트 편집기
image.png

구글 스크립트

리소스 > 라이브러리 > 제목 없는 프로젝트 > Add a library 입력 후 추가> Parser 사용 > 저장

Add a library : M1lugvAXKKtUxn_vdAG9JZleS6DrsjUUV
Parser 버전 8 선택, Development mode 사용

image.png
image.png
image.png

코드입력 후 저장
코드.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
image.png
image.png
image.png

Running function myFunction 약 5초 내외로 동작되요. > 스프레드시트 확인
image.png
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?