FA-TOOLS — Header Component

کدهای پایتون برای اسکرپ کردن اینستاگرام

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

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

اگر هم سوالی داشتی یا نیاز به مشورت داشتی، مستقیم بهم زنگ بزن: 09202232789

💡 نقشه راه سریع

  • 🔸 چرا؟ (دلایل اسکرپینگ)
  • 🔹 چی؟ (ابزارها: Instaloader, Selenium)
  • 🔸 چطور؟ (گام به گام کدنویسی)
  • 🔹 مشکلات؟ (چالش‌ها و راه‌حل‌ها)
  • 🔸 نکات حرفه‌ای (اسکرپینگ امن)
  • 🔹 عیب‌یابی (سوالات متداول)

🛠️ ابزارهای کلیدی

  • پایتون (محیط برنامه‌نویسی)
  • Instaloader (کتابخانه تخصصی)
  • Selenium (تعامل با صفحات وب)
  • Webdriver (مرورگر کنترل‌شده)
  • Requests/BeautifulSoup (در موارد خاص)

چرا اسکرپینگ اینستاگرام با پایتون؟ (یا: این داده‌ها به چه دردی می‌خورن؟)

کدهای پایتون برای اسکرپ کردن اینستاگرام — تصویر 1

اینستاگرام با میلیاردها کاربر و محتوای بصری، یک معدن طلای داده است. اما چرا باید به خودمون زحمت بدیم و با پایتون این داده‌ها رو استخراج کنیم؟

  • تحلیل بازار و رقبا: می‌تونی ببینی رقبای تو چه نوع محتوایی می‌ذارن، چه هشتگ‌هایی استفاده می‌کنن و چقدر با مخاطبشون درگیر هستن. اینطوری استراتژی خودت رو بهتر می‌چینی.
  • پژوهش‌های آکادمیک: برای دانشجویان و محققین، داده‌های اینستاگرام می‌تونه منبع ارزشمندی برای تحلیل رفتارهای اجتماعی، ترندها و پدیده‌های فرهنگی باشه.
  • جمع‌آوری محتوا برای پروژه‌های شخصی: فرض کن می‌خوای یه آرشیو از عکس‌های سفرت بسازی یا یه گالری از آثار هنری مورد علاقه‌ت. اسکرپینگ می‌تونه کارتو راحت کنه.
  • مدیریت محتوا و فالوورها: ابزارهای خودکار می‌تونن بهت کمک کنن فالوورهای فیک رو شناسایی کنی یا محتواهای قدیمی رو تحلیل کنی.

⚠️ یک نکته خیلی مهم: قبل از شروع، همیشه قوانین و شرایط استفاده اینستاگرام (Terms of Service) رو در نظر داشته باش. اسکرپینگ بیش از حد یا بدون اجازه ممکنه منجر به بلاک شدن اکانتت بشه. همیشه اخلاقی و مسئولانه عمل کن!

ابزارهای ضروری برای شروع (کتابخانه‌های پایتون)

کدهای پایتون برای اسکرپ کردن اینستاگرام — تصویر 2

پایتون اکوسیستم غنی‌ای از کتابخانه‌ها رو در اختیارمون می‌ذاره که هر کدوم برای کاری مناسب‌اند. اینجا با دو تا از مهم‌ترینشون آشنا می‌شیم:

Instaloader: دوست‌داشتنی و قدرتمند برای داده‌های عمومی

اگه هدفت جمع‌آوری اطلاعات پروفایل‌های عمومی، پست‌ها، هشتگ‌ها یا فالوورهای یک اکانت خاص بدون نیاز به لاگین کردن یا تعامل پیچیده با صفحه باشه، Instaloader بهترین رفیقته. این کتابخانه API اینستاگرام رو به خوبی شبیه‌سازی می‌کنه و کار رو برات خیلی راحت می‌کنه.

نصب Instaloader:

pip install instaloader

مثال: دانلود پروفایل و پست‌های یک کاربر:

import instaloader

L = instaloader.Instaloader()

# Optional: Login for accessing private profiles or higher rate limits
USERNAME = "your_instagram_username"
PASSWORD = "your_instagram_password"
try:
    L.load_session_from_file(USERNAME) # Try to load existing session
except FileNotFoundError:
    L.login(USERNAME, PASSWORD) # Login if no session file exists
    L.save_session_to_file(USERNAME) # Save session for future use

target_profile = "instagram_username_to_scrape" # مثلاً: "nasa"

profile = instaloader.Profile.from_username(L.context, target_profile)

print(f"نام کاربری: {profile.username}")
print(f"فالوورها: {profile.followers}")
print(f"فالووینگ‌ها: {profile.followees}")
print(f"تعداد پست‌ها: {profile.mediacount}")

