Data Scraping یا تراش دادهها کاریه که شما باید اون رو کاملاً مسئولانه و درست انجام بدین بنابراین باید در مورد وبسایتی که قراره اسکرپینگ یا اصطلاحاً وب اسکرپینگ کنین بسیار محتاط باشین چون در غیر این صورت این اسکرپینگ میتونه اثرات منفی بر روی وب سایت موردنظر داشته باشه.
امروزه وب اسکرپرهای زیادی توی بازار وجود دارن که میتونن بدون انسداد و بلاک، هر وبسایتی رو به راحتی اسکرپینگ کنن. البته جالب توجه هست که بسیاری از وب سایت ها در خودشون هیچ مکانیسم ضد اسکرپینگی ندارن اما برخلاف اونها برخی از وب سایت ها هستن که عمل وب اسکرپینگ رو بلاک میکنن چون اعتقادی به دسترسی آزاد دادهها ندارن.
یکی از مواردی که شما باید حتماً به خاطر بسپرین، زیبا بودن و دنبال کردن وب اسکرپینگ وب سایت هست.
اگه هم اکنون در حال ساختن اسکرپینگ وب برای پروژه یا شرکت خودتون هستین، باید قبل از شروع به اسکرپ کردن هر وب سایت، این 7 نکته رو که ما اینجا برای شما آماده کردیم، دنبال کنین.
پس پیش به سوی یادگیری نکات لازمه:
1. ROBOTS.TXT
اول از همه، شما باید بدونین که فایل Robots.txt چیه و چه عملکردی داره.
Robots.txt ها در اصل همون خزندههای موتور جستجو هستن که به عنوان یه خزنده، صفحات یا پروندههایی رو یا میتونن یا نمیتونن از سایت شما درخواست کنن. این مورد عمدتاً برای جلوگیری از بارگذاری بیش از حد هر وب سایت با درخواست خزنده استفاده میشه.
این فایل Robots.txt قوانین استانداردی رو در مورد وب اسکرپینگ هم ارائه میده که بسیاری از وب سایت ها با داشتن عبارت Robots.txt در اسلاگ خودشون به گوگل اجازه میدن تا اونها رو اسکرپ یا وب اسکرپینگ کنه.
گاهی اوقات برخی از وب سایت ها User-agent یا Disallow رو در فایل Robots.txt خودشون دارن که به معنی رد وب اسکرپینگ و بلاک اون برای وبسایت خودشون هست.
اساساً مکانیسم ضد وب اسکرپینگ بر اساس یه قانون کلی کار میکنه که به سوال آیا این یک وب اسکرپر یه ربات است یا یه انسان، باید پاسخ بده.
برای تجزیه و تحلیل این قانون و تصمیم گیری راچع به اون باید از معیارهای خاصی پیروی بشه. اینجا ما دلایلی داریم که باعث ارجاع مکانیسم ضد وب اسکرپینگ به فایل Robots.txt میشن. به عبارتی سادهتر دلایلی که مانع اسکرپینگ وب و بلاک اون میشن:
- اگه در حال اسکرپینگ وب صفحات، سریعتر از حد توانایی یه انسان عمل کنین در دسته “ربات ها” قرار میگیرین.
- اگه هنگام وب اسکرپینگ از یه الگو یکسان پیروی کنین. به عنوان مثال، شما برای جمع آوری تصاویر یا پیوندها از هر صفحه از یه دامنه یکسان استفاده کنین.
- اگه برای مدت زمان مشخصی از IP یکسان استفاده کنین.
- User-Agent موجود نباشه. ممکنه که شما از یه مرورگر بدون سربرگ مانند مرورگر Tor استفاده میکنین.
اگه این نکات رو هنگام اسکرپ یک وب سایت در ذهن داشته باشین و رعایت عدم از استفاده از اونها رو به خاطر بسپرین، ما کاملاً مطمئن هستیم که میتونین هر وب سایتی رو به سادگی وب اسکرپینگ کنین.
2. IP Rotation یا چرخش IP
این مورد سادهترین راه برای رفع بلاک اسکرپینگ وب هست (به بالا یه نگاه بندازین). به این صورت که اگه شما برای هر درخواست وب اسکرپینگ از IP یکسان استفاده کنین بلاک خواهین شد اما استفاده از IP های جدید، راهحل شما برای داشتن وب اسکرپینگ موفقیت آمیز هست.
شما برای جلوگیری از بلاک اسکرپینگ وب میتونین از خدمات چرخان پراکسی مانند Scrapingdog یا سایر خدمات پراکسی استفاده کنین.
ما اینجا برای شما یه قطعه کد قرار دادیم که میتونه مجموعهای از IP های مختلف رو در اختیار شما بذاره:
l={}
u=list()
url=”https://www.proxynova.com/proxy-server-list/country-"+country_code+"/"
respo = requests.get(url).text
soup = BeautifulSoup(respo,’html.parser’)
allproxy = soup.find_all(“tr”)
for proxy in allproxy:
foo = proxy.find_all(“td”)
try:
l[“ip”]=foo[0].text.replace(“\n”,””).replace(“document.write(“,””).replace(“)”,””).replace(“\’”,””).replace(“;”,””)
except:
l[“ip”]=None
try:
l[“port”]=foo[1].text.replace(“\n”,””).replace(“ “,””)
except:
l[“port”]=None
try:
l[“country”]=foo[5].text.replace(“\n”,””).replace(“ “,””)
except:
l[“country”]=None
if(l[“port”] is not None):
u.append(l)
l={}
print(u)
این کد یه پاسخ JSON با سه ویژگی IP، پورت و کشور رو برای شما فراهم میکنه که در واقع این API پروکسی، IP های متناسب با کد کشور رو داره ارائه میده.
اما برای وب سایت هایی که مکانیسم پیشرفته ربات یابی دارن، باید از پراکسیهای تلفن همراه یا مسکونی استفاده کنین البته دوباره میتونین از Scrapingdog هم برای انجام چنین خدماتی بهرهمند بشین.
تعداد IP های جهان ثابت است که شما با استفاده از این سرویسها به میلیون ها IP دسترسی خواهین داشت که میتونن برای وب اسکرپینگ میلیون ها صفحه استفاده بشن. این بهترین کاریه که میتونین برای یه اسکرپینگ وب موفقیت آمیز به مدت زمان طولانیتری انجام بدین.
User_Agent .3 یا نماینده کاربر
درخواست User-Agent یک رشته نویسه است که به سرورها و شبکههای مشابه اجازه میده تا برنامه، سیستم عامل، فروشنده و یا نسخه نماینده کاربری درخواست کننده رو شناسایی کنن.
برخی از وب سایت ها وقتی میبینن که برخی درخواستها حاوی User-Agent نیستن، اونها رو به منزله تعلق نداشتن به مرورگر اصلی تلقی و بلاکشون میکنن.
به این نکته توجه داشته باشین که اگه User-Agent ها به درستی تنظیم نشده باشن، بسیاری از وب سایت ها اجازه مشاهده محتوای اونها رو به وب اسکرپرها نمیدن.
تا حدودی بلاک کردن وب اسکرپینگ این بخش هم مانند بخش قبلیه یعنی اگه مثل استفاده از IP های یکسان از User-Agent یکسان استفاده کنین بلاک خواهین شد. بنابراین یا باید یه لیست از User-Agent ها بسازین یا مثل مصرفکنندگان جعلی دست به استفاده از لیستهای آماده بزنین که خب برای کارآمد بودن کار بهتره از همون لیستهای آماده استفاده کنین!!! از نظر ما که دو روش رو امتحان کردیم موردی نداره:)
4. کاهش سرعت وب اسکرپینگ و حفظ فاصلههای تصادفی
خب همونطور که مشخصه سرعت خزیدن وبسایت ها توسط رباتها و انسانها متفاوته و به طور قطع رباتها سرعت بالاتری در وب اسکرپینک کردن هم دارن. حالا نکته مهم اینجاست که درخواستهای غیرضروری و تصادفی سایت ها به دلیل این که میتونن کل سایت رو از کار بندازن اصلاً به نفع هیچ چیز و هیچ کس نیستن.
برای جلوگیری از این اشتباه بیاین برای ربات خودتون یه برنامه تعریف کنین. اینطوری باعث میشه که بر اساس قانون مکانیسم ضد وب اسکرپینگ که تو مورد اول توضیح دادیم، ربات شما به انسان شباهت پبدا کنه و این شکلی به وبسایت هم آسیبی زده نمیشه و کار وب اسکرپینگ به درستی انجام میسه.
برنامه تعریف شده شما برای ربات به این شکل باید باشه که شما درخواستهای همزمان با تعداد صفحات کمتری رو به منظور وب اسکرپینگ در اختیار ربات قرار میدین؛ سپس فاصله زمانی 10 تا 20 ثانبه برای ربات انساننما در نظر میگیرین تا به اسکرپ کردن ادامه بده. و البته حواستون به فایل Robots.txt هم باید باشه.
پیشنهادی که در این حوزه برای شما وجود داره اینه که از مکانیزم های خودکار وب اسکرپینگ استفاده کنین که سرعت خزیدن وب رو بر اساس بار عنکبوت و وب سایت موردنظر شما به طور خودکار انجام میده. عنکبوت رو پس از چند آزمایش، با سرعت خزیدن بهینه تنظیم و بهینهسازی کنین. این کار رو به صورت دوره ای انجام بدین چون با گذشت زمان محیط تغییر میکنه.
5. تغییر در الگوی وب اسکرپینگ و شناسایی تغییر وب سایت
به طور کلی، انسانها کارهای تکراری رو انجام نمیدن چون که توی سایت به طور تصادفی با اون اقدامات مواجه میشن. اما رباتهای اسکرپینگ وب با الگوی یکسان خزند میشن چون برای این کار برنامهریزی شدن. همونطور که قبلاً هم گفتیم برخی از وب سایت ها مکانیسمهای ضد وب اسکرپینگ خوبی دارن و به راحتی ربات شما رو شناسایی میکنن، میگیرن و اون رو برای همیشه بلاک میکنن.
حالا چطوری میشه از ربات خود در برابر بلاک شدن توسط این صفحات ضد اسکرپینگ وب محافظت کنین؟
این امر میتونه با در نظر گرفتن برخی کلیک های تصادفی بر روی صفحه، حرکات ماوس و اقدامات تصادفی که باعث میشن عنکبوت مثل انسان به نظر برسه، اتفاق بیفته.
حالا یه مشکل دیگه هم وجود داره و اون مشکل اینه که بسیاری از وب سایت ها به دلایل زیادی، چیدمان خودشون رو تغییر میدن و به همین دلیل اسکرپر شما قادر به آوردن دادههای مورد انتظار شما نیست. برای این منظور، شما باید یه سیستم نظارت کامل داشته باشین که تغییرات در چیدمان این سایت ها رو تشخیص بده و سپس با فکر، به شما هشدار بده. بعد از اون میشه از این اطلاعات در وب اسکرپر خودتون استفاده کنین تا بتونه متناسب با این سایت ها کار کنه.
6.عنوان ها یا Headers
وقتی از مرورگر خود به وب سایتی پرسش و درخواست میکنین، لیستی از عناوین برای شما ارسال میشه. قطعاً تجربهاش را داشتین که با استفاده از عنوان، وب سایت موردنظر شما تجزیه و تحلیل میشه. حالا ما میخوایم به این نکته برسیم که برای این که web scrapping شما انسانیتر به نظر برسه، میتونین از این عنوانها استفاده کنین.
فقط کافیه که اون عنوانها رو کپی کنین و در بخش عنوان خود در داخل کد خودش جایگذاری کنین. این امر باعث میشه که درخواست شما از یه مرورگر واقعی ارائه بشه. علاوه بر این با استفاده از چرخش IP و User-Agent، شما صاحب یه اسکرپینگ وب ضد بلاک خواهین شد. شما با استفاده از این روشها میتونین هر وب سایتی اعم از پویا و استاتیک رو به سادگی اسکرپ کنین.
ما کاملاً مطمئن هستیم که شما با استفاده از این تکنیکها قادر خواهین بود 99.99٪ مکانیسمهای ضد اسکرپینگ وب رو شکست بدین.
در حال حاضر، یه عنوان “مرجع” برای کمک به شما در انتخاب درست عنوان از بین انواع عنوانها وجود داره. این یه عنوان درخواستی HTTP است که به سایت اجازه میده که مطلع بشه شما با چه مرورگری وارد سایت موردنظظر خودتون شدین. به طور کلی، بهتره که این عنوان رو به گونهای تنظیم کنین که به نظر برسه دارین از Google وارد سایت میشین که میتونین این کار رو به شکل زیر انجام بدین:
“مرجع”: “https://www.google.com/”
اگه میخواین وب سایت های مستقر در انگلستان یا هند رو اسکرپ کنین، میتونین آدرس بالا رو با https://www.google.co.uk یا google.in جایگزین کنین. با این کار درخواست شما معتبرتر و ارگانیکتر به نظر میرسه.
همچنین میتونین برای معتبرتر کردن درخواست خودتون به سراغ متداولترین مراجعه کنندگان هر سایتی برین که برای انجام این کار میشه از ابزاری مانند https://www.sembleweb.com که اغلب برای سایت رسانههای اجتماعی مانند Youtube یا Facebook است، استفاده کنین.
7. مرورگر بدون سر یا Headless Browser
وب سایت ها محتوای خودشون رو بر اساس این که از کدوم مرورگر استفاده میکنین نمایش میدن. برخی نمایشها به طور متفاوتی در مرورگرهای مختلف نشون داده میشن.
بیاین برای شما جستجوی گوگل رو مثال بزنیم. اگه مرورگری که توسط عامل کاربر مشخص شده باشه از قابلیتهای پیشرفتهای برخوردار باشه، ممکنه که وب سایت محتوای غنیتری رو ارائه بده یعنی یه چیز پویاتر و سبکتر که ممکنه به Javascript و CSS هم وابسته باشه.
مشکلی که در این مورد وجود داره اینه که هنگام انجام هر نوع وب اسکرپینگ، محتوا توسط کد JS ارائه میشه که این موضوع برخلاف ارائه پاسخ HTML توسط سرور هست. برای web scrapping این وب سایت ها، ممکنه لازم باشه که مرورگر بدون سر خودتون رو از طریق Scrapingdog مستقر کنین (Scrapingdog آچار فرانسهایه برای خودش!!).
جالبه بدونین که مرورگرهای اتوماسیون مانند Selenium یا Puppeteer، ای پی آی ها رو برای کنترل مرورگرها و اسکرپینگ وبسایت های پویا ارائه میدن. باید به شما بگیم که تلاش زیادی برای غیر قابل تشخیص ماندن این مرورگرها انجام میشه اما این مرورگرهای بیسر موثرترین راه برای اسکرپینگ وب سایت است.
حتی شما میتونین از سرویسهای خاص بدون مرورگر هم استفاده کنین تا به شما اجازه بدن به جای افزایش بار سرور خودتون، نمونهای از مرورگر رو در سرورهای اونها باز کنین. حتی شما قادرین که بیش از 100 مورد نمونه رو به طور همزمان در سرویسهای اونها باز کنین. بنابراین ، همه و همه یه مزیت عالی برای وب اسکرپینگ هستن.
امیدوارم بعد از اتمام این مقاله نکات لازم برای بلاک نشدن وب اسکرپینگ خودتون رو به خوبی یاد گرفته باشین و حواستون هم به فایل Robats.txt بوده باشه. همچنین توجه داشته باشین که درخواستهای بزرگ خودتون رو از سایت ها و شرکتهای کوچیک نخواین چون اونها بودجه خوبی مثل شرکتهای بزرگ در اختیار ندارن.
مثل همیشه منتظر نظرات و سوالات شما هستیم.