مطالب اخیر

اگر Web Scraping می‌کنید این کارها را انجام ندهید
| Reza Atom | سه شنبه 11 آذر ماه 1399

اگر Web Scraping می‌کنید این کارها را انجام ندهید

وب اسکرپر بودن یکی از جذاب‌ترین شاخه‌های برنامه‌نویسی است. من زیاد برنامه‌نویس و وب اسکرپر خوبی نیستم ولی توی پروژه‌های مختلف دیدم که برنامه‌نویس‌های دیگه چکارهایی میکنند، چه درست چه غلط.

1.‬کوکی‌ها رو Hard Code استفاده نکنید.


صبر کنید‫. ‬فقط صبر کنید، هر چیزی که شما به صورت Hard Code استفاده میکنید قابل تغیر به سادگی نیست و امکان شکست شمارا و پروژه‌های شما رو بالا میبره‫. ‬
مثال ‫: ‬ شما یک پروژه گرفتید که کارفرما میخواهد یکسری اطلاعات رو از این سایت استخراج کنه و برای این کار اول باید لاگین شوید‫. ‬
ساده‌ترین راه استفاده از یک مرورگر و ذخیره کوکی‌های سایت در برنامه خود برای استفاده دوباره از آن‌ها، اصلا شما به طول عمر کوکی‌ها توجه‌ای کردید؟

headers = {«Cookie»: «_session=23ln4teknl4iowgel»}   
for url in url_list:  
response = requests. get (url, headers=headers) 

خب این مشکل رو چطوری برطرف کنیم؟ ساده‌ترین راه پیاده‌سازی عمل لایگین در وبسایت است‫. ‬

s = requests. Session()  
s. post («https://fakewebsite.com/login», login_data)   
for url in url_list:  
response = s. get (url) 

در ظاهر این کار وقت نسبتا زیادی رو از شما میگیره اما کار شما رو بعدا ساده‌تر خواهد کرد‫. ‬

2. به سایت حمله نکنید


‬منظورم حملات منع سرویس به یک سایت هست که همه ما با حمله DDOS اون رو میشناسیم‫. ‬
اگر شما فکر میکنید که از این دسته افراد نیستید که این کار رو انجام میدهند آماده باشید که میخوام مغزتون رو منفجر کنم
به کد زیر دقت کنید ‫: ‬

for page in range (۱۰۰۰):   
response = requests. get («https://search.com?page=» + page) 

نوشتن یک حلقه برای دسترسی به سایت یک جور حمله حساب میشه‫. ‬
این از اون کارهایی که باعث میشه IP شما از سمت سایت Bane بشه‫، که در نتیجه شما مجبور میشید از پروکسی لیست‌ها استفاده کنید.
خب چه راه حلی برای این مشکل وجود داره؟ خیلی ساده هست فقط کافیه یکم وقفه توی کار ایجاد کنید.
برای مثال گشتم یک نمونه از سایت Stack OverFlow پیدا کردم که با زبان Python هست.

from random import randint  
from time import sleepfor page in range (۱۰۰۰):   
response = requests. get («https://search.com?page=» + page)   
sleep (randint(2.5) )

این به شما کمک میکنه که از Bane شدن جلوگیری کنید.

3. دست از نوشت Scraperهای تک رشته‌ای (Thread) بردارید.


خیلی سریع میشه؟ درست میگید من توی قسمت‌های بالا گفتم که DOS نکنید پس چرا الان میگم از Thread استفاده کنید؟
این بخش برای خزنده‌هایی هستند که به صورت همزمان روی چند سایت باید کار کنند.
4. از الگوهای تکراری استفاده نکنید.

بسیاری از سایت‌ها تشخیص میدهند که شما دارید از یک الگو تکراری استفاده میکنید و این عمل احتمال Bane شدن شمارو بالا میبره.
مثال: فکر کنید شما قرار هست از سایت دیوار اگهی‌های تمام شهر هارو استحراج کنید، با فرض این که شهرها با کدهایی از ۰ تا ۱۰۰ شناسایی بشن ساده‌ترین کاری که میکنید یک حلقه درست میکنید و آن هارو پیمایش میکنید.
اما بهتر هست یکبار از اول و بار دیگر از اخر شروع کنید و الگوهای غیر پیشبینی درست کتید.
یکی از راه‌های ساخت الگوهای ناهماهنگ استاده از User Agent ها هستد که دو منبع خوب از این User Agentها رو براتون میذارم.

Github | Developers

نتیجه گیری

Web Scraping کار زیاد سختی نیست، بهترین چیزی که میتونید برای خودتون انجام بدید ساخت وسیله هست که بتونید بارها و بارها ازش استفاده کنید.
اگر برای پروژه Web Scraping خودتون به کمک نیاز دارید حتما با من تماس بگیرید، درضمن نظر یادتون نره.



مشترک خبرنامه ما شوید.