# Download all posts from the profile
for post in profile.get_posts():
    L.download_post(post, target=profile.username)
    print(f"پست دانلود شد: {post.url}")

Selenium: وقتی نیاز به تعامل داری (برای محتوای پویا و لاگین)

Selenium یک ابزار قدرتمند برای اتوماسیون مرورگره. اگه نیاز داری با اینستاگرام دقیقاً مثل یک کاربر انسانی تعامل کنی – یعنی لاگین کنی، دکمه‌ها رو کلیک کنی، اسکرول کنی تا محتوای بیشتری لود بشه یا فرم‌ها رو پر کنی – Selenium ناجی توست. البته باید کمی صبورتر باشی، چون سرعتش کمتر از Instaloader هست و نیاز به تنظیمات بیشتری داره.

نصب Selenium و Webdriver:

pip install selenium

یادت باشه برای Selenium به یک Webdriver (مثل ChromeDriver برای کروم یا GeckoDriver برای فایرفاکس) هم نیاز داری که باید متناسب با نسخه مرورگرت دانلود و در مسیر اجرای پایتون یا در PATH سیستمت قرار بدی.

مثال: لاگین به اینستاگرام با Selenium:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

USERNAME = "your_instagram_username"
PASSWORD = "your_instagram_password"
CHROMEDRIVER_PATH = "/path/to/your/chromedriver" # مسیر Webdriver خودت رو اینجا بزار

driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH)
driver.get("https://www.instagram.com/accounts/login/")
time.sleep(2) # برای لود شدن صفحه

try:
    username_input = driver.find_element(By.NAME, "username")
    password_input = driver.find_element(By.NAME, "password")

    username_input.send_keys(USERNAME)
    password_input.send_keys(PASSWORD)
    password_input.send_keys(Keys.ENTER)

    time.sleep(5) # برای لاگین شدن و لود صفحه اصلی

    print("با موفقیت وارد شدید!")
    # اینجا میتونی کدهای اسکرپینگ بعدی رو اضافه کنی

except Exception as e:
    print(f"خطا در لاگین: {e}")

finally:
    driver.quit()

مقایسه Instaloader و Selenium

ویژگی Instaloader
سرعت بالا (با درخواست‌های مستقیم HTTP)
نیاز به Webdriver خیر
قابلیت تعامل محدود (فقط از طریق API شبیه‌سازی شده)
کاربرد اصلی دانلود پست‌ها، پروفایل‌ها، هشتگ‌ها و متادیتا
پیچیدگی پایین

انتخاب بین این دو کتابخانه به نیاز خاص تو بستگی داره. برای داده‌های عمومی و سریع، Instaloader عالیه. اما اگه نیاز به انجام کارهایی مثل لایک کردن، کامنت گذاشتن یا دسترسی به محتوای خصوصی (که نیازمند لاگین هست) داری، باید بری سراغ Selenium.

قدم به قدم: ساخت یک اسکرپر اینستاگرام

کدهای پایتون برای اسکرپ کردن اینستاگرام — تصویر 3

خب، بریم سر اصل مطلب و ببینیم چطور می‌تونیم یک اسکرپر واقعی بسازیم. فرض می‌کنیم می‌خواهیم پست‌های یک هشتگ خاص رو جمع‌آوری کنیم.

گام 1: نصب و راه‌اندازی محیط

اول از همه مطمئن شو که پایتون روی سیستمت نصبه. بعد کتابخانه‌های مورد نیاز رو نصب کن:

pip install instaloader pandas # pandas برای ذخیره داده‌ها

اینجا از pandas هم استفاده می‌کنیم تا داده‌ها رو به شکل مرتبی ذخیره کنیم. برای کدهای آماده و اسنیپت‌های بیشتر می‌تونی به بخش مربوطه سر بزنی.

گام 2: نوشتن کد اسکرپینگ (با Instaloader)

حالا بیا کدی بنویسیم که پست‌های مرتبط با یک هشتگ رو جمع‌آوری کنه:

import instaloader
import pandas as pd
import time
import random

L = instaloader.Instaloader()

# حتماً با اکانت خودت لاگین کن تا از محدودیت‌های اینستاگرام کمتر اذیت بشی
USERNAME = "your_instagram_username"
PASSWORD = "your_instagram_password"

try:
    L.load_session_from_file(USERNAME)
except FileNotFoundError:
    L.login(USERNAME, PASSWORD)
    L.save_session_to_file(USERNAME)

target_hashtag = "برنامه_نویسی" # هشتگ مورد نظر
num_posts_to_scrape = 100 # تعداد پست‌هایی که می‌خوای جمع‌آوری کنی

posts_data = []
count = 0

