مدت :

۲ ساعت و ۳۰ دقیقه (فشرده)

قیمت : ۲۲۶,۰۰۰ تومان
LinkedIn
Twitter
Facebook
Telegram

درباره مدرس 

اطلاعات دوره

توضیحات

آیا می‌دانید scrapy چیست ؟ پیش از این آموزش وب اسکریپینگ، به صورت مقدماتی و پیشرفته در هم‌رویش منتشر شد. حال در این آموزش اسکریپی قصد داریم در قالب یک پروژه جذاب (با طعم فیلم و سریال!) به شما آموزش دهیم که چگونه با امکانات فریمورک scrapy یک وب اسکرپینگ راحت را تجربه کنید.

 

scrapy چیست ؟

فریمورک اسکریپی به انگلیسی Scrapy (که به صورت skrey-pee تلفظ می‌شود) یک فریمورک متن باز و رایگان پایتون در حوزه وب اسکریپینگ و وب کراولینگ است. این فریمورک یک ابزار محبوب، ساده و در عین حال قدرتمند برای استخراج اطلاعات به صورت ساختاریافته از وبسایت‌های گوناگون به شمار می‌آید.

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

سپس می‌توانید این داده‌های استخراج شده را پردازش کنید. در ادامه داده‌های پردازش شده را به صورت ساختاریافته در یک فایل با فرمت‌هایی نظیر csv و json یا حتی در پایگاه داده ذخیره کنید.

بنابراین به جای اینکه از صفر شروع کنید و زحمت استفاده از کتابخانه‌هایی نظیر BeautifulSoup و requests را به خودتان بدهید و پس از نوشتن چندین خط کد، تازه به کد html وبسایت مدنظرتان دست پیدا کنید، کار را به scrapy بسپارید. (اصطلاحا نیازی نیست که چرخ را مجددا اختراع کنید!)

 

آموزش-scrapy-چیست-هم-رویش
scrapy چیست ؟

 

هدف نهایی این پروژه:

استخراج اطلاعات فیلم‌ها (نظیر عنوان فیلم، نام کارگردان و بازیگر، امتیاز فیلم و ..) از وبسایت مشهور imdb است.

 

پیشنیازهای این دوره:

آشنایی مقدماتی با زبان برنامه نویسی پایتون و مفاهیم اولیه وب اسکریپینگ و وب کراولینگ است. همچنین این آموزش، در محیط پایچارم (pycharm) انجام می شود.

 

این آموزش در یک نگاه:

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

در ادامه با استفاده از مفهوم قانون (Rule) بر روی لینک‌های مختلف وبسایت imdb خزش می‌کنیم. یعنی رباتی طراحی می‌کنیم که به دنبال لینک‌های مختلف در وبسایت imdb بگردد و سپس، عنوان هر فیلم را از درون این لینک‌ها استخراج کند.

سپس با محیط shell در scrapy آشنا می‌شویم. این محیط چیزی شبیه به کامندلاین ویندوز است. این امکان را به ما می‌دهد تا دستورات را بلافاصله اجرا کنیم. دیگر نیازی به نوشتن چندین خط برنامه نیست.

در ادامه، با css سلکتورها و xpath سلکتورها آشنا می‌شویم. مهم‌ترین و پرکاربردترین سلکتورها را به صورت عملی با هم مرور می‌کنیم. با استفاده از این سلکتورها می‌توانیم اطلاعات مختلف را از دل وبسایت‌ها استخراج کنیم. اکنون پس از آشنایی با این سلکتورها، می‌توانیم اطلاعات مختلف هر فیلم (نظیر نام کارگردان و بازیگر و  … ) را استخراج کنیم.

سپس با مفهوم آیتم در scrapy آشنا می‌شویم. داده‌های استخراج شده را آیتم بندی می‌کنیم.

پس از آن، داده‌های خود را به صورت ساختاریافته در قالب‌های مختلف نظیر csv و json و xml ذخیره می‌کنیم.

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

 

نکته پایانی:

سرفصل‌های این آموزش، با الهام گیری از فصل پنجم کتاب web scraping with python، نوشته Ryan Mitchell تدوین شده است. در صورت علاقه، می توانید به این منبع مراجعه کنید.

 

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

 

کلیدواژگان

آموزش scrapy پروژه محور | scrapy در پایتون | اسکرپی پایتون | دانلود scrapy | آموزش python scrapy | scrapy چیست | فریمورک scrapy | ساخت خزنده وب با پایتون | آموزش crawler با پایتون | کتابخانه scrapy | نصب scrapy | اسکریپی در پایتون | آموزش پروژه محور scrapy | Scrapy | یادگیری پروژه محور اسکریپی | Scrapy in python | آموزش اسکریپی | scrapy چیست 

ریز محتوای فیلم‌ها

