طراحی سایت, ساخت ربات تلگرام, آموزش php , سورس کد php ,سورس ربات تلگرام , سورس فروشگاه اینترنتی , آموزش طراحی وب

استخراج و دریافت اطلاعات فیلم از imdb با php


استخراج و دریافت اطلاعات فیلم از imdb با php

تقریبا هر توسعه دهنده PHP تا حالا یک سری داده ها را از وب اسکرپ کرده است. Web Scraping، روشی برای استخراج و پاکسازی داده ها در سرتاسر اینترنت است.

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

وب اسکرپینگ (استخراج داده از صفحات وب) قبل از بوجود آمدن API ها استفاده می شد که الان اهمیت آن دوچندان شده است چراکه سایت های زیادی APIی برای دسترسی به یک سری داده ها را ارایه نمی دهند و ما ناچاریم که با وب اسکرپینگ (Web Scraping) تمام اطلاعات صفحه را بصورت HTML دریافت و با تجزیه (parse) کردن آن به داده مورد نظر برسیم.

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

سایت IMDB هیچ API عمومی ندارد, بنابراین ما نیاز داریم که این اطلاعات را از سایت scrape کنیم.

در این مثال ما اطلاعات زیر را از صفحه فیلم Venom در سایت imdb بدست می آوریم :

  • عنوان
  • توضیحات
  • تاریخ انتشار
  • ژانر

دلیل اینکه ما از کتابخانه ReactPHP استفاده می کنیم, سرعت بالای درخواست ها است. فرض کنید که ما تمام فیلم های صفحه Coming Soon را اسکرپ می کنیم. که دارای ۱۲ صفحه است و هر صفحه ۲۰ فیلم را داراست. بنابراین ۲۴۰ درخواست نیاز داریم که خب ارسال این درخواست ها پشت سر هم می توانید کمی زمانبر باشد…

حالا تصور کنید تمام این درخواست ها را بصورت همزمان (concurrently) ارسال کنیم. با این روش اسکرپر ما بطور قابل توجهی سریع خواهد بود.

 

نصب پیش نیازها

قبل از شروع کدنویسی اسکرپر نیاز است که پکیج های مورد نیاز را توسط کامپوزر به پروژه تزریق کنیم. (آموزش composer در PHP)

ما از کلاینت HTTP بنام buzz-react استفاده می کنیم.

برای Dom نیز از DomCrawler سیمفونی بهره می بریم.

Css-selector نیز به DomCrawler اجازه می دهد که سلکتور ها را مانند جی کویری استفاده کند.

حالا می توانیم کدنویسی را شروع کنیم:

ما نمونه حلقه رویداد و کلاینت HTTP ایجاد کردیم. حالا میریم سراغ ارسال درخواست

ارسال درخواست به سایت IMDB

کلاینت Clue\React\Buzz\Browser دارای متد های زیادی مانند get(), post(), put() و غیره می باشد و ما اینجا برای ارسال درخواست get از متد get($url, $headers = [] ) استفاده می کنیم.

کد بالا کل خروجی صفحه درخواست شده را بازگشت می دهد. زمانی که پاسخ (response) دریافت شد می توانیم از نمونه Psr\Http\Message\ResponseInterface برای مدیریت پاسخ برگشتی و پروسس کردن آن استفاده کنیم.

 

تجزیه آبجکت DOM

صفحه فیلم IMDB نیاز به احراز هویت ندارد. همچنین اگر سورس صفحه را ببینید تمام اطلاعاتی که نیاز داریم از قبل در HTML وجود دارد. بنابراین این کار بسیار ساده است

بعد از دریافت پاسخ ما شروع به تجزیه DOM می کنیم. و اینجا از DomCrawler سیمفونی استفاده می کنیم. برای شروع استخراج اطلاعات نیازه به ساخت نمونه Crawler داریم که رشته HTML را نیز می پذیرد.

داخل این هندلر, ما نمونه Crawler را ساخته و پاسخ را به آن پاس می دیم. حالا با استفاده از سلکتور مشابه جی کویری داده های مورد نیاز را از HTML دریافت می کنیم.

عنوان

این عنوان داخل تگ h1 قرار دارد:

متد filter() برای پیدا کردن یک المنت داخل DOM استفاده می شود و بعد ما با متن داخل آن را با استفاده از سلکتور مشابه جی کویری استخراج می کنیم.

حتما بخوانید  توابع کار با رشته ها در php

ژانر و توضیحات

تاریخ انتشار

همانطور که دیدید داخل تگ <div> است اما بطور ساده نمی توان متن را از آن استخراج کرد. چرا که اگر اقدام کنیم چیزی مشابه این را دریافت می کنیم  (Release Date: 16 February 2018 (USA) See more ») که مدنظر ما نیست

بنابراین قبل از استخراج متن تمام تگ های داخلی را حذف می کنیم :

اینجا ما تمام تگ های <div> از بخش Details را انتخاب می کنیم. سپس, داخل حلقه, تمام تگ های فرزند را حذف می کنیم. این کد تمام تگ های <div> داخلی را انتخاب می کنیم برای همین ما برای دریافت تاریخ انتشار, چهارمین (ایندکس ۳) المنت را انتخاب و متن را از داخل آن می گیریم.

در مرحله آخر ما تمام داده ها را در یک آرایه جمع می کنیم.

 

استخراج و دریافت اطلاعات فیلم از imdb با php

حالا ما کل تکه کد ها را در کنار همدیگر داخل یک کلاس به نام Scraper جمع می کنیم.

متد سازنده این کلاس, نمونه Browser را دریافت می کند و ما دو متد برای دریافت اطلاعات فیلم و سریال داریم:

  • Scrape(array $urls) برای ارسال درخواست و تجزیه DOM
  • getMovieData() برای دریافت نتایج در زمانی که کار به اتمام رسیده است.
حتما بخوانید  ساخت چت روم با php و jquery

حالا در عمل قصد داریم اطلاعات دو فیلم مختلف را دریافت کنیم :

در کد بالا ما scraper را ایجاد و آدرس url دو فیلم را بصورت آرایه ای به آن پاس می دهیم.سپس در حلقه رویداد اجرا می شود تا زمانی که همه درخواست ها ارسال و اسکرپ به اتمام برسد.

بعد از آن نتیجه به این شکل برگشت داده می شود:

شما می توانید این اطلاعات را در فایل یا دریتابیس ذخیره کنید. به هر حال هدف ما نمایش نحوه دریافت این اطلاعات و نشان دادن یک مثال کاربردی برای استخراج و دریافت اطلاعات فیلم از imdb با php بود.

 

امیدوارم از آموزش استخراج و دریافت اطلاعات فیلم از imdb با php استفاده مفید را برده باشید.

برای دانلود سورس کد کامل از باکس دانلود زیر استفاده کنید.

هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .

موفق و پیروز باشید.

اگر مفید بود, لطفا به اشترک بگذارید تا دوستان دیگر نیز بهره ببرند

حسن شفیعی
مدرس ، پنتستر ، توسعه دهنده اپلیکیشن های تحت وب ، عضو مرکز حامی نخبگان و از مدیران و اعضای رسمی تیم امنیتی آشیانه هستم . علاقه خاصی به زبان php و امنیت شبکه و لینوکس دارم و هر روز تلاش می کنم به این حوزه ها مسلط تر شوم و اطلاعاتم را در وب به اشتراک بگذارم

دیدگاه کاربران

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دانلود رایگان (هدیه ویژه)

کتاب آموزش زبان برنامه نویسی PHP را دانلود و همین امروز یادگیری را شروع کن و به جمع برنامه نویسان ملحق شو ;)

دانلود رایگان کتاب

آموزش طراحی وب سایت

نظر کاربران عزیز

آموزش های آنلاین در چه زمینه ای تهیه کنیم ؟

  • آموزش جاوااسکریپت و جی کوئری (45%, 10)
  • آموزش ساخت ربات تلگرام (45%, 10)
  • آموزش بوت استرپ 4 (9%, 2)

تعداد رای ها : 22

Loading ... Loading ...

بخش کاربران

هنوز عضو نیستید ؟ کلیک کنید

مجوزهای ما


logo-samandehi نماد اعتماد الکترونیک

دانلود کتاب

عضویت در خبرنامه