# برای جمع‌آوری پست‌های یک هشتگ
for post in L.get_hashtag_posts(target_hashtag):
    if count >= num_posts_to_scrape:
        break

    try:
        posts_data.append({
            "id": post.mediaid,
            "کاربر": post.owner_username,
            "تاریخ": post.date_utc,
            "تگ‌ها": ", ".join(post.hashtags),
            "لایک‌ها": post.likes,
            "کامنت‌ها": post.comments,
            "کپشن": post.caption,
            "لینک_پست": post.url,
            "فیلتر": post.typename
        })
        print(f"پست شماره {count+1} از کاربر {post.owner_username} جمع‌آوری شد.")
        count += 1
        time.sleep(random.randint(2, 5)) # تأخیر رندوم برای جلوگیری از بلاک شدن
    except Exception as e:
        print(f"خطا در جمع‌آوری پست: {e}")
        time.sleep(random.randint(10, 20)) # تأخیر بیشتر در صورت خطا

# ذخیره داده‌ها در یک فایل CSV
df = pd.DataFrame(posts_data)
file_name = f"instagram_posts_{target_hashtag}.csv"
df.to_csv(file_name, index=False, encoding='utf-8-sig')

print(f"داده‌ها با موفقیت در {file_name} ذخیره شدند.")

همونطور که می‌بینی، کد بالا اطلاعاتی مثل نام کاربری، تاریخ پست، تعداد لایک و کامنت، کپشن و لینک پست رو برای هر پست جمع‌آوری می‌کنه و در نهایت توی یک فایل CSV ذخیره می‌کنه. نکته اصلی اینجا استفاده از `time.sleep(random.randint(2, 5))` هست. این تأخیر رندوم به اینستاگرام نشون می‌ده که تو یه ربات عجول نیستی و داری مثل یک انسان واقعی رفتار می‌کنی.

چالش‌های رایج و راه‌حل‌ها

اسکرپینگ اینستاگرام همیشه هم رویایی نیست و ممکنه با چالش‌هایی روبرو بشی. اینجا چندتا از رایج‌ترینشون رو با راه‌حل‌هاشون بررسی می‌کنیم:

1. محدودیت نرخ (Rate Limiting) و بلاک شدن IP

اینستاگرام نمی‌خواد ربات‌ها سرورهاش رو شلوغ کنن، برای همین درخواست‌های زیاد و پشت سر هم رو محدود می‌کنه. اگه تعداد درخواست‌هات از یه حدی بگذره، ممکنه IP تو رو بلاک کنه یا ارور بده.

  • راه‌حل: تأخیر رندوم: همیشه بعد از هر درخواست، یه تأخیر رندوم با time.sleep(random.randint(min, max)) اضافه کن. مثلاً بین ۲ تا ۵ ثانیه.
  • راه‌حل: استفاده از پروکسی: با استفاده از پروکسی‌های مختلف، IP خودت رو تغییر بده تا اینستاگرام نتونه از روی IP ثابتت تو رو شناسایی کنه.
  • راه‌حل: لاگین با اکانت: با یک اکانت واقعی لاگین کردن (مثل کاری که توی کد Instaloader کردیم)، شانس بلاک شدنت رو به شدت کاهش می‌ده.

2. محتوای پویا و JavaScript

خیلی از اطلاعات اینستاگرام با جاوااسکریپت بارگذاری می‌شن (مثلاً وقتی اسکرول می‌کنی پست‌های جدید ظاهر می‌شن). کتابخانه‌های ساده‌تر مثل requests و BeautifulSoup نمی‌تونن این محتوا رو ببینن.

  • راه‌حل: Selenium: همونطور که گفتیم، Selenium یک مرورگر کامل رو اجرا می‌کنه و می‌تونه جاوااسکریپت رو پردازش کنه.
  • راه‌حل: Instaloader: Instaloader این مشکل رو برای داده‌های عمومی حل کرده و خودش داده‌های JSON رو که حاوی اطلاعات هستن استخراج می‌کنه.

3. تغییرات مداوم در ساختار HTML اینستاگرام

اینستاگرام دائماً ظاهر و کد HTML صفحاتش رو تغییر می‌ده. اگه با Selenium یا BeautifulSoup (به صورت مستقیم) اسکرپ می‌کنی، ممکنه کدهات بعد از مدتی از کار بیفتن.

  • راه‌حل: استفاده از کتابخانه‌های تخصصی: Instaloader چون بر اساس API کار می‌کنه، کمتر تحت تأثیر این تغییرات قرار می‌گیره.
  • راه‌حل: انتخابگرهای منعطف: به جای استفاده از کلاس‌ها یا IDهای خیلی خاص، سعی کن از انتخابگرهایی استفاده کنی که احتمال تغییرشون کمتره (مثل نام تگ‌ها یا ویژگی‌های کلی‌تر).
  • راه‌حل: نگهداری مداوم: کدهات رو مرتباً بررسی و به‌روز کن.