ریز محتوای فیلم‌ها

درس صفر: معرفی دوره

  • scrapy چیست؟
  • مزیت استفاده از scrapy
  • روش متفاوت استفاده شده در این آموزش
  • آموزش در یک نگاه

 

درس اول:  نصب و شروع کار با scrapy

  • ایجاد پروژه و محیط مجازی جدید در پایچارم
  • نصب کتابخانه scrapy
  • ایجاد پروژه در scrapy

 

درس دوم:  نوشتن اولین برنامه (اسپایدر)

  • هدف: استخراج عنوان یک فیلم از وبسایت imdb
  • ایجاد یک برنامه (اسپایدر) جدید
  • بررسی کدهای از پیش آماده در اسپایدر
  • مقداردهی به متغیرها برای استخراج اطلاعات از سایت imdb
  • تعریف نحوه استخراج اطلاعات در تابع parse

 

درس سوم: اجرای اولین برنامه

  • نحوه تغییر مسیر فعلی در ترمینال پایچارم
  • اجرای برنامه (اسپایدر) از طریق ترمینال
  • بررسی خروجی برنامه
  • تغییر کد برنامه و بررسی حالات مختلف استخراج اطلاعات
  • استخراج تگ h1
  • استخراج محتوای تگ h1 (عنوان فیلم)

 

درس چهارم: خزش بر روی لینک ها با تعریف قانون (بخش اول)

  • هدف: خزش روی همه لینک های وبسایت imdb و استخراج محتوای تگ h1
  • ایجاد یک اسپایدر جدید در مسیر مناسب
  • مقداردهی به متغیر start_urls
  • تعریف یک لیست به نام rules برای ایجاد قوانین خزش
  • تعریف قانون به کمک تابع Rule
  • آشنایی با آرگومان های LinkExtractor و allow و callback و follow
  • مقداردهی به آرگومان های تابع Rule
  • اجرای اسپایدر و بررسی خروجی

 

درس پنجم: خزش بر روی لینک ها با تعریف قانون (بخش دوم)

  • هدف: خزش روی 250 فیلم برتر imdb و استخراج عنوان فیلم ها
  • یافتن وجه اشتراک بین لینک های موردنظر برای خزش
  • مقداردهی جدید به آرگومان allow در تابع Rule
  • اجرای اسپایدر و بررسی خروجی
  • بررسی تغییر مقدار آرگومان follow در تابع Rule

 

درس ششم: خزش بر روی لینک ها با تعریف قانون (بخش سوم)

  • هدف : خزش روی لینک های مختلف سایت imdb با تعریف همزمان چند قانون
  • قانون اول: خزش روی 250 فیلم برتر و استخراج عنوان هر فیلم
  • قانون دوم: خزش روی لیست ژانرهای فیلم ها و استخراج عنوان اولین فیلم هر ژانر
  • اضافه کردن قانون دوم به لیست قانون های خزش
  • یافتن وجه مشترک لینک ها برای قانون دوم
  • اجرای اسپایدر و بررسی خروجی

 

درس هفتم : خزش بر روی لینک ها با تعریف قانون (بخش چهارم)

  • هدف : خزش روی لینک های مختلف imdb با تعریف یک تابع مشترک برای قانون ها
  • آشنایی با آرگومان cb_kwargs در تابع Rule
  • اجرای اسپایدر و بررسی خروجی
  • آشنایی با آرگومان deny

 

درس هشتم: کدنویسی در محیط شل (shell)

  • هدف استفاده از محیط shell چیست؟
  • باز کردن محیط shell برای یک صفحه از وبسایت
  • اجرای دستور در محیط shell
  • خارج شدن از محیط shell

 

درس نهم (بخش اول) : استخراج اطلاعات با css selector

  • هدف: بررسی دستورهای مورد استفاده در css سلکتورها
  • ایجاد shell برای یک فایل html از پیش آماده
  • استخراج تگ ها در قالب سلکتور
  • استخراج تگ ها بصورت خالص (بدون سلکتور)
  • استخراج محتوا و متن (text) تگ ها
  • استخراج محتوای اولین تگ
  • مقایسه متدهای get و extract
  • نمایش ویژگی های تگ (attributes) و مقادیر آن ها
  • دسترسی به مقدار یک ویژگی خاص

 

درس نهم (بخش دوم) : استخراج اطلاعات با css selector

  • هدف: دسترسی به المان های یک کد html از پیش آماده با css سلکتورها
  • دسترسی به تگ های فرزند (child)
  • دسترسی به فرزند بلاواسطه
  • دسترسی به تگ با آیدی (id) مشخص
  • دسترسی به تگ با کلاس (class) مشخص
  • دسترسی به تگ بعدی (following-sibling) یک المان
  • دسترسی به تگ با ویژگی (attribute) مشخص
  • دسترسی به تگ با چندین ویژگی (attribute) مشخص
  • دسترسی به اولین، آخرین و n امین فرزند یک تگ
  • جمع بندی و خلاصه css سلکتور

 

