Business process automation expert
Fedezze fel a webes adatokban rejlő lehetőségeket haladó programozási ismeretek nélkül! Ez az útmutató bemutatja, hogyan lehet egyszerűen adatokat kinyerni webhelyekről közvetlenül a Google Táblázatokba a Google Apps Script segítségével, új lehetőségek világát nyitva meg a vállalkozások számára. Automatizálja a piackutatást, a versenytárs-elemzést és az adatgyűjtést, számtalan órányi kézi munkát takarítva meg és értékes betekintést nyerve – mindezt anélkül, hogy mélyreható HTML-ismeretekre lenne szükség.
A webes adatkinyerés ahhoz hasonlít, mintha automatikusan másolnánk és beillesztenénk információkat webhelyekről. Képzelje el, hogy van egy digitális asszisztense, amely webhelyeket látogat meg, és automatikusan összegyűjti a megadott információkat. Ahelyett, hogy manuálisan jelölné ki és másolná a szöveget vagy képeket, egy program végzi el ezt a feladatot Ön helyett, olyan adatokat gyűjtve, mint például árak, termékadatok vagy elérhetőségek.
Ezeket a kinyert adatokat aztán különféle célokra lehet felhasználni, beleértve az árak összehasonlítását különböző online kereskedőknél, értékesítési érdeklődők gyűjtését, értesítések létrehozását tartalomváltozásokról és még sok mást. Lényegében a webes adatkinyerés automatizálja az unalmas kézi munkát, jelentős időt és energiát takarítva meg a nagy mennyiségű webes adat hatékony kinyerésével és rendszerezésével.
Napjaink versenyképes üzleti környezetében a termelékenység és az optimalizált erőforrás-elosztás kulcsfontosságú a sikerhez. A webes adatkinyerés értékes eszköz e célok eléréséhez, jelentősen javítva a termelékenységet az időigényes adatgyűjtés és -elemzés automatizálásával.
A webhelyekről történő adatkinyerés automatizálásával a vállalkozások jelentős időt és energiát takarítanak meg a manuális módszerekhez képest. Ez a megnövekedett hatékonyság lehetővé teszi a csapatok számára, hogy az ismétlődő feladatok helyett stratégiai kezdeményezésekre összpontosítsanak.
Továbbá, a webes adatkinyeréssel gyűjtött adatok nem csupán önmagukban jelentenek célt; kulcsfontosságú bemenetként szolgálnak további automatizálási folyamatokhoz. Például, a kinyert adatok dinamikus, versenyalapú árképzési stratégiákat támogathatnak az e-kereskedelemben, vagy automatikusan azonosíthatnak értékes befektetési lehetőségeket több portál ingatlanhirdetéseinek összesítésével.
Ez a zökkenőmentes integráció más automatizálási munkafolyamatokkal felerősíti a webes adatkinyerés hatását, nélkülözhetetlen eszközzé téve azt minden előremutató vállalkozás számára.
A Google Apps Script egy JavaScript alapú, felhőalapú szkriptnyelv, amely lehetővé teszi feladatok automatizálását és hatékony integrációk létrehozását a Google Workspace-en (korábban G Suite) belül. Egyedülálló előnye abban rejlik, hogy zökkenőmentesen képes összekapcsolni különböző Google szolgáltatásokat, beleértve a Gmailt, a Dokumentumokat, a Drive-ot, a Naptárat és – ami fontos – a Táblázatokat, így kivételesen alkalmas átfogó automatizálások létrehozására. Ez az összekapcsoltság lehetővé teszi, hogy több alkalmazáson átívelő munkafolyamatokat hozzon létre, egyszerűsítve a folyamatokat és növelve a termelékenységet.
Kifejezetten a webes adatkinyeréshez az Apps Script UrlFetchApp
szolgáltatása lehetővé teszi, hogy közvetlenül weboldalakról kérjen le tartalmat, lehetővé téve az automatizált adatkinyerést és integrációt a többi Google Workspace alkalmazásával. HTTP kérések webhelyekre történő küldésével HTML, XML vagy JSON adatokat kérhet le. Ezeket a kinyert adatokat aztán a szkripten belül JavaScript segítségével lehet feldolgozni és strukturálni.
Ennek a megközelítésnek az igazi ereje akkor mutatkozik meg, ha a Google Táblázatokkal kombináljuk: a kinyert adatok közvetlenül táblázatokba írhatók, kényelmes és ismerős környezetet biztosítva az adattároláshoz, rendszerezéshez, elemzéshez, vizualizációhoz és további automatizáláshoz.
Létrehozunk egy rendszert, amely a következőket végzi:
Először is szüksége lesz egy Google Táblázatra. A Google Táblázatának legalább két oszlopot kell tartalmaznia:
Itt talál egy sablont a táblázathoz.
Az adatkinyerő eszköz következő kulcsfontosságú lépése, hogy pontosan megmondja neki, melyik információt kell lekérnie a weboldalról. Itt jön képbe a CSS szelektor.
Gondoljon a CSS szelektorra úgy, mint egy címre, amely egy adott elemhez tartozik egy weboldalon – például az árhoz, egy termékcímhez vagy egy értékelésszámhoz. Így találhatja meg egyszerűen ezt a címet a Chrome böngésző segítségével:
Ennyi az egész! Az adott elem CSS szelektorát most a vágólapra másolta. Ezt az értéket kell majd beillesztenie a Google Táblázat C oszlopába az adott termék URL-jéhez, megadva ezzel a kinyerő szkriptnek, hogy pontosan mit keressen az oldalon.
Most nézzük meg a kódot, amely a varázslatot végzi. Nyissa meg a szkriptszerkesztőt a Google Táblázatában az „Eszközök” > „Szkriptszerkesztő” menüponton keresztül. Másolja be az alább megadott kódot a szkriptszerkesztőbe.
/**
* Fetches product prices from URLs in a Google Sheet and updates the sheet with the prices.
*/
// Configuration (Update these with your actual values)
const SHEET_ID = `YOUR_SHEET_ID`; // Replace with your actual Sheet ID
const SHEET_NAME = `YOUR_SHEET_NAME`; // Replace with your actual Sheet Name
const URLS_COLUMN_ID = 1; // Column containing URLs (A = 1)
const CSS_SELECTOR_COLUMN = 2; // Column containing CSS selectors (B = 2)
const PRICE_COLUMN = 3; // Column to write prices (C = 3)
const REQUEST_DELAY = 1000; // Delay between requests in milliseconds (1 second)
/**
* Main function to run the script.
*/
function main() {
const urlData = getUrlsFromSheet();
if (urlData.length === 0) {
Logger.log("No URLs to process.");
return;
}
const prices = [];
for (let i = 0; i < urlData.length; i++) {
const url = urlData[i].url;
const selector = urlData[i].selector;
const html = fetchHtml(url);
const price = extractPrice(html, selector);
prices.push(price);
Utilities.sleep(REQUEST_DELAY); // Delay between requests
Logger.log(`Processed URL ${i+1}/${urlData.length}: ${url}, Price: ${price}`);
}
updateSheet(prices);
}
/**
* Opens the spreadsheet and gets the URLs and selectors.
* @return {Array<{url: string, selector: string}>} An array of objects containing URLs and selectors.
*/
function getUrlsFromSheet() {
const ss = SpreadsheetApp.openById(SHEET_ID);
const sheet = ss.getSheetByName(SHEET_NAME);
const lastRow = sheet.getLastRow();
if (lastRow < 2) return []; // Handle empty sheet
const urls = sheet.getRange(2, URLS_COLUMN_ID, lastRow - 1)
.getValues()
.flat(); // Get values as a 1D array.
const selectors = sheet.getRange(2, CSS_SELECTOR_COLUMN, lastRow - 1)
.getValues()
.flat(); // Get values as a 1D array.
const urlData = [];
for (let i = 0; i < urls.length; i++) {
urlData.push({
url: urls[i],
selector: selectors[i]
});
}
return urlData;
}
/**
* Fetches the HTML content of a URL.
* @param {string} url The URL to fetch.
* @return {string|null} The HTML content, or null if there's an error.
*/
function fetchHtml(url) {
try {
const options = {
method: 'get',
muteHttpExceptions: true,
headers: { // Added some common headers
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'Accept-Language': 'en-US,en;q=0.9',
'Cache-Control': 'no-cache'
}
};
const response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() === 200) {
return response.getContentText();
} else {
Logger.log(`Error fetching ${url}: ${response.getResponseCode()} - ${response.getContentText()}`);
return null;
}
} catch (error) {
Logger.log(`Error fetching ${url}: ${error}`);
return null;
}
}
/**
* Extracts the price from the HTML using Cheerio.
* @param {string} html The HTML content.
* @param {string} selector The CSS selector to use.
* @return {number|null} The extracted price as a number, or null if not found.
*/
function extractPrice(html, selector) { // Added selector parameter
if (!html || !selector) return null; // Added check for selector
try {
const $ = Cheerio.load(html);
let priceText = $(selector).text(); // Use provided selector
if (!priceText) {
Logger.log("Price element not found using selector: " + selector);
return null;
}
priceText = priceText.replace(/,/g,'.');
let price = parseFloat(priceText.replace(/[^0-9.]/g, ''));
if (isNaN(price)) {
Logger.log("Could not parse price to a number: " + priceText);
return null;
}
return price;
} catch (error) {
Logger.log("Error extracting price: " + error);
return null;
}
}
/**
* Updates the Google Sheet with the extracted prices.
* @param {Array<number|null>} prices An array of prices to write to the sheet.
*/
function updateSheet(prices) {
if (prices.length === 0) return;
const ss = SpreadsheetApp.openById(SHEET_ID);
const sheet = ss.getSheetByName(SHEET_NAME);
const lastRow = sheet.getLastRow();
const urlsCount = sheet.getRange(2, URLS_COLUMN_ID, lastRow - 1).getValues().flat().length;
if (prices.length !== urlsCount) {
Logger.log(`Number of prices (${prices.length}) does not match the number of URLs (${urlsCount}).`);
return;
}
sheet.getRange(2, PRICE_COLUMN, prices.length, 1).setValues(prices.map(price => [price]));
}
Mielőtt elkezdené használni ezt a kódot, ne felejtse el hozzáadni a Cheerio könyvtárat. Ez a külső könyvtár segít nekünk a HTML könnyebb feldolgozásában, és manuálisan kell hozzáadni a projektünkhöz. Ehhez tegye a következőket:
1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
A könyvtárnak most meg kell jelennie a „Könyvtárak” (Libraries) párbeszédpanelen.
A termékárak követésére szolgáló Google Apps Script kódunk több kulcsfontosságú, együttműködő függvényből áll. Nézzük meg részletesen, hogy melyik mit csinál:
1. main()
main
függvény az elsődleges belépési pont, amely az árak lekérésének és frissítésének teljes folyamatát irányítja. Más függvényeket hív meg a megfelelő sorrendben a feladat elvégzéséhez.getUrlsFromSheet()
függvény meghívásával kezdődik, hogy lekérje az URL-ek listáját és a hozzájuk tartozó CSS szelektorokat a táblázatból.fetchHtml()
függvényt a weboldal tartalmának letöltéséhez.extractPrice()
függvénynek az ár megtalálásához.Utilities.sleep()
) a webhelyek túlterhelésének elkerülése érdekében.updateSheet()
függvényt, hogy az összes összegyűjtött árat visszaírja a táblázatba.main()
függvényre úgy, mint egy Projektmenedzserre. Nem maga végzi a speciális feladatokat, de ismeri a végső célt, és a megfelelő sorrendben irányítja a specialistákat (getUrlsFromSheet
, fetchHtml
, extractPrice
, updateSheet
), biztosítva, hogy a projekt (az árkövetés) lépésről lépésre megvalósuljon.2. getUrlsFromSheet()
SHEET_ID
) alapján.SHEET_NAME
) alapján.URLS_COLUMN_ID
).CSS_SELECTOR_COLUMN
).3. fetchHtml()
url
-t kap bemenetként.UrlFetchApp.fetch()
szolgáltatását használja, hogy kérést küldjön az adott URL-re.options
(opciókat) (mint például User-Agent
fejléceket), hogy a kérés inkább egy szabványos webböngészőtől érkezőnek tűnjön, ami segíthet megelőzni, hogy egyes webhelyek letiltsák.null
értéket ad vissza.fetchHtml()
függvényt úgy, mint egy Webes Felderítőt. Ad neki egy címet (URL), ő pedig elmegy erre a helyre az interneten, másolatot készít az oldal alapjául szolgáló tervrajzról (a HTML-ről), és visszahozza Önnek ezt a tervrajzot. Még arra is törekszik, hogy átlagos látogatónak tűnjön a gyanú elkerülése érdekében.4. extractPrice()
html
tartalmat és a selector
-t.Cheerio
könyvtárat használja (amelyet hozzá kell adni az Apps Script projekthez) a HTML feldolgozásához, megkönnyítve a keresést.selector
segítségével pontosan beazonosítja az árat tartalmazó HTML elemet.null
értéket ad vissza. Ellenkező esetben visszaadja a numerikus árat.extractPrice()
függvényre úgy, mint egy Adatdetektívre. Kap egy nagy dokumentumot (HTML) és egy konkrét nyomot (a CSS szelektort). A nyom segítségével megtalálja a pontos adatdarabot (az árat tartalmazó szöveget), gondosan eltávolít minden zavaró jelet (pénznem szimbólumok, vesszők), és jelenti a talált végső numerikus értéket.5. updateSheet()
prices
tömböt (amelyet a main
függvény gyűjtött össze).getUrlsFromSheet
függvényhez).PRICE_COLUMN
), a második sortól kezdve és a szükséges számú sort átfogva.[[ár1], [ár2], ...]
).setValues()
segítségével beírja a táblázat kiválasztott tartományába.Miután beillesztette a kódot a szkriptszerkesztőbe:
main()
függvényt. Engedélyeznie kell a szkript számára a Google Táblázathoz való hozzáférést.extractPrice(html, selector)
függvény a leginkább webhelyspecifikus rész. Az árak HTML-ben való megjelenítése webhelyenként eltérő. Ezért előfordulhat, hogy módosítania kell a függvényen belüli kódot, hogy megfeleljen a követett webhelyek szerkezetének. Valószínűleg meg kell vizsgálnia a webhely HTML forráskódját egy megfelelő CSS szelektor megtalálásához.Ez az automatizált rendszer időt és energiát takarít meg Önnek azáltal, hogy automatikusan követi a termékárakat. A működés alapjainak megértésével tovább testreszabhatja azt saját igényeinek megfelelően.
Az utolsó lépés a szkript ütemezése, hogy minden nap automatikusan lefusson a kívánt időpontban.
main()
függvényt.Bár a Google Apps Script UrlFetchApp
szolgáltatása sok webhely esetében hatékony, előfordulhat, hogy nem alkalmas erősen védett oldalakhoz, amelyek adatkinyerés elleni intézkedéseket alkalmaznak, mint például CAPTCHA-k és IP-blokkolás. Ezeknek a védelmeknek a megkerülése kizárólag Apps Script segítségével gyakran megbízhatatlan.
Ilyen portálokról történő adatgyűjtés vagy „black hat” (etikátlan) gyakorlatok folytatása dedikált, külső megoldásokat igényel, amelyek olyan technikákat alkalmaznak, mint a rotáló proxyk és CAPTCHA-megoldók. Ilyen szolgáltatások például az Apify, a Bright Data, a ParseHub és a Scraper API.
Fontos, hogy ezek a szolgáltatások gyakran integrálhatók a Google Workspace automatizálási folyamataiba. Ez azt jelenti, hogy továbbra is létrehozhat egy teljes, automatizált munkafolyamatot a Workspace infrastruktúráján belül, még akkor is, ha külső adatkinyerési megoldásra van szükség. Az ezen szolgáltatások által kinyert adatok zökkenőmentesen betáplálhatók a Google Táblázatokba, Dokumentumokba vagy más Workspace alkalmazásokba API-jaik vagy webhookjaik segítségével. Kifejezetten ajánlott tiszteletben tartani a webhelyek szolgáltatási feltételeit és a `robots.txt` fájlt, valamint felelősségteljesen és etikusan végezni az adatgyűjtést.
A Google Workspace kvótákat és korlátozásokat ír elő az `UrlFetchApp` használatára a visszaélések megelőzése, a szolgáltatás stabilitásának fenntartása és a méltányos használat biztosítása érdekében minden felhasználó számára. Ezeket a korlátozásokat kulcsfontosságú megérteni webes adatkinyerő szkriptek tervezésekor:
UrlFetchApp
hívás vagy bonyolult feldolgozás miatt, elérheti ezt a korlátot, és leállhat. Azonban gyakran újraindíthatja a szkriptet, miután a futási időkorlát elérése miatt leállt, lehetővé téve nagyobb adathalmazok feldolgozását vagy bonyolultabb feladatok szakaszos elvégzését.UrlFetchApp
kérést intézhet meghatározott időkereteken belül. Ezek a korlátok arra szolgálnak, hogy megakadályozzák a célwebhelyek túlterhelését kérésekkel. Jelenleg az ingyenes Google-fiókok napi korlátja általában körülbelül 20 000 `UrlFetchApp` hívás, míg a Google Workspace-fiókok általában sokkal magasabb, napi körülbelül 100 000 hívásos korláttal rendelkeznek.fetchAll()
: Bár az Apps Script egyszálú környezetben működik, és nem kínál valódi párhuzamos lekérést, az UrlFetchApp.fetchAll()
használata lehetővé teszi több URL optimalizált lekérését. Ez a módszer jelentősen csökkenti a többletterhelést a szekvenciális lekéréshez képest azáltal, hogy hatékonyabban kezeli a hálózati kommunikációt, annak ellenére, hogy a kérések nem párhuzamosan futnak.Összefoglalva, a webes adatkinyerés Google Apps Script és Google Táblázatok segítségével hatékony, hozzáférhető és – ami fontos – ingyenes módot kínál a vállalkozások számára az adatgyűjtés automatizálására és értékes betekintések megszerzésére. A Google Apps Script mind ingyenes Google-fiókokkal, mind Google Workspace előfizetésekkel használható, így költséghatékony megoldást jelent minden méretű vállalkozás számára.
Továbbá, ha Google Workspace-t használ, az Apps Scriptre támaszkodva webes adatkinyerési igényeihez páratlan rugalmasságot és integrációt kap meglévő üzleti munkafolyamataiba. Ellentétben a merev, külső megoldásokkal, amelyek gyakran bonyolult integrációkat és adatátviteli folyamatokat igényelnek, az Apps Script zökkenőmentesen kapcsolódik más Workspace alkalmazásokhoz.
Bátorítjuk Önt, hogy fedezze fel a Google Apps Script és Táblázatok segítségével történő webes adatkinyerés lehetőségeit saját üzleti igényeihez, és aknázza ki az automatizált adatgyűjtésben rejlő potenciált a jobb hatékonyság és stratégiai előnyök érdekében. Az esetek száma, ahol ez a hatékony kombináció alkalmazható, gyakorlatilag végtelen; a piackutatás és versenytárs-elemzés automatizálásától kezdve az érdeklődők generálásának és a tartalomösszesítésnek az egyszerűsítéséig, csak a képzelete szab határt a lehetséges felhasználási módoknak.
Business process automation expert
Hozzászólás küldéséhez be kell jelentkezni.
1118 Budapest, Ménesi út 24. Hungary
© 2024 bestflow. All rights reserved.