GAS로 스크래핑을 기본 동작 해 본다. 해설 첨부.
왼쪽 상단에서 [파일], [편집], 라는 느낌으로 [스크립트 실행]이라는 항목이 나타납니다. onOpen 함수는 스프레드 시트를 열 때 실행되는 이벤트 처리기입니다.
코드.gs
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [
{
name : "タイトルを取得する",
functionName : "update"
}
];
sheet.addMenu("スクリプト実行", entries);
}
그리고 기본적인 흐름이군요. 시트의 셀 정보를 2차원 배열에 저장합니다.
스프레드시트의 API 작업은 상당히 느립니다.
그러므로
①【셀 정보를 시트로 정리해 취득한다】
②【GAS측에서 정리해 배열 처리한다】
③【배열을 시트에 정리해 격납한다】
하고 있습니다.
코드.gs
function update(){
var urls = [];
var titles =[];
var sheet = SpreadsheetApp.getActive().getSheetByName('シート1');
var sheet_data = sheet.getDataRange().getValues(); // シート全体のデータを取得する。dataにはシートのデータが2次元配列で入る
Logger.log("data.length:", sheet_data.length);
urls = getUrls(sheet_data);
sheet_data = getTitles(sheet_data, urls);
setSheet(sheet_data, sheet);
}
배열에서 URL 데이터를 추출하는 곳입니다.
코드.gs
function getUrls(sheet_data){
var urls = []; // URL列のURLを格納する
const urlColumnIndex = 0; // URL列を指定する
Logger.log("sheet_data.length:" + sheet_data.length);
for (var i = 0; i < sheet_data.length; i++) {
urls.push(sheet_data[i][urlColumnIndex]);
Logger.log("url:", urls[i]);
}
return urls;
}
여기가 이번 키모군요.
스크래핑합니다.
추출하려는 부분을 [beginning_tag]와 [ending_tag] 사이에 끼워 지도록 지정합니다. 아래의 예는 【호냐라라】를 꺼냅니다.
코드.gs
function getTitles(sheet_data, urls) {
// <title> ほにゃらら</title>;
var beginning_tag = "<title>";
var beginning_index;
var ending_tag = "</title>";
var ending_index;
var html;
var url;
var titles = [];
const titleColumnIndex = 1; // タイトル列を指定する
for (var i = 0; i < urls.length; i++) {
url = urls[i];
if (i==0 && url == "URL"){
titles[i] = "タイトル";
}
if (url !== "URL"){
html = UrlFetchApp.fetch(url).getContentText('UTF-8');
beginning_index = html.indexOf(beginning_tag);
ending_index = html.indexOf(ending_tag);
if (beginning_index !== -1 && ending_index !== -1) {
titles[i] = html.substring(beginning_index + beginning_tag.length, ending_index);
}
}
Logger.log("title:", titles[i]);
}
for(i=0; i<titles.length; i++){
sheet_data[i][titleColumnIndex] = titles[i];
}
return sheet_data;
}
마지막으로 시트에 스크래핑한 문자열을 저장하는 작업입니다.
여기도 시간을 줄이기 위해 배열을 함께 스프레드 시트에 저장합니다.
코드도 보기 쉬워지네요.
코드.gs
function setSheet(sheet_data,sheet){
const LastRow = sheet.getDataRange().getLastRow();
const LastCol = sheet.getDataRange().getLastColumn();
sheet.getRange(1,1,LastRow,LastCol).setValues(sheet_data);
}
URL이 A열, 타이틀이 B열이군요.
Reference
이 문제에 관하여(GAS로 스크래핑을 기본 동작 해 본다. 해설 첨부.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/daakuro1124/items/71815cb9129ffecc97b0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)