درس دهم : استخراج اطلاعات با xpath selector

  • هدف: دسترسی به المان های یک کد html از پیش آماده با xpath سلکتورها
  • دسترسی به همه موارد بیان شده در درس قبل
  • دسترسی به تگ با یک متن (text) مشخص
  • دسترسی به تگ دربرگیرنده یا والد (parent)
  • دسترسی به تگ قبلی (preceding sibling) یک المان
  • استخراج متن (text) درون یک تگ با xpath
  • جمع بندی و مقایسه css و xpath سلکتور

 

درس یازدهم: تکمیل اطلاعات استخراجی از وبسایت imdb

  • هدف: استخراج نام کارگردان، بازیگر، سال تولید و امتیاز فیلم های وبسایت imdb (250 فیلم برتر)
  • ایجاد shell برای صفحه موردنظر از وبسایت imdb
  • استخراج سال ساخت فیلم ها با استفاده از css سلکتور
  • استخراج نام کارگردان فیلم ها با استفاده از css سلکتور
  • استخراج نام بازیگر اول فیلم ها با استفاده از xpath سلکتور
  • استخراج امتیاز فیلم ها با استفاده از css سلکتور
  • تکمیل اسپایدر با توجه به سلکتورهای فوق
  • خروج از محیط shell و اجرای اسپایدر تکمیل شده
  • نمایش اطلاعات فیلم ها در ترمینال

 

درس دوازدهم: ایجاد آیتم برای داده ها

  • هدف از ایجاد آیتم چیست؟
  • توضیح مفهوم آیتم با بیان یک مثال: استخراج جواهرات
  • تعریف کلاس آیتم در فایل items.py
  • تعریف فیلدهای لازم برای آیتم ایجاد شده
  • اختصاص داده ها به فیلدهای آیتم
  • اجرای اسپایدر و احتمال بروز خطای no module named
  • نمایش اطلاعات در ترمینال به صورت ساختاریافته

 

درس سیزدهم: رفع مشکل دسترسی به فایل items.py

  • هدف: رفع خطای no module named
  • افزودن یک مسیر به تنظیمات اصلی پروژه
  • دسترسی به فایل items.py از طریق آدرس افزوده شده

 

درس چهاردهم:  ذخیره داده ها به کمک آیتم ها

  • هدف: ذخیره داده ها در یک فایل با فرمت csv یا json یا xml
  • آشنایی با فرمت csv
  • آشنایی با فرمت json
  • آشنایی با فرمت xml
  • دستورات لازم برای ذخیره داده ها در فرمت های مختلف

 

درس پانزدهم: مفهوم خط لوله یا پایپ لاین (pipeline)

  • هدف: آشنایی با مفهوم پایپ لاین و لزوم استفاده از آن در scrapy
  • کاربرد مفهوم پایپ لاین در یک مثال: خط تولید جواهرات
  • ارتباط مثال فوق با وب اسکریپینگ و استخراج داده ها

 

درس شانزدهم: استفاده از پایپ لاین برای پردازش آیتم ها

  • هدف: ترجمه عناوین فیلم های وبسایت imdb به فارسی
  • نصب و وارد کردن کتابخانه translate
  • مشخص کردن زبان ترجمه (فارسی)
  • افزودن عنوان فارسی در کنار عنوان انگلیسی
  • اجرای اسپایدر و ذخیره اطلاعات در فایل
  • نمایش اطلاعات در ترمینال و فایل xml

 

درس هفدهم: گزارش گرفتن از روند اجرای برنامه (logging)

  • انواع گزارش ها در حین اجرای برنامه
  • دسترسی به سطوح مختلف گزارش ها
  • محدود کردن گزارش های نمایش داده شده
  • ذخیره گزارش در یک فایل جداگانه log

 

درس هجدهم: نکات پایانی و جمع بندی

  • دستورهای مختلف در scrapy
  • بررسی مستندات و نسخه های بعدی scrapy
  • نگاهی به آینده:  ذخیره اطلاعات در پایگاه داده
نظرات (16)

16 دیدگاه برای آموزش scrapy پروژه محور ــ کتابخانه وب اسکرپینگ پایتون

  1. S.Mojtaba (خریدار محصول)

    سلام روزتون بخیر
    در درس پنجم که درمورد کراول کردن روی 250 فیلم برتر IMDB آموزش دادید
    هیچ لینک تکراری نبود و دقیقا 250 لینک خروجی داشتید
    اما برای من این اتفاق نمیفته و لینک های تکراری برگشت داده میشوند
    حتی اسپایدر خودتون رو اجرا میکنم، بازهم این مشکل وجود داره
    سعی کردم با قرار دادن یک set() جلوی بررسی لینک های تکراری رو بگیرم
    اما تاثیری نداشت
    برای رفع این مشکل پیشنهادی دارید؟

  2. S.Mojtaba (خریدار محصول)

    مسئله اینجاست که در اولین تلاش این خطا رخ داد
    از دیروز تا امروز صبر کردم و مجددا با همون خطا مواجه شدم
    روی سایت های دیگه ای تست کردم و نتیجه گرفتم
    اما روی سایت IMDB همچنان این خطا رو نمایش میده
    پیشنهادی برای رفع خطا دارید؟

  3. S.Mojtaba (خریدار محصول)

    سلام
    بعد از توضیحات ویدیوی جلسه سوم این دستور رو run کردم:
    *******************************************************
    import scrapy

    class ExampleSpider(scrapy.Spider):
    name = “example”
    # allowed_domains = [“example.com”]
    start_urls = [“https://www.imdb.com/title/tt1375666/”]

    def parse(self, response):
    print(response.css(‘h1’).extract_first())
    *******************************************************
    و با این خطا روبرو شدم

    2024-03-17 11:01:38 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None)
    2024-03-17 11:01:38 [scrapy.core.engine] DEBUG: Crawled (403) (referer: None)
    2024-03-17 11:01:38 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response : HTTP status code is not handled or not allowed
    اینطور که من متوجه شدم IMDB برای ربات ها محدودیت ایجاد کرده و سرور پاسخ نمیده
    اگر اینطور هست چه راهی پیشنهاد میدید تا این محدودیت رو دور بزنیم؟

    • محمدحسین ماجدی نیا

      سلام وقت بخیر. یک احتمال این هست که گاهی اوقات وقتی در یک بازه زمانی تعداد ریکوئست های ربات به یک وبسایتی زیاد میشه، اون دامنه بطور موقت ربات رو مسدود میکنه. مدتی صبر کنید و بعد دوباره اقدام کنید.

  4. محمد

    سلام ایا اموزش میدید چه طوری خروجی رو روی وب قرار بدیم ؟ مثلا json چه طور این کار انجام میشه ؟

    • محمدحسین ماجدی نیا

      سلام به شما. توی این آموزش نحوه استخراج داده ها و ذخیره اونها به فرمت های مختلف (از جمله json) آموزش داده شده ولی روی وب قرار دادن خروجی جزو این آموزش نیست.

  5. محمد (خریدار محصول)

    عالی عالی
    از این دست ویدیوهای اموزشی بیشتر بسازید واقعا متشکرم ازتون

    • محمدحسین ماجدی نیا

      سلام. خواهش میکنم! ممنون از شما که این همه انرژی مثبت فرستادید و نشون دادید ارزش وقتی که برای آموزش گذاشته شده رو درک کردید 🙂 .

  6. rezbba2@yahoo.com (خریدار محصول)

    شما که کار را با این گرافیک زیبا در آوردید . یک آموزش اسکرپی پیشرفته سایت های جاوااسکریپتی
    برای splash، سلنیوم و playwright هم بزنید
    اولین خریدار منم

  7. رضا علیزاده (خریدار محصول)

    سلام
    ممنون از تدریس عالی به ویژه برای استفاده از توضیحات گرافیکی در حین اجرای ویدیوها ،
    لطفا بفرمایید برای حل مشکل واکشی اطلاعات فارسی (که در ترمینال و یا فایل های خروجی برعکس چاپ میشود ) از چه کتابخانه و چه روش بهینه ای میتوان استفاده کرد
    با تشکر

    • محمدحسین ماجدی نیا

      سلام و ممنون از انرژی مثبت و حال خوبی که منتقل کردید و ظرافت های آموزش و زحمتی که برای تهیه اون کشیده شده رو درک میکنید! در فایل های خروجی معمولا این مشکل نمایش وارونه کلمات فارسی کمتر وجود داره ولی بطور کلی یکسری کتابخانه ها مثل arabic_reshaper و python-bidi برای نمایش صحیح عبارات فارسی (در صورت بروز مشکل) وجود داره . اما در مورد ترمینال پایچارم، گویا کلا با فونت فارسی و عربی مشکل داره و تا این لحظه من به راهکاری برای این قضیه نرسیدم (با اینکه روش های مختلفی که در برخی سایت ها گفته شده رو هم امتحان کردم). اگر راه حل دقیق و مناسبی پیدا کردم حتما بهتون اطلاع میدم.

  8. هومن (خریدار محصول)

    سلام وقت بخیر من میخواستم خصوصیت title تگ a مربوط به رنگ های محصول رو در صفحه زیر بخونم لطفا راهنمایی کنید
    https://www.trendyol.com/hummel/guile-kisa-kollu-tisort-p-32094870

    • محمدحسین ماجدی نیا

      سلام وقت شما هم بخیر.
      لطفا رجوع کنید به پاسخی که در دیدگاه قبلی نوشتم و راهکارهایی رو معرفی کردم.

  9. HAMID (خریدار محصول)

    با سلام
    من هر کاری می کنم روی سایت bama. ir نمی توانم خزش کنم. ظاهرا اونا کاری کردن که اجازه خزش رو به روبات های پایتونی ندن. شما در مورد این قبیل سایتها راهکاری رو دارید؟

    • محمدحسین ماجدی نیا

      سلام
      چندتا رفرنس بهتون معرفی میکنم که بطور کلی برای استخراج داده از سایت هایی که یا بر مبنای جاوااسکریپت هستند یا اطلاعات داخل تگ script یا nonscript قرار گرفته که یه مقدار مسیر وب اسکریپینگ رو پیچیده تر میکنند، مفید هستند:
      مورد اول بر اساس مستندات خود اسکریپی هست:
      https://docs.scrapy.org/en/latest/topics/dynamic-content.html#parsing-javascript-code
      مورد بعدی استفاده از برخی ابزارهای کمکی مثل splash، سلنیوم و playwright هست که میتونید با سرچ بیشتر، در موردشون اطلاعات کسب کنید. شاید در اینده، اموزش هایی در این زمینه منتشر کنیم.

  10. صابر (خریدار محصول)

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

    • محمدحسین ماجدی نیا

      سلام و تشکر از شما!
      فکر میکنم لینک زیر، دقیقا مرتبط با ایده ای هست که شما در ذهن دارید:
      https://scrapy-django-dashboard.readthedocs.io/en/latest/introduction.html
      (داخل پرانتز! در کنار کیوی و جنگو، پیشنهاد میکنم سری هم به آموزشی که درباره streamlit هست بزنید. این آموزش ایشالا به زودی در همرویش منتشر میشه و چارچوبی هست برای توسعه ساده و سریع یک وب اپلیکیشن پایتونی.)

  11. Parmis (خریدار محصول)

    سلام اگه بخوایم تو محیط colab اجرا کنیم امکانش هست؟ و چطور از ترمینال استفاده کنیم در colab

    • محمدحسین ماجدی نیا

      سلام وقت بخیر
      در کل پیشنهاد نمیشه که توی محیط کولب یا نوت بوک اجرا کنید چون شاید یک مقدار اذیت کننده بشه ولی امکانش هست.
      اگر از نسخه colab pro استفاده کنید، خودش امکان استفاده از ترمینال رو براتون فراهم میکنه (یه گزینه داره سمت چپ پایین صفحه)
      ولی به طور کلی، میتونید ترمینال رو شبیه سازی کنید. سایت های مختلف کدهای مختلفی رو برای این کار ارئه کردن. من پیشنهاد میکنم سری به کدهای موجود در این صفحه بزنید.
      البته نباید انتظار یه ترمینال صددرصدی مشابه ترمینال پایچارم رو ازش داشته باشید ولی فکر کنم کار راه انداز باشند.

  12. محمد وحید کوه کن (خریدار محصول)

    سلام استاد سوالی داشتم من میخوام اطلاعات جدولی که در این url هست رو استخراج کنم اما به هیچ شکلی نتونستم نه با css selector نه xpath ممنون میشم مشکل رو بفرمایید:
    https://codal.ir/Reports/Decision.aspx?LetterSerial=cmjQJt%2Bh5QxBpUMcT8rfPA%3D%3D&rt=0&let=6&ct=0&ft=-1&sheetId=1
    مثلا اطلاعات تگ h1 صفحه به راحتی استخراج میشه اما برای جدول به هر طریقی چه تگ های والد چه فرزند و … امتحان کردم یک لیست خالی برمیگردونه

    • محمدحسین ماجدی نیا

      سلام به شما
      برخی از سایت ها، همه یا قسمتی از ساختار وبسایت خودشون با استفاده از جاوا اسکریپت اجرا می کنن (از تگ های script مثلا استفاده می کنن) که وب اسکریپینگ اینجور صفحات دیگه به سادگی با استفاده صرف از css و xpath ممکن نیست و مثلا نیاز هست به اون تگ های اسکریپتی دسترسی پیدا کنید و بعد المان های مدنظرتون رو بیرون بکشید.
      لینک زیر یک راه حل برای این موضوع ارائه داده که مشابه مشکل شماست. بعد از دسترسی به تگ اسکریپت، با استفاده از جیسون و ریجکس، به المان های موجود در رشته دسترسی پیدا میکنه. پیشنهاد میکنم مطالعه بفرمایید و خودتون با کمی تغییرات میتونید به نتیجه برسید. (مثلا بجای استفاده از بیوتیفول سوپ برای دسترسی به کد صفحه، میتونید توی شل اسکریپی و از response هم استفاده کنید)

      https://stackoverflow.com/questions/66753132/scraping-table-from-a-website-result-as-empty

  13. نفیسه زوارئیان (خریدار محصول)

    سلام. من میخام از scrapy در اسپایدر استفاده کنم (منظورم ای دی ای spyder در اناکوندا). برنامه های شما کلاس هست چطور باید تغییرش بدم تا بتونم استفاده کنم؟ متشکرم.

    • محمدحسین ماجدی نیا

      سلام به شما
      لطفا مشکلتون رو دقیق تر مطرح بفرمایید
      در نصب اسکریپی در spyder مشکل وجود داره؟ یا مثلا اجرای کدها با خطا مواجه میشه؟

  14. مصطفی محمدی

    میخواستم بدونم امکان ذخیره اطلاعات در یک دیتابیس هم وجود داره؟
    یعنی اگر ما یک سایت داشته باشیم که بخوایم اطلاعات سایت imdb رو در دیتابیس ذخیره کنیم (دریک بازه زمانی خاص) و در سایت خودمون (که با جنگو برنامه نویسی میشه) نمایش بدیم تا بتونیم بعدا هم در سایت خودمون اطلاعات رو ویرایش کنیم؟

    • محمدحسین ماجدی نیا

      سلام
      این امکان به طور کلی وجود داره ولی فعلا در این آموزش به اون نمی پردازیم
      در این آموزش، ما اطلاعات در یک فایل (مثلا با فرمت csv) ذخیره می کنیم.

  15. حمید

    سلام. تشکر بابت مجموعه شما. چه طور میتونم با مدرس دوره ارتباط بگیرم برای کلاس خصوصی ؟

    • محمدحسین ماجدی نیا

      سلام به شما
      از قسمت پروفایل کاربری و گزینه “ارتباط با مدرس” میتونید با بنده در ارتباط باشید

  16. مصطفی آصفی

    بهترین آموزشی که می تونست تولید بشه. واقعا دست مریزاد..

دیدگاه خود را بنویسید

نظرات کاربران در خصوص دوره 

16 دیدگاه برای آموزش scrapy پروژه محور ــ کتابخانه وب اسکرپینگ پایتون

  1. S.Mojtaba (خریدار محصول)

    سلام روزتون بخیر
    در درس پنجم که درمورد کراول کردن روی 250 فیلم برتر IMDB آموزش دادید
    هیچ لینک تکراری نبود و دقیقا 250 لینک خروجی داشتید
    اما برای من این اتفاق نمیفته و لینک های تکراری برگشت داده میشوند
    حتی اسپایدر خودتون رو اجرا میکنم، بازهم این مشکل وجود داره
    سعی کردم با قرار دادن یک set() جلوی بررسی لینک های تکراری رو بگیرم
    اما تاثیری نداشت
    برای رفع این مشکل پیشنهادی دارید؟

  2. S.Mojtaba (خریدار محصول)

    مسئله اینجاست که در اولین تلاش این خطا رخ داد
    از دیروز تا امروز صبر کردم و مجددا با همون خطا مواجه شدم
    روی سایت های دیگه ای تست کردم و نتیجه گرفتم
    اما روی سایت IMDB همچنان این خطا رو نمایش میده
    پیشنهادی برای رفع خطا دارید؟

  3. S.Mojtaba (خریدار محصول)

    سلام
    بعد از توضیحات ویدیوی جلسه سوم این دستور رو run کردم:
    *******************************************************
    import scrapy

    class ExampleSpider(scrapy.Spider):
    name = “example”
    # allowed_domains = [“example.com”]
    start_urls = [“https://www.imdb.com/title/tt1375666/”]

    def parse(self, response):
    print(response.css(‘h1’).extract_first())
    *******************************************************
    و با این خطا روبرو شدم

    2024-03-17 11:01:38 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None)
    2024-03-17 11:01:38 [scrapy.core.engine] DEBUG: Crawled (403) (referer: None)
    2024-03-17 11:01:38 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response : HTTP status code is not handled or not allowed
    اینطور که من متوجه شدم IMDB برای ربات ها محدودیت ایجاد کرده و سرور پاسخ نمیده
    اگر اینطور هست چه راهی پیشنهاد میدید تا این محدودیت رو دور بزنیم؟

    • محمدحسین ماجدی نیا

      سلام وقت بخیر. یک احتمال این هست که گاهی اوقات وقتی در یک بازه زمانی تعداد ریکوئست های ربات به یک وبسایتی زیاد میشه، اون دامنه بطور موقت ربات رو مسدود میکنه. مدتی صبر کنید و بعد دوباره اقدام کنید.

  4. محمد

    سلام ایا اموزش میدید چه طوری خروجی رو روی وب قرار بدیم ؟ مثلا json چه طور این کار انجام میشه ؟

    • محمدحسین ماجدی نیا

      سلام به شما. توی این آموزش نحوه استخراج داده ها و ذخیره اونها به فرمت های مختلف (از جمله json) آموزش داده شده ولی روی وب قرار دادن خروجی جزو این آموزش نیست.

  5. محمد (خریدار محصول)

    عالی عالی
    از این دست ویدیوهای اموزشی بیشتر بسازید واقعا متشکرم ازتون

    • محمدحسین ماجدی نیا

      سلام. خواهش میکنم! ممنون از شما که این همه انرژی مثبت فرستادید و نشون دادید ارزش وقتی که برای آموزش گذاشته شده رو درک کردید 🙂 .

  6. rezbba2@yahoo.com (خریدار محصول)

    شما که کار را با این گرافیک زیبا در آوردید . یک آموزش اسکرپی پیشرفته سایت های جاوااسکریپتی
    برای splash، سلنیوم و playwright هم بزنید
    اولین خریدار منم

  7. رضا علیزاده (خریدار محصول)

    سلام
    ممنون از تدریس عالی به ویژه برای استفاده از توضیحات گرافیکی در حین اجرای ویدیوها ،
    لطفا بفرمایید برای حل مشکل واکشی اطلاعات فارسی (که در ترمینال و یا فایل های خروجی برعکس چاپ میشود ) از چه کتابخانه و چه روش بهینه ای میتوان استفاده کرد
    با تشکر

    • محمدحسین ماجدی نیا

      سلام و ممنون از انرژی مثبت و حال خوبی که منتقل کردید و ظرافت های آموزش و زحمتی که برای تهیه اون کشیده شده رو درک میکنید! در فایل های خروجی معمولا این مشکل نمایش وارونه کلمات فارسی کمتر وجود داره ولی بطور کلی یکسری کتابخانه ها مثل arabic_reshaper و python-bidi برای نمایش صحیح عبارات فارسی (در صورت بروز مشکل) وجود داره . اما در مورد ترمینال پایچارم، گویا کلا با فونت فارسی و عربی مشکل داره و تا این لحظه من به راهکاری برای این قضیه نرسیدم (با اینکه روش های مختلفی که در برخی سایت ها گفته شده رو هم امتحان کردم). اگر راه حل دقیق و مناسبی پیدا کردم حتما بهتون اطلاع میدم.

  8. هومن (خریدار محصول)

    سلام وقت بخیر من میخواستم خصوصیت title تگ a مربوط به رنگ های محصول رو در صفحه زیر بخونم لطفا راهنمایی کنید
    https://www.trendyol.com/hummel/guile-kisa-kollu-tisort-p-32094870

    • محمدحسین ماجدی نیا

      سلام وقت شما هم بخیر.
      لطفا رجوع کنید به پاسخی که در دیدگاه قبلی نوشتم و راهکارهایی رو معرفی کردم.

  9. HAMID (خریدار محصول)

    با سلام
    من هر کاری می کنم روی سایت bama. ir نمی توانم خزش کنم. ظاهرا اونا کاری کردن که اجازه خزش رو به روبات های پایتونی ندن. شما در مورد این قبیل سایتها راهکاری رو دارید؟

    • محمدحسین ماجدی نیا

      سلام
      چندتا رفرنس بهتون معرفی میکنم که بطور کلی برای استخراج داده از سایت هایی که یا بر مبنای جاوااسکریپت هستند یا اطلاعات داخل تگ script یا nonscript قرار گرفته که یه مقدار مسیر وب اسکریپینگ رو پیچیده تر میکنند، مفید هستند:
      مورد اول بر اساس مستندات خود اسکریپی هست:
      https://docs.scrapy.org/en/latest/topics/dynamic-content.html#parsing-javascript-code
      مورد بعدی استفاده از برخی ابزارهای کمکی مثل splash، سلنیوم و playwright هست که میتونید با سرچ بیشتر، در موردشون اطلاعات کسب کنید. شاید در اینده، اموزش هایی در این زمینه منتشر کنیم.

  10. صابر (خریدار محصول)

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

    • محمدحسین ماجدی نیا

      سلام و تشکر از شما!
      فکر میکنم لینک زیر، دقیقا مرتبط با ایده ای هست که شما در ذهن دارید:
      https://scrapy-django-dashboard.readthedocs.io/en/latest/introduction.html
      (داخل پرانتز! در کنار کیوی و جنگو، پیشنهاد میکنم سری هم به آموزشی که درباره streamlit هست بزنید. این آموزش ایشالا به زودی در همرویش منتشر میشه و چارچوبی هست برای توسعه ساده و سریع یک وب اپلیکیشن پایتونی.)

  11. Parmis (خریدار محصول)

    سلام اگه بخوایم تو محیط colab اجرا کنیم امکانش هست؟ و چطور از ترمینال استفاده کنیم در colab

    • محمدحسین ماجدی نیا

      سلام وقت بخیر
      در کل پیشنهاد نمیشه که توی محیط کولب یا نوت بوک اجرا کنید چون شاید یک مقدار اذیت کننده بشه ولی امکانش هست.
      اگر از نسخه colab pro استفاده کنید، خودش امکان استفاده از ترمینال رو براتون فراهم میکنه (یه گزینه داره سمت چپ پایین صفحه)
      ولی به طور کلی، میتونید ترمینال رو شبیه سازی کنید. سایت های مختلف کدهای مختلفی رو برای این کار ارئه کردن. من پیشنهاد میکنم سری به کدهای موجود در این صفحه بزنید.
      البته نباید انتظار یه ترمینال صددرصدی مشابه ترمینال پایچارم رو ازش داشته باشید ولی فکر کنم کار راه انداز باشند.

  12. محمد وحید کوه کن (خریدار محصول)

    سلام استاد سوالی داشتم من میخوام اطلاعات جدولی که در این url هست رو استخراج کنم اما به هیچ شکلی نتونستم نه با css selector نه xpath ممنون میشم مشکل رو بفرمایید:
    https://codal.ir/Reports/Decision.aspx?LetterSerial=cmjQJt%2Bh5QxBpUMcT8rfPA%3D%3D&rt=0&let=6&ct=0&ft=-1&sheetId=1
    مثلا اطلاعات تگ h1 صفحه به راحتی استخراج میشه اما برای جدول به هر طریقی چه تگ های والد چه فرزند و … امتحان کردم یک لیست خالی برمیگردونه

    • محمدحسین ماجدی نیا

      سلام به شما
      برخی از سایت ها، همه یا قسمتی از ساختار وبسایت خودشون با استفاده از جاوا اسکریپت اجرا می کنن (از تگ های script مثلا استفاده می کنن) که وب اسکریپینگ اینجور صفحات دیگه به سادگی با استفاده صرف از css و xpath ممکن نیست و مثلا نیاز هست به اون تگ های اسکریپتی دسترسی پیدا کنید و بعد المان های مدنظرتون رو بیرون بکشید.
      لینک زیر یک راه حل برای این موضوع ارائه داده که مشابه مشکل شماست. بعد از دسترسی به تگ اسکریپت، با استفاده از جیسون و ریجکس، به المان های موجود در رشته دسترسی پیدا میکنه. پیشنهاد میکنم مطالعه بفرمایید و خودتون با کمی تغییرات میتونید به نتیجه برسید. (مثلا بجای استفاده از بیوتیفول سوپ برای دسترسی به کد صفحه، میتونید توی شل اسکریپی و از response هم استفاده کنید)

      https://stackoverflow.com/questions/66753132/scraping-table-from-a-website-result-as-empty

  13. نفیسه زوارئیان (خریدار محصول)

    سلام. من میخام از scrapy در اسپایدر استفاده کنم (منظورم ای دی ای spyder در اناکوندا). برنامه های شما کلاس هست چطور باید تغییرش بدم تا بتونم استفاده کنم؟ متشکرم.

    • محمدحسین ماجدی نیا

      سلام به شما
      لطفا مشکلتون رو دقیق تر مطرح بفرمایید
      در نصب اسکریپی در spyder مشکل وجود داره؟ یا مثلا اجرای کدها با خطا مواجه میشه؟

  14. مصطفی محمدی

    میخواستم بدونم امکان ذخیره اطلاعات در یک دیتابیس هم وجود داره؟
    یعنی اگر ما یک سایت داشته باشیم که بخوایم اطلاعات سایت imdb رو در دیتابیس ذخیره کنیم (دریک بازه زمانی خاص) و در سایت خودمون (که با جنگو برنامه نویسی میشه) نمایش بدیم تا بتونیم بعدا هم در سایت خودمون اطلاعات رو ویرایش کنیم؟

    • محمدحسین ماجدی نیا

      سلام
      این امکان به طور کلی وجود داره ولی فعلا در این آموزش به اون نمی پردازیم
      در این آموزش، ما اطلاعات در یک فایل (مثلا با فرمت csv) ذخیره می کنیم.

  15. حمید

    سلام. تشکر بابت مجموعه شما. چه طور میتونم با مدرس دوره ارتباط بگیرم برای کلاس خصوصی ؟

    • محمدحسین ماجدی نیا

      سلام به شما
      از قسمت پروفایل کاربری و گزینه “ارتباط با مدرس” میتونید با بنده در ارتباط باشید

  16. مصطفی آصفی

    بهترین آموزشی که می تونست تولید بشه. واقعا دست مریزاد..

دیدگاه خود را بنویسید