نکات حرفه‌ای برای اسکرپینگ ایمن و مؤثر

برای اینکه یه اسکرپر خوب و بدون دردسر داشته باشی، این نکات رو همیشه تو ذهنت داشته باش:

  1. رفتار انسانی: همیشه سعی کن رباتت مثل یک انسان واقعی رفتار کنه. تأخیر رندوم، حرکت موس (با Selenium) و حتی تایپ آهسته.
  2. ذخیره کوکی‌ها و سشن‌ها: برای جلوگیری از لاگین‌های مکرر، کوکی‌ها و اطلاعات سشن رو ذخیره کن. Instaloader این کار رو به خوبی انجام می‌ده.
  3. مرورگرهای بدون رابط گرافیکی (Headless Browsers): اگه با Selenium کار می‌کنی، از حالت Headless استفاده کن (یعنی مرورگر بدون باز شدن پنجره اجرا بشه) تا منابع کمتری مصرف کنه و سریع‌تر باشه.
  4. مدیریت خطاها: کدهات رو طوری بنویس که در مواجهه با ارورها (مثل Rate Limit یا عدم وجود عنصر) کرش نکنن، بلکه یه راه حل مناسب (مثل تأخیر بیشتر یا تلاش مجدد) رو امتحان کنن.
  5. به روز نگه داشتن: به دلیل تغییرات مداوم پلتفرم‌ها، کدهای اسکرپینگت رو همیشه به روز نگه دار.

عیب‌یابی سریع (Troubleshooting)

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

❓ چرا Instaloader من کار نمی‌کنه و ارور 429 می‌ده؟

✅ راه‌حل: ارور 429 (Too Many Requests) یعنی اینستاگرام به درخواست‌های زیادی از IP تو مشکوک شده و موقتاً بلاکت کرده. کد زیر رو امتحان کن:

  • با اکانت خودت L.login(USERNAME, PASSWORD) لاگین کن و حتماً L.save_session_to_file(USERNAME) رو هم استفاده کن.
  • تأخیرهای time.sleep(random.randint(min, max)) رو افزایش بده.
  • اگر از VPN یا پروکسی استفاده می‌کنی، مطمئن شو که درست کار می‌کنه و IP رو تغییر می‌ده.

❓ Selenium نمی‌تونه عنصری رو پیدا کنه (NoSuchElementException). چیکار کنم؟

✅ راه‌حل: این مشکل معمولاً به چند دلیل پیش میاد:

  • صفحه هنوز لود نشده: از time.sleep() یا WebDriverWait برای انتظار کشیدن استفاده کن.
  • انتخابگر (selector) اشتباهه: مطمئن شو که By.NAME، By.XPATH یا By.CSS_SELECTOR که استفاده کردی، هنوز در HTML صفحه وجود داره. اینستاگرام زیاد UI اش رو تغیر می‌ده.
  • عنصر داخل یک iframe هست: باید با driver.switch_to.frame() به iframe سوئیچ کنی.

❓ چطور می‌تونم داده‌های بیشتری رو از Instaloader استخراج کنم؟

✅ راه‌حل: آبجکت post (یا profile) در Instaloader کلی اطلاعات دیگه هم داره. می‌تونی مستندات Instaloader رو چک کنی یا با dir(post) تمام ویژگی‌هاش رو ببینی. مثلاً برای تعداد ویوها: post.video_view_count.

جمع‌بندی: قدر پایتون را بدانیم!

اسکرپینگ اینستاگرام با پایتون یک مهارت فوق‌العاده کاربردیه که می‌تونه در تحلیل داده، تحقیقات بازار و حتی پروژه‌های شخصی بهت کمک زیادی کنه. با اینکه چالش‌های خاص خودش رو داره، اما با استفاده درست از کتابخانه‌هایی مثل Instaloader و Selenium و رعایت نکات اخلاقی، می‌تونی به نتایج عالی برسی.

همیشه یادت باشه که داده‌ها قدرتند، اما مسئولیت‌آمیز استفاده کردن از این قدرت اهمیت بیشتری داره. کدنویسی و کاوش در دنیای داده‌ها رو متوقف نکن، چون هر خط کدی که می‌نویسی، درگاهی به دنیایی از اطلاعات جدید باز می‌کنه. اگر به دنبال ابزارهای بیشتر برای پروژه‌های پایتونیت هستی، حتما به سایت ما سر بزن!

Table of Contents

آخرین نوشته‌ها