Вопрос или проблема
Мне нужно экспортировать объемные данные по недвижимости. Есть возможность заменить URL на его название, но это нужно делать по одному в Google Sheets. Я надеялся узнать, есть ли способ сделать это быстрее с помощью Apps Script.
Я пробовал IMPORTXML, но у него есть ограничения.
Я попробовал следующий код, но он только получает имя хост-вебсайта.
function TitleFromURL(input) {
var regex = /^(?:https?:\/\/)?(?:w{3}\.)?([^\.]+)/;
var match = input.match(regex);
return match ? match[1] : '';
}
Пример данных:
Столбец A | Столбец B |
---|---|
https://www.realtor.ca/real-estate/27633475/720b-waverley-road-dartmouth-dartmouth | На продажу: 720B Waverley Road, Dartmouth, Новая Шотландия B2X2G4 – 202426370 |
Преобразование URL в его название с помощью функции SPLIT
Предоставленный вами вебсайт защищен, что предотвращает доступ веб-скрапов к его содержимому. Это связано с различными мерами безопасности, такими как CAPTCHA и блокировка IP, которые предназначены для предотвращения несанкционированного извлечения данных.
Одним из возможных решений является извлечение адреса непосредственно из ссылки. Извлеченный адрес затем можно отформатировать как 720b Waverley Road Dartmouth Dartmouth
.
Пример данных таблицы:
Пример кода:
function titleFromURL(url) {
const urlModif = url.split("https://stackoverflow.com/").pop().replaceAll("-", " ").replace(/\b(\w)/g, f => f.toUpperCase());
console.log(urlModif);
return urlModif;
}
После сохранения кода обратно в вашу таблицу введите это в столбце B
:
=titleFromURL(A1)
Пример вывода:
Ссылка:
Функция SPLIT
.
Ответ или решение
Чтобы преобразовать URL в заголовок в больших объемах данных с помощью Google Apps Script, следуя вашим требованиям, можно использовать скрипт, который запрашивает содержимое веб-страницы и извлекает заголовки. Мы рассмотрим создание функции, которая будет работать с массивом URL и возвращать заголовки для каждого из них.
Шаг 1: Подготовка Google Sheets
- Откройте Google Sheets и создайте новую таблицу.
- Вставьте ваши URL в колонку A, начиная с A1.
Шаг 2: Добавление скрипта
- Нажмите на
Расширения
->Apps Script
. - Удалите любой код в редакторе и вставьте следующий:
function getTitlesFromURLs() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var urls = sheet.getRange("A1:A" + sheet.getLastRow()).getValues(); // Получаем все URL из колонки A
var titles = [];
urls.forEach(function(urlRow) {
var url = urlRow[0];
if (url) {
titles.push([fetchTitle(url)]);
} else {
titles.push([""]); // Пустое значение для пустых URL
}
});
// Записываем заголовки в колонку B
sheet.getRange(1, 2, titles.length).setValues(titles);
}
function fetchTitle(url) {
try {
var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
var html = response.getContentText();
var titleMatch = html.match(/<title>(.*?)<\/title>/);
return titleMatch && titleMatch[1] ? titleMatch[1] : 'Нет заголовка';
} catch (e) {
return 'Ошибка доступа';
}
}
Шаг 3: Запуск скрипта
- Сохраните проект, задав ему имя.
- Вернитесь в Google Sheets.
- Запустите функцию
getTitlesFromURLs
из редактора Apps Script (или добавьте кнопку на лист для упрощения выполнения скрипта).
Объяснение кода
- getTitlesFromURLs: основная функция, которая считывает URL из колонки A и создает массив заголовков для каждой страницы.
- fetchTitle: вспомогательная функция, которая отправляет GET-запрос на указанный URL и использует регулярное выражение для извлечения содержимого тега
<title>
. - Если URL недоступен или возникает ошибка, функция обработает это и вернет сообщение об ошибке или "нет заголовка".
Заметки
- Убедитесь, что у вас есть разрешения на доступ к интернету в вашем скрипте. Google Apps Script требует разрешения для работы с внешними ресурсами.
- Обратите внимание, что некоторые сайты могут блокировать запросы от скриптов, и вы получите ошибку доступа.
- Этот скрипт может занять некоторое время на выполнение, особенно если у вас большое количество URL, поскольку он делает запросы по интернету.
Заключение
Использование Google Apps Script для автоматизации извлечения заголовков из URL значительно сократит ваше время на ручное выполнение этой задачи в Google Sheets. Профильный подход к коду и обработка исключений делают ваш скрипт более надежным и устойчивым к ошибкам.