{
  "version": "1.0.0",
  "exported_at": "2026-06-02T11:15:00.000Z",
  "project": {
    "name": "Naver Academic Scraper",
    "description": "Best-effort NAVER Academic article metadata scraper equivalent to the Octoparse template. It extracts academic paper fields from NAVER Academic detail pages and loops through the provided article URLs, appending all records to naver-academic-scraper.csv. Replace or extend navigate.urls with article URLs collected for your keyword search. NAVER may present CAPTCHA or rate limiting; solve manually if needed.",
    "color": "bg-[#4589ff]",
    "template_id": "ai-generated"
  },
  "blocks": [
    {
      "block_id": "navigate-1",
      "block_type": "process",
      "title": "Navigate",
      "description": "Go to a URL",
      "position_x": 120,
      "position_y": 260,
      "config": {
        "urls": [
          "https://academic.naver.com/article.naver?doc_id=862777024",
          "https://academic.naver.com/article.naver?doc_id=862780809",
          "https://academic.naver.com/article.naver?doc_id=761655209",
          "https://academic.naver.com/article.naver?doc_id=630707763"
        ],
        "color": "bg-[#4589ff]",
        "tags": [
          "naver-academic",
          "multi-url"
        ]
      }
    },
    {
      "block_id": "wait-for-page-load-1",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 480,
      "position_y": 260,
      "config": {
        "timeout": 30
      }
    },
    {
      "block_id": "wait-for-element-1",
      "block_type": "process",
      "title": "Wait for Element",
      "description": "Wait until element appears",
      "position_x": 840,
      "position_y": 260,
      "config": {
        "selector": ".wrap",
        "timeout": 30,
        "visible": true
      }
    },
    {
      "block_id": "sleep-1",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 1200,
      "position_y": 260,
      "config": {
        "duration": 1
      }
    },
    {
      "block_id": "structured-export-1",
      "block_type": "process",
      "title": "Structured Export",
      "description": "Export data with custom columns",
      "position_x": 1560,
      "position_y": 260,
      "config": {
        "rowSelector": "body",
        "fileName": "naver-academic-scraper.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "append",
        "columns": [
          {
            "name": "data_type",
            "selector": "(()=>{const hs=Array.from(document.querySelectorAll('h3')).map(e=>e.innerText.trim()).filter(Boolean);return hs.find(x=>/논문|보고서|도서|학술/.test(x))||'학술논문';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "title",
            "selector": "(()=>{const m=document.querySelector('meta[property=\"og:description\"]');let v=(m?.content||'').trim();if(v)return v.replace(/\\s+/g,' ');const t=document.title.replace(/^NAVER 학술정보\\s*>\\s*/,'').trim();return t;})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "price",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');if(t.includes('무료원문')||t.includes('무료'))return '무료';if(t.includes('유료원문'))return '유료';return '';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "publish_year",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/발행정보\\s+.*?(\\d{4})년/);return m?m[1]:'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "original_view_count",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/무료원문\\s+(.+?)\\s+(?:유료원문|도서관 링크|주제분야|키워드)/);if(!m)return '';const s=m[1].trim();if(/원문\\s*보기/.test(s))return '1';return String(s.split(/\\s+/).filter(x=>x && !/^(원문|보기)$/.test(x)).length);})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "library_link_count",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/도서관 링크\\s+(.+?)\\s+(?:설정|주제분야|키워드)/);if(!m)return '';return String(m[1].trim().split(/\\s+/).filter(Boolean).length);})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "title_link",
            "selector": "location.href",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "doc_id",
            "selector": "(()=>{try{return new URL(location.href).searchParams.get('doc_id')||'';}catch(e){return ''}})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "search_keyword",
            "selector": "(()=>{const id=new URL(location.href).searchParams.get('doc_id')||'';return ({'862777024':'취업 대학교육 만족도','862780809':'취업 대학교육 만족도','761655209':'인공지능 교육','630707763':'반도체규제 화웨이'}[id]||'');})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "subtitle",
            "selector": "(()=>{const text=document.body.innerText.replace(/\\s+/g,' ');const title=(document.querySelector('meta[property=\"og:description\"]')?.content||'').trim().replace(/\\s+/g,' ');let i=title?text.indexOf(title):-1;if(i<0)return '';let after=text.slice(i+title.length);let m=after.match(/^\\s*(.+?)\\s+저자\\s+/);return m?m[1].trim():'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "author",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/저자\\s+(.+?)\\s+소속/);return m?m[1].trim():'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "affiliation",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/소속\\s+(.+?)\\s+학술지정보/);return m?m[1].trim():'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "journal_info",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/학술지정보\\s+(.+?)\\s+(?:Selected option|ISSN|발행정보)/);return m?m[1].trim():'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "issn",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/ISSN\\s+([0-9Xx\\-]+)/);return m?m[1].trim():'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "publisher",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/발행정보\\s+(.+?)\\s+피인용횟수/);return m?m[1].replace(/\\s*\\d{4}년\\s*$/,'').trim():'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "publication_info",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/발행정보\\s+(.+?)\\s+피인용횟수/);return m?m[1].trim():'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "citation_count",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/피인용횟수\\s+([\\d,]+)/);return m?m[1].trim():'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "data_provider",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/자료제공처\\s+(.+?)\\s+DOI/);return m?m[1].trim():'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "doi",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/DOI\\s+(\\S+)/);return m?m[1].trim():'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "subject_area",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/주제분야\\s+(.+?)\\s+키워드/);return m?m[1].trim():'';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "keywords",
            "selector": "(()=>{const t=document.body.innerText.replace(/\\s+/g,' ');const m=t.match(/키워드\\s+(.+?)\\s+초록/);return m?m[1].trim():'';})()",
            "attribute": "text",
            "isJs": true
          }
        ]
      }
    },
    {
      "block_id": "loop-continue-1",
      "block_type": "process",
      "title": "Loop Continue",
      "description": "Continue multi-input loop",
      "position_x": 1920,
      "position_y": 260,
      "config": {}
    }
  ],
  "connections": [
    {
      "from_block_id": "navigate-1",
      "from_connector_id": "right",
      "to_block_id": "wait-for-page-load-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-page-load-1",
      "from_connector_id": "right",
      "to_block_id": "wait-for-element-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-element-1",
      "from_connector_id": "right",
      "to_block_id": "sleep-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-1",
      "from_connector_id": "right",
      "to_block_id": "structured-export-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "structured-export-1",
      "from_connector_id": "right",
      "to_block_id": "loop-continue-1",
      "to_connector_id": "left"
    }
  ],
  "canvas_elements": [
    {
      "id": "group-load",
      "element_type": "group",
      "title": "Page Load",
      "color": "#08bdba",
      "position_x": 48,
      "position_y": 156,
      "width": 1400,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "navigate-1",
          "wait-for-page-load-1",
          "wait-for-element-1",
          "sleep-1"
        ]
      }
    },
    {
      "id": "group-extract",
      "element_type": "group",
      "title": "Data Extraction",
      "color": "#42be65",
      "position_x": 1488,
      "position_y": 156,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "structured-export-1"
        ]
      }
    },
    {
      "id": "group-pagination",
      "element_type": "group",
      "title": "Pagination Loop",
      "color": "#ff832b",
      "position_x": 1848,
      "position_y": 156,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "loop-continue-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Best-effort NAVER Academic article metadata scraper equivalent to the Octoparse template. It extracts academic paper fields from NAVER Academic detail pages and loops through the provided article URLs, appending all records to naver-academic-scraper.csv. Replace or extend navigate.urls with article URLs collected for your keyword search. NAVER may present CAPTCHA or rate limiting; solve manually if needed.",
      "color": "#f1c21b",
      "position_x": 80,
      "position_y": 20,
      "width": 480,
      "height": 160,
      "z_index": 22,
      "data": {}
    },
    {
      "id": "note-block-structured-export-1",
      "element_type": "note",
      "title": "Note: Structured Export",
      "content": "Structured export with JS columns (data_type, title, price, publish_year, original_view_count). These selectors are fragile — update if the site layout changes.",
      "color": "#ee5396",
      "position_x": 1760,
      "position_y": 240,
      "width": 340,
      "height": 133,
      "z_index": 22,
      "data": {
        "block_id": "structured-export-1"
      }
    },
    {
      "id": "note-block-loop-continue-1",
      "element_type": "note",
      "title": "Note: Loop Continue",
      "content": "Loop Continue advances a multi-URL or multi-text loop. Place at the end of the loop body with a clear back-edge to the loop start.",
      "color": "#ee5396",
      "position_x": 2120,
      "position_y": 240,
      "width": 340,
      "height": 123,
      "z_index": 22,
      "data": {
        "block_id": "loop-continue-1"
      }
    }
  ]
}