سفر های الهام بخش

داستان های دانشگاهیان و اکتشافات تحقیقاتی آنها را دنبال کنید

خوندن اطلاعات از وب بدون اینکه شناسایی بشی.

علی خادمی

Fri, 04 Apr 2025

خوندن اطلاعات از وب بدون اینکه شناسایی بشی.

Web Scraping بدون بلاک شدن (با Playwright و Scrapy)

مقدمه

Web Scraping یکی از تکنیک‌های مهم در دنیای برنامه‌نویسی است که برای جمع‌آوری داده از وب‌سایت‌ها استفاده می‌شود. اما بسیاری از سایت‌ها با استفاده از روش‌هایی مانند CAPTCHA، محدودیت نرخ درخواست (Rate Limiting) و بلاک کردن IP، جلوی اسکرپینگ را می‌گیرند. در این مقاله، روش‌هایی را برای انجام Web Scraping بدون بلاک شدن با استفاده از دو ابزار قدرتمند Playwright و Scrapy بررسی می‌کنیم.


۱. Web Scraping چیست؟

Web Scraping فرآیندی است که طی آن داده‌ها از صفحات وب استخراج شده و در قالب‌های قابل استفاده مانند JSON، CSV یا پایگاه داده ذخیره می‌شوند. ابزارهایی مانند BeautifulSoup، Selenium، Scrapy و Playwright برای این کار استفاده می‌شوند.


۲. چرا سایت‌ها جلوی Web Scraping را می‌گیرند؟

وب‌سایت‌ها معمولاً به دلایل زیر Web Scraping را مسدود می‌کنند:

  • حفظ امنیت و حریم خصوصی
  • جلوگیری از سرقت محتوا
  • حفظ منابع سرور و پهنای باند
  • حفظ تجربه کاربری

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

برای انجام وب اسکرپینگ بدون بلاک شدن، باید از تکنیک‌های مختلفی استفاده کنیم:

۳.۱ استفاده از User-Agent متغیر

وب‌سایت‌ها User-Agent را برای شناسایی نوع مرورگر شما بررسی می‌کنند. استفاده از یک User-Agent پویا به شما کمک می‌کند تا کمتر شناسایی شوید.

مثال در Scrapy:

import scrapy
class MySpider(scrapy.Spider):
name = "my_spider"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
def start_requests(self):
yield scrapy.Request("https://example.com", headers=self.headers)

۳.۲ استفاده از پروکسی‌ها و VPN

با استفاده از پروکسی‌های چرخشی می‌توان IP خود را تغییر داد تا سایت نتواند شما را بلاک کند.

نمونه استفاده از Proxy در Scrapy:

proxy = "http://username:password@proxyserver:port"
yield scrapy.Request(url, meta={"proxy": proxy})

۳.۳ تصادفی کردن زمان بین درخواست‌ها

ارسال درخواست‌های متوالی و سریع می‌تواند شما را به‌عنوان یک Bot شناسایی کند. بهتر است بین درخواست‌ها تاخیر تصادفی ایجاد کنیم.

در Scrapy:

import time
import random
time.sleep(random.uniform(2, 5))

۳.۴ استفاده از Headless Browsers (Playwright)

Headless Browsers مانند Playwright و Selenium به شما اجازه می‌دهند تا مانند یک کاربر واقعی با وب‌سایت‌ها تعامل داشته باشید.

نمونه استفاده از Playwright:

from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://example.com")
print(page.content())
browser.close()

۴. تفاوت‌های Scrapy و Playwright

ویژگی Scrapy Playwright
سرعت بسیار سریع کندتر به دلیل رندر کامل صفحات
پشتیبانی از جاوااسکریپت ندارد بله، به‌طور کامل
مدیریت کپچا سخت آسان‌تر با تعاملات کاربر
پروکسی و چرخش IP بله بله

اگر سایت هدف مبتنی بر جاوااسکریپت باشد، بهتر است از Playwright استفاده کنید. اما برای سایت‌های معمولی، Scrapy سریع‌تر و کارآمدتر است.


۵. بایپس کردن CAPTCHA

برای عبور از CAPTCHA روش‌های زیر پیشنهاد می‌شود:

  • استفاده از خدمات حل کپچا مانند 2Captcha و Anti-Captcha.
  • استفاده از هوش مصنوعی و OCR برای تشخیص کپچاها.
  • تعامل دستی با Playwright و Selenium برای حل کپچا.

نمونه در Playwright:

page.locator("#captcha_input").fill("پاسخ کپچا")

۶. ذخیره و پردازش داده‌های Scraped

پس از جمع‌آوری داده‌ها، می‌توان آن‌ها را در پایگاه داده، CSV یا JSON ذخیره کرد.

ذخیره در JSON:

import json
data = {"title": "عنوان مقاله", "content": "متن مقاله"}
with open("data.json", "w") as f:
json.dump(data, f)

۷. نتیجه‌گیری

انجام Web Scraping بدون بلاک شدن نیازمند استفاده از پروکسی‌ها، User-Agentهای متنوع، Headless Browsers و تاخیرهای تصادفی است. ابزارهای Scrapy و Playwright بهترین گزینه‌ها برای استخراج داده از وب‌سایت‌ها هستند. با رعایت این نکات، می‌توانید داده‌ها را بدون مسدود شدن جمع‌آوری کنید!


آیا تجربه‌ای در این زمینه دارید؟ نظرات خود را با ما به اشتراک بگذارید!

0 نظرات

نظر بدهید