ممکن است شما محصولاتی را در سایت خود داشته باشید که از وبسایتهای دیگر برداشته باشید. هنگامیکه تعداد محصولات زیاد میشود، عملا بررسی قیمت تک تک محصولات دشوار شده و ممکن است مشتری کالایی را ثبت کند که قیمت آن، تغییر کرده باشد.
در این صورت، کاربر درخواست خود را ثبت کرده، هزینهی آن را پرداخت کرده و حال تیم پشتیبانی باید به ایشان اطلاع دهد که قیمت افزایش یافته است. برای جلوگیری از این کار، روشی را به شما آموزش خواهیم داد که با استفاده از گوگل شیت که مشابه اکسل است، یک دیتابیس ساده ایجاد کنید و قیمتها را به صورت آنی رصد نمایید.
وب اسکرپینگ چیست؟
وب اسکرپینگ به عمل بررسی وبسایتها و ثبت دادهها گفته میشود. کراول کردن نیز به معنای خزش در صفحات مختلف وب است. برای اینکه از قیمت لحظهای کالاها اطلاع داشته باشیم، باید وبسایتهای مرجع را به صورت آنی بررسی نماییم. برای مثال، اگر مرجع قیمت لپتاپ یا دوربین را سایت دیجی کالا در نظر بگیریم، با وب اسکرپینگ محصولات مختلف این وبسایت، همواره مطمئن خواهیم شد که کالایی که قصد فروش آنرا داریم، گران نشده و آن را به قیمت کمتر نمیفروشیم.
کاری که قرار است در این مقاله یاد بگیریم، نوعی وب اسکریپینگ Web Scraping یا کراول Crawl سادهی چند سایت است. اگرچه برای وب اسکرپینگ میتوان درخواست کدنویسی داد و اپلیکیشن آماده دریافت کرد، اما شاید روش سادهای که در این مقاله به شما آموزش میدهم، کارتان را راه انداخته و نیازی به پرداخت هزینه نباشد.
آیا وب اسکرپینگ با گوگل شیت ممکن است؟
بله. گوگل شیت که به نوعی همانند اکسل بوده، اما مزایای بیشتری دارد، امکان خواندن دادههای مشخص از صفحات وبسایت را ارائه کرده است. در گوگل شیت، شما میتوانید با یک دستور ساده به نام Importxml، قیمت را از وبسایتهای مختلف خوانده و با قیمتی که خودتان در وبسایت ارائه کردهاید، مقایسه کنید. در این مقاله، این کار را به صورت گام به گام بررسی خواهیم کرد.
خواندن قیمت کالا در سایت های دیگر با استفاده از گوگل شیت
برای ساده شدن مراحل آموزش، اجازه دهید یک مثال کاربری را اجرا کنیم. فرض کنید شما یک وبسایت فروشگاهی برای عرضهی کتاب دارید و میخواهید مطمئن شوید که محصولات خود را پایینتر از سایر وبسایتها و خصوصا وبسایتهای پرکاربر، عرضه نمیکنید. در اولین قدم، یک فایل گوگل شیت ایجاد نمایید. نمایی از گوگل شیت خالی در تصویر زیر نمایش داده شده است.
استفاده از دستور Importxml در گوگل شیت
در مرحله اول برای خواندن قیمت از وبسایتهای دیگر، باید از دستوری با عنوان Importxml استفاده کنید. برای اینکار، در یک سلول خالی، ابتدا علامت مساوی = را وارد کرده و سپس عبارت Importxml را وارد کنید. این دستور، تنها به دو گزاره نیاز دارد. در گزاره اول، باید آدرس صفحهی مد نظر را وارد کرده و در گزارهی دوم باید آدرس المان (Xpath_query) را وارد کرد که در ادامه توضیح خواهیم داد. اگر دستور Importxml را در سلول Cell خالی گوگل شیت وارد کنید، با تصویری مشابه زیر روبرو خواهید شد:
=IMPORTXML("URL","xpath_query")
به چند نکته دقت کنید:
- گزارهی سوم در اکثر زمانها نیاز نبوده و این دستور را میتوان با دو گزارهی اول، اجرا کرد.
- هر دو گزارهی اول باید داخل دابل کوتیشن یا “” قرار گیرند.
- گزارهی اول آدرس وبسایت بوده که باید همراه با پروتکل (http یا https) وارد شود.
در ادامه، نحوهی دریافت قیمت یک کتاب از وبسایتهای دیجیکالا، شهر کتاب و نهایتا 30بوک را به صورت عملی توضیح خواهیم داد.
قسمت اول دستور Importxml
فرض کنید شما قصد دارد که قیمت کتابی با عنوان یادداشت های یک دیوانه را از سه سایتی که قبلا اسمشان را گفتیم، ثبت کنید. ابتدا وارد هر یک از سایتها شده و به صفحهی فروش همان کتاب (یا هر کالا) وارد شوید. نمایی از صفحهی فروش کتاب یادداشت های یک دیوانه در وبسایت دیجی کالا، در تصویر زیر نمایش داده شده است:
گزارهی اولی که باید در دستور Importxml استفاده کنید، دقیقا آدرس همین صفحهی محصول بوده که در قسمت بالا نمایش داده شده است (URL صفحه). مطمئن شوید که در صفحات دیگر سایت، مثلا در صفحهی دستهبندی محصولات یا … قرار نگرفته و مشخصا در صفحهی محصول مد نظر قرار دارید.
آدرس این صحفه یا همان URL را به همراه پروتکل http یا https کپی کرده و در گزارهی اول دستور Importxml قرار دهید. فراموش نکنید که در دو انتهای این آدرس، باید دابل کوتیشن یا همان ” را قرار دهید. نمایی از گوگل شیت بعد از وارد کردن این گزاره، در تصویر زیر نمایش داده شده است.
تا بدینجا، گزارهی اول کامل شده است. بعد از وارد کردن URL در قسمت اول Importxml باید کاما یا همان ویرگول را تایپ کنید، تا به سراغ گزارهی دوم برویم. از آنجاییکه پیدا کردن و ثبت آدرس صفحات مختلف در این دستور سخت نیست، فقط این کار را برای سایت دیجی کالا آموزش دادیم. اما گزارهی دوم اندکی سختتر بوده و بنابراین، این کار را برای هر سه سایت تکرار خواهیم کرد.
قسمت xpath_query در دستور Importxml گوگل شیت
در قسمت دوم باید آدرس المانی که در صفحه، مربوط به قیمت هست را پیدا کنید. این کار بسیار ساده بوده و کافی است که مراحل را قدم به قدم انجام دهید. ابتدا برروی خود قیمت در صفحه راست کلیک نمایید (موس را برروی قیمت برده و راست کلیک کنید). نمایی از این عمل در وبسایت دیجی کالا در تصویر زیر نمایش داده شده است:
و سپس برروی گزینه Inspect کلیک نمایید. با این کار، پنجرهی Inspector View باز شده که مشابه تصویر زیر است:
هنگامیکه پنجرهی جدید باز شد، یکی از المانها هایلایت شده (در تصویر بالا به رنگ آبی روشن در سمت راست-بالا قرار گرفته است)، برروی این هایلات راست کلیک نمایید و به قسمت Copy رفته (عدد 2 در تصویر زیر) و سپس برروی گزینه Copy Full XPath کلیک کنید (عدد 3 در تصویر زیر):
بعد از کپی کردن Full XPath مججدا به سراغ گوگل شیت رفته و این آدرس کپی شده را در گزارهی دوم دستور Importxml قرار داده و پرانتز را بسته و اینتر میزنیم. یادتان باشد که حتما این آدرس را داخل دابل کوتیشن قرار دهید، در غیر این صورت، با اخطار روبرو خواهید شد. با این کار، دستور آماده شده و پس از یک Loading کوتاه، قیمت نمایش داده میشود.
کدی که در تصویر بالا مشاهده میکنید (برای خواندن قیمت کتاب یادداشت های یک دیوانه از وبسایت دیجی کالا)، به شرح زیر است. میتوانید این کد را در گوگل شیت خود کپی کنید و با زدن اینتر، مشاهده میکنید که آخرین قیمت مربوط به این محصول را به شما نمایش خواهد داد.
=IMPORTXML("https://www.digikala.com/product/dkp-65319/%DA%A9%D8%AA%D8%A7%D8%A8-%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA-%D9%87%D8%A7%DB%8C-%DB%8C%DA%A9-%D8%AF%DB%8C%D9%88%D8%A7%D9%86%D9%87-%D8%A7%D8%AB%D8%B1-%D9%86%DB%8C%DA%A9%D9%84%D8%A7%DB%8C-%DA%AF%D9%88%DA%AF%D9%88%D9%84","/html/body/main/div[2]/div[1]/div/article/section[1]/div[2]/div[3]/div/div[1]/div[1]/div[11]/div[2]/div[1]/div")
همانطور که در تصاویر فوق مشاهده میکنید، قیمت بعد از یک لودینگ بسیار کوتاه، در سلول انتخاب شده، نمایش داده شد. اجازه دهید اندکی فایل گوگل شیت را زیبا کنیم و سپس به سراغ بررسی گرفتن قیمت از دو سایت دیگر خواهیم رفت. شما هم خودتان میتوانید هرطور که خواستید، جدول را زیبا کنید.بعد از مرتب و زیباسازی جدول در گوگل شیت (طبق سلیقهی شخصی خودم!) نمای آن مشابه زیر خواهد شد.
از آنجاییکه حال با مراحل انجام کار آشنا شدهاید، این بار کار را سریعتر دنبال خواهیم کرد. ابتدا وارد سایت شهر کتاب شوید و برروی قیمت محصول راست کلیک کرده و گزینه Inspect را بزنید. از صفحهی باز شده در سمت راست، برروی المان هایلایت شده (جاییکه قیمت را نشان میدهد)، راست کلیک کرده و سپس گزینهی Copy و نهایتا Copy Full XPath را کلیک کنید.
وارد گوگل شیت شده، در سلول مد نظر ابتدا دستور Importxml را تایپ کرده و پس از پرانتز، در گزارهی اول آدرس این صفحه و در قسمت دوم، آدرس کپی شده از قسمت Copy Full Xpath را وارد کنید. یادتان باشد که هر دو گزاره باید داخل دابل کوتیشن ” قرار بگیرند.
=IMPORTXML("https://shahreketabonline.com/Products/Details/38302/%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA_%D9%87%D8%A7%DB%8C_%DB%8C%DA%A9_%D8%AF%DB%8C%D9%88%D8%A7%D9%86%D9%87","/html/body/div/main/div/div/div[1]/div[1]/div[1]/div[3]/div[2]/text()")
دقیقا همان مراحل قبلی را تکرار کنید. برروی قیمت راست کلیک کرده، از المان هایلایت شده (که قیمت درون آن قرار دارد) استفاده کنید و با راست کلیک کردن و رفتن به قسمت Copy برروی گزینه Copy Full Xpath کلیک کنید و این آدرس را در گزارهی دوم دستور Importxml قرار دهید. در گزارهی اول نیز آدرس سایت را قرار دهید.
=IMPORTXML("https://www.30book.com/book/2916/%DA%A9%D8%AA%D8%A7%D8%A8-%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA%E2%80%8C%D9%87%D8%A7%DB%8C-%DB%8C%DA%A9-%D8%AF%DB%8C%D9%88%D8%A7%D9%86%D9%87-%D8%A7%D8%AB%D8%B1-%D9%86%DB%8C%DA%A9%D9%84%D8%A7%DB%8C-%DA%AF%D9%88%DA%AF%D9%88%D9%84-%D9%86%D8%A7%D8%B4%D8%B1-%D9%86%DB%8C","/html/body/div[3]/div/div[1]/div/div/div[2]/div/div/div[4]/h2/text()")
بنابراین، با یک دستور ساده با نام Importxml و استفاده از url صفحات به علاوهی Full XPath توانستید یک جدول از قیمتها ایجاد کنید. برای هر محصول از هر سایتی میتوانید این کار را انجام دهید تا قیمتها را در یک فایل رصد کنید و متوجه تفاوت قیمت آن با محصولات خود شوید. برای مقایسهی راحتتر، بهتر است قیمت محصول خود را نیز به جدول اضافه کنید و با استفاده از دستورات Conditional Formatting، رنگ محصولاتی که قیمت آن کمتر یا بیشتر از سایر وبسایتها است، را تغییر دهید تا به سادگی و با یک نگاه، متوجه تفاوتها شوید.
آپدیت اتومایتک دستور Importxml
متاسفانه دستور Importxml یک دستور استاتیک است و با باز و بسته شدن فایل، آپدیت نخواهد شد. برای اینکه با بستن و باز کردن مجدد فایل، تمامی قیمتها به صورت آنی آپدیت شوند، باید روش جایگزینی استفاده کنیم. این روش اندکی ابداعی است و منطق خاصی پشت آن قرار نگرفته است.
در گوگل شیت، تنها چند دستور ساده هستند که هنگام باز شدن فایل، به صورت خودکار باعث آپدیت شدن سلول یا همان Cell میشوند. این دستورات یا همان توابع به شرح زیر هستند:
- دستور Now
- دستور Time
- دستور Date
این سه دستور مربوط به زمان هستند و با هر بار و باز و بسته شدن گوگل شیت، به صورت خودکار باعث به روزرسانی سلولهایی میشوند که این دستورات در آنها استفاده شده است. بنابراین، اگر به نوعی بتوانیم این دستورات را به تابعی که قبلا استفاده کرده بودیم، اضافه کنیم، باعث میشویم که این مقادیر به صورت خودکار آپدیت شده و به روز رسانی شوند.
برای این کار، از یک دستور شرطی ساده IF استفاده خواهیم کرد. با این دستور ساده، بررسی میکنیم که آیا الان زمان درست است؟! اگر زمان درست باشد، پس دستور Importxml را اجرا کند! از آنجاییکه زمان همواره درست است! بنابراین دستور به سادگی اجرا خواهد شد. این کد مشابه زیر خواهد بود:
=if(now(),importxml("url","xpath_query")
در دستور بالا، ابتدا گزارهی اول IF چک شده و تابع now اجرا خواهد شد و زمان را با زمان حال مقایسه میکند. از آنجاییکه همواره زمان حال یک عدد مشخص داشته و شرط صحیحی است، بنابراین، گزارهی بعدی یعنی همان فراخوانی قیمت اجرا خواهد شد. با این کار، با هر بار باز کردن فایل گوگل شیت، تمامی سلولها به صورت خودکار آپدیت شده و به محض باز کردن شیت، تمامی قیمتها به حالت Loading در خواهند آمد که در تصویر زیر نمایش داده شده است.
این روش، سادهترین راه برای خواندن قیمت از وبسایتهای مختلف و آپدیت اتوماتیک تمامی قیمتها به محض باز کردن شیت گوگل است. اگر این مقاله توانسته به شما در حل مشکلی کمک کند، لطفا با ستاره دادن به این مقاله، از من حمایت کنید. اگر سوالی در خصوص کار با گوگل شیت دارید، به قسمت تماس با ما مراجعه کنید و درخواست خود را ارسال کنید.
افزونه دیجی اسکرپر
با جستجو در میان افزونههای وردپرسی، متوجه شدیم که یک پلاگین وردپرسی به نام دیجیاسکرپر به شما این امکان را میدهد که قیمت محصولات خود را مستقیما از وبسایت دیجیکالا دریافت نمایید. با توجه به اینکه دیجیکالا یکی از مراجع اصلی دریافت قیمت بوده و همچنین وردپرس نیز یکی از بسترهای اصلی ایجاد وبسایت فروشگاهی است، شاید این پلاگین بتواند نیاز شما را برطرف نماید.
این دستور در برخی از سایتها اخطار N/A# میدهد بخصوص در سایت دیجی کالا
چطوری میتونیم این مشکل رو برطرف کنیم ؟
14
حمیدرضای عزیز
سایت دیجی کالا، قیمتها رو داینامیک از سرور میاره و جایگذاری میکنه. این دستور، برای سایت هایی هست که قیمت در بک اند آماده میشه و به صورت متن در سایت نمایش میده. اگر نیاز به خوندن قیمت از دیجیکالا برروی سایت دارید، میتونید از افزونه دیجی اسکرپر استفاده کنید.
بهترین هست
16
ممنون از آموزش کاربردی
اگر وبسایت مورد نظر دارای منوی آبشاری بود به چه صورت باید دستور رو در گوگل شیت قرار داد ؟؟
مثال : وبسایتی دارای یک منو آبشاریست که گزینه های تک فروشی و پک 3عددی و پک10 عددی دارد
گزینه مدنظر ما گزینه تک فروشیست که قیمت این گزینه رو میخواستم گوگل شیت استخراج کنه
13
سلام. من استفاده کردم اما خطا میده #TOTAL_QUOTA_REACHED
دیروز اوکی بود، اما امروز که باز کردم همه ارور داشت
20
متینه عزیز
متاسفانه بدون دیدن فایل و تصویر اخطار، امکان ارائهی توضیحات وجود ندارد. در صورت نیاز، به صفحه تماس با ما مراجعه نمایید و مشکل خود را از طریق راههای ارتباطی، در میان بگذارید.
بهترین هست
23
#TOTAL_QUOTA_REACHED
این خطا برای چیه در گوگل شیت؟
22
ارزو عزیز
متاسفانه بدون دیدن فایل و تصویر اخطار، امکان ارائهی توضیحات وجود ندارد. در صورت نیاز، به صفحه تماس با ما مراجعه نمایید و مشکل خود را از طریق راههای ارتباطی، در میان بگذارید.
بهترین هست
19