چگونه با PHP از سایتای دیگه اطلاعات بدزدیم؟!

میخوایم از سایتای دیگه مطلب بدزدیم!!! میتونیم سایتمون رو طوری درست کنیم که وقتی داریم استراحت میکنیم خودش بره توی سایتای دیگران و مطالب سایت ها رو بگیره و توی سایت ما ذخیره کنه و نشون بده. خب این کار چجوریه؟ به نظرتون برا عملی کردنش باید چیکار کنیم؟ میریم توی سایت مورد نظر مطلبش رو کپی میکنیم میایم توی سایت خودمون میزاریم به همین راحتی 🙂 خب حالا چجوری میشه این کار رو با PHP انجام داد؟ میرم سر اصل مطلب و چند روش رو براتون به صورت ساده توضیح میدم.

اگه بخوایم کل مطالب یه صفحه رو از یه سایت دیگه بگیریم و توی صفحه شخصی خودمون نمایش بدیم میتونیم از  تابع file_get_contents به صورت زیر استفاده کنیم:

خب همونطور که میبینید اول با دستور file_get_contents محتوای صفحه اول سایت رو گرفتم و با قرار دادن یه دستور echo محتوا رو توی صفحه ی شخصی خودم چاپ کردم. به همین راحتی:-)

بعضی سایتا برای اینکه نتونیم اطلاعاتشون رو بدزدیم میان و یه لایه ی امن خریداری میکنن (همون لایه ی SSL که پروتکل HTTPS ازش استفاده میکنه) ما هم برای اینکه بتونیم اطلاعاتشون رو بگیریم از کتابخانه ی معروف Curl که در سیستم عامل لینوکس قرار داره استفاده میکنیم .

اول اومدیم یه تابع ساختیم و توش از دستورات Curl استفاده کردیم. خب این تابع رو به این صورت ساختیم که آدرس یه صفحه رو بهش میدیم و محتوای اون صفحه رو بهمون تحویل میده.

خب حالا اگه بخوایم یه قسمت خاصی از محتوای یه سایت رو بگیریم چیکار میکنیم؟ روش های مختلفی برای گرفتن اطلاعات سایت های دیگه وجود داره مثلا قسمت خبرخوان (RSS) یک سایت رو بگیریم و داده ها رو از توش بکشیم بیرون یا اینکه مستقیما صفحه مورد نظر رو دریافت کنیم و با توابع مختلف PHP اون رو تجزیه کنیم و عکس ها و متن هاشو بکشیم بیرون. یه کتابخونه ای که خیلی مورد استفاده قرار میگیره کتابخونه Simple HTML DOM parser هست.

توی دستورات بالا ابتدا زمان مورد نیاز برای تحلیل صفحه رو منفی یک قرار دادم که به معنای بی نهایت هست. این برای مواقعی استفاده میشه که نمیدونیم چقد طول میکشه تا دستوراتمون اجرا بشه. بعدش نوع صفحه رو html تنظیم کردم و محتوا رو از نوع uft-8 گذاشتم که فارسی رو ساپورت کنه. در قسمت بعد کتابخونه simple DOM HTML رو اظافه کردم و ازش استفاده کردم تا همه ی عکسای صفحه رو بگیرم. حالا وقتی که کد اجرا بشه همه ی عکسای سایت طرح‌چه رو توی صفحه میتونید ببینید. میتونید کد مربوط به این مثال رو از پایین همین صفحه دانلود کنید و آزمایش کنید.

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

میتونید کتابخونه DOM HTML به همراه مثال بالا رو از پایین دانلود کنید.

 

دانلود کتابخانه PHP DOM HTML
دانلود کتابخانه PHP DOM HTML
simple_html_dom_1_5.zip
Version: 1.5
335.7 KiB
239 Downloads
اطلاعات بیشتر
اسکریپت گرفتن عکسهای سایت ها
اسکریپت گرفتن عکسهای سایت ها
php get site images.zip
Version: 1.0
15.2 KiB
173 Downloads
اطلاعات بیشتر
به اشتراک بگذارید:Email this to someoneShare on FacebookTweet about this on TwitterShare on Google+Digg thisShare on LinkedInPin on PinterestShare on StumbleUponFlattr the authorShare on RedditBuffer this pageShare on TumblrPrint this pageShare on YummlyShare on VK
  1. علی طبا

    سلام
    من بطور مثال می خوام جدول Royal Exchange – currency exchange rate of the moment از آدرس
    http://www.sarafiroyal.com/Default_en.html
    را برای صفحات خودم استفاده کنم. باید از چه راهی استفاده کنم ؟ با این نمونه ها نمیشه.
    ممنون

  2. سلام … خیلی ممنون … خیلی مفید بود
    میشه لطفا در مورد استفاده از file_get_contents برا دریافت اطلاعات و ذخیره در بانک اطلاعات بیشتر توضیح بدین …

    • توسط دستور file_get_contents میتونید اطلاعاتی رو از سایت هایی که غیر از https هستند دریافت کنید و درون یک متغیر قرار بدید و سپس هرجا که خواستید ذخیره کنید. دقت کنید که نوع فیلدی که درون دیتابیس برای ذخیره سازی داده ها استفاده می شود باید با نوع داده ای که قرار است درون آن ذخیره شود یکسان باشد.

  3. خیلی ممنون که سریع جواب میدین و پیگیر سوالات بچه ها هستین … اگه میشه تو چند خط همین روند گرفت و ذخیره کردن اطلاعات توضیح بدین … واقعا ممنون میشم

  4. سلام. روند انجام این کار به دو صورت خواهد بود
    روش اول: دریافت اطلاعات و ذخیره آنها درون یک فایل:

    file_put_contents(file_get_contents('http://tarhche.ir'),'file.txt');

    روش دوم دریافت اطلاعات و ذخیره در دیتابیس: ذخیره در دیتابیس رو خودتون باید با توجه به ساختار جدول های دیتابیس بسازید در اینجا من فقط دریافتش رو میگم

    $content=file_get_contents('http://tarhche.ir');

    سپس میتونید اطلاعات درون متغییر content رو در دیتابیس ذخیره کنید.

  5. سلام دوباره … منم دقیقا مشکلم همین جاست (روش دوم ) داخل content چی ذخیره میشه و چطور باید ازش استفاده کرد … واقعا ببخشید که دارم وقتتون میگیرم … روش های که گذاشتین امتحان کردم همشون جواب داد .. این روش ذهنم درگیر کرده اگه میشه توضیح بدین …

    • اگه میخواید بدونید که داخل content چی قرار میگیره کافیه که متغیر content رو با دستور print_r چاپ کنید به صورت زیر:

      print_r(content)

  6. علیرضا

    سلام
    چطوری میشه محتویاتی که به صورت Ajax لود میشه رو گرفت؟
    فرضا اطلاعاتی که تو یه جدول هست ajax data رو بخوام بگیرم

    • سلام دوست عزیز. اطلاعاتی که توسط ajax لود میشه از یک لینک یا آدرس گرفته میشه. فقط کافیه که لینکی که ajax اطلاعات رو ازش دریافت میکنه بدست بیارید. برای دیدن هرگونه تبادل اطلاعات از نوع ajax بعد از اینکه سایت کامل لود شد کلیک راست کنید و Inspect Element رو بزنید و سپس به سربرگ network برید, هرگونه تبادل اطلاعاتی که بین صفحه و سرور صورت بگیره توی قسمت network نمایش داده خواهد شد.

      • علیرضا

        ممنون از جوابتون
        اما من میزنم هر کاری کردم نتونستم بفهمم از کجا لود میکنه
        میشه یه مثال بزنین؟

        یه سئوال دیگه
        چطوری میشه خروجی یه فیلد از سایت دیگه بگیریم؟
        فرض کنین سایت x.com یه فیلد سرچی داره ، که سابمیت میشه تو سایتش میاد اطلاعات از دیتابیسش نشون میده به یوزر
        حالا من بخوام اون فیلد رو لود کنم تو سایت خودم که وصل بشه به همون سایت بعد از سابمیت اما نمایش اطلاعات خروجی تو سایت من باشه چی کار میشه کرد؟

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

          • علیرضا

            رجیستر کردم اما ایمیل وریفای که میاد میره تو اسپم
            آی پی وبسرور ایمیلیتون اسپمه

          • اسپم ها رو هم باید چک کنید، متاسفانه برای برخی افراد اسپم میشه 🙂 اسپم ها رو هم چک کنید چیز سختی نیست عزیز

          • شهریار

            درود بر شما

            با سپاس از سایت خوبتون.

            برای گرفتن اطلاعات از جدولی که با جاوا اسکریپت کار میکنه چه راهکاری دارین
            ؟
            از روشی که گفتین استفاده کردم
            view source
            Cache-Control
            public
            Connection
            keep-alive
            Content-Length
            ۳۱۴۱
            Content-Type
            image/png
            Date
            Wed, 15 Feb 2017 07:35:49 GMT
            Expires
            Thu, 15 Feb 2018 07:34:09 GMT
            Keep-Alive
            timeout=900
            Last-Modified
            Sun, 27 Jan 2013 23:04:48 GMT
            Server
            Set-Cookie
            BALANCEID=darmancluster.node33; path=/;
            X-AspNet-Version
            ۲٫۰٫۵۰۷۲۷
            X-Powered-By

            این اطلاعات رو داده..

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

            ممنون میشم راهنمایی کنید .

            من اطلاعات جدول دارویی از سایت تامین اجتماعی رو دارم

            http://darman.tamin.ir/Forms/Public/Druglist.aspx?pagename=hdpDrugList
            صفحه اول رو گرفتم ولی جدول برای صفحه دوم و بقیه رو نتونستم

            با سپاس

          • جاوا اسکریپت منظورتون ajax هست؟ اگه غیر از این باشه نمیشه کاریش کرد!

        • علیرضا

          متاسفانه من هر چقدر سعی کردم تو فروم شما مطلب موردنظرمو بنویسم نشد!
          پرلودش هی میچرخه اما سابمیت نمیشه!
          ببینین من میخوام خروجی که از یه فیلد یه سایته رو تو سایتم نشون بدم چطوری میشه این کار رو انجام داد؟

          • ادرس اون سایتی که میخواید فید رو ازش بخونید بزارید تا یه نمونه مثال براتون بسازم. همچنین میتونید از این پست استفاده کنید(کلیک کنید) , توی این پست نحوه ی دریافت خروجی از فید یا rss سایت ها رو نشون دادم. بازم اگه سایتی مد نظر دارید میتونید لینکش رو بزارید تا براتون یه نمونه بسازم.
            فروم سالم هست من تست کردم! مرورگر خودتون رو بروز رسانی کنید شاید از مرورگر باشه. حتما یه لینک بدید براتون فیدخوان بسازم حالشو ببرید 😀 موفق باشید دوست عزیز.

  7. علیرضا

    سلام دوست عزیز
    مطلب بسیار پر کاربرد عالی بود

    من مشکلی که دارم اینه که می خوام از یک سایت که روی ssl هست سورس پیجشو بگیرم
    ولی انگار باید فایل certificate بهش معرفی کنی و من نمیدونم چجوری
    ممنون میشم کمکم کنی

    • سلام. شما میتونید با استفاده از cURL این کار رو انجام بدید. در همین پست یه مثال از cURL درج شده که میتونید ازش استفاده کنید. اگه لینک سایت مورد نظرتون رو درج کنید مشکل شما رو بررسی و حل خواهم کرد و یک برنامه به شما ایمیل میکنم.

  8. امیر.م

    چطور میشه چند تا المنت یک صفحه رو درخواست نمایش داد ؟
    چطور میتونیم یک المنت مثلا img که تو هیچ کلاسی و آی دی نیست و خودش هم هیچ کلاس و آی دی نداره رو نشون بدیم ( به طور مشخص ) ؟
    تشکر

    • شما میتونید از متد find که درون کتابخونه simple html dom هست استفاده کنید. بررسی کنید که والد النت شما چیه. مثلا فرض کنید المنت img شما درون یک المنت div قرار گرفته , در این صورت میتونید از کلاس یا ID تگ div استفاده کنید تا به المنت img خودتون برسید. فقط کافیه که به صورت سلسله مراتبی حرکت کنید , مثل سلکتور های CSS عمل کنید . اگه متوجه نشدید بگید تا یک مثال کامل براتون شرح بدم. موفق باشید.

  9. امیر.م

    تا قسمتی متوجه شدم اما ممکنه یک مثال بدید ؟

  10. میثم

    چطور میشه یه فایل رو که دریافت میکنیم رو قسمتیش رو دریافت نکنیم مثلا این کد در یک صفحه اچ تی ام ال هست که من میخوام فقط متن داخل تگ p رو دریافت کنم ولی اون تگ span هم باهاش دریافت میشه چکار کنم که اون تگ span رو دریافت نکنم
    امتیاز فیلم : ۷٫۰/۱۰

    بنده همینطور که شما گفتید عمل کردم
    foreach($html->find(‘p’) as $e){
    echo $e->outertext . ”;
    }

    تگ های p رو میگیره ولی اون تگ span هم چون داخل p هست گرفته مشه در صورتی که من نمیخوام اون تگ span گرفته نشه و فقط همون اطلاعات توی p گرفته بشه

    • میتونید بجای outertext
      از plaintext استفاده کنین.

      همچنین میتونین از strip_tags استفاده کنین :
      echo strip_tags($e->outertext)

  11. میثم

    جواب بنده رو نمیدید؟دیگاه قبلیم هم که مثل اینکه حذف شده.

  12. شهریار

    درود برشما..

    دکمه ای که در جدول هست , برای نشون دادن اطلاعات بیشتر یا همون صفحه بعد با جاوا اسکریپت کار میکنه.

    نزدیک هزار تا رکورد هست که در هر صفحه ده تا وجود داره ..برای نمایش ده تای بعدی دکمه بعدی از جاوا اسکریپت استفاده می کنه..

    دوباره لینک رو قرار میدم ..
    ممنون میشم مشاهده کنید و راهکاری ارئه بدین..
    http://darman.tamin.ir/Forms/Public/Druglist.aspx?pagename=hdpDrugList
    با سپاس

    • سلام. کافیه که داده ها رو به صورت ajax از سرور درخواست بدید . میتونید از دستور limit درون Sql استفاده کنید.

  13. سلام خسته نباشید
    سایتای https که روش فایر وال هست رو باید چیکار کرد؟
    Sucuri WebSite Firewall – Access Denied
    این اررور رو میده نمیزاره لود کنم.

    در ضمن یک راه راحت تر هم برای گشتن و تجزیه سورس html هست. من خودم از explode استفاده میکنم و به محتوایی که میخوام میرسم سریع تر نتیجه میده…

    ممنون میشم پاسخ بدید
    تشکر

    • سلام دوست عزیز. این سایت ها از کوکی و user-agent برای محافظت از خود استفاده میکنند شما باید یک user-agent به صورتی ارسال کنید که همانند مرورگرها به نظر برسید!!! میتونید از user-agent کروم یا مازیلا استفاده کنید. کافیه یه سرچ بزنید توی اینترنت یا توی تنظیمات مرورگر خودتون برید و اون رو کپی کنید. یک راه حل کلی اراده داده شده که برای پایتون هست اما میتونید اون رو برای php پیاده سازی کنید!! کافیه اینجا (کلیک کنید) رو ببینید. همچنین میتونید از کد زیر استفاده کنید :
      $url = “phpcanyon.net”;
      $postvars = array(
      ‘scan’=>$url
      );
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, ‘http://sitecheck.sucuri.net/scanner/’);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      $result = curl_exec($ch);
      curl_close($ch);
      echo $result;

      • امیر حسین

        از user agent هم استفاده کردم باز هم شناسایی میکنه
        از ای پیش هم استفاده کردم
        میتونم ادرس سایت رو بدم بررسی کنید؟ خیلی نیاز دارم

        • سلام ادرس صفحه ای که میخواید دریافت کنید رو برای من ارسال کنید تا بررسی کنم. همچنین میتونید از طریق تلگرام با بنده در تماس باشید. (۰۹۳۷۳۶۲۰۳۵۳) موفق و پیروز باشید.

          • راستی یک روشی برای https توی نت پیدا کردم که با file_get_content محتوا رو میاره:

            array(
            “verify_peer”=>false,
            “verify_peer_name”=>false,
            ),
            );
            $html = file_get_contents(“https://www.digikala.com/”, false, stream_context_create($arrContextOptions));
            echo $html;
            ?>

            دیجی کالا رو مثال زدم چون در حالت عادی جواب نمیده

  14. mostafa

    سلام
    آیا در php دستوری شبیه به گت المنت جاوا اسکریپت داریم؟
    که بتونه کلیک بکنه؟میخوام برای لاگین در filesell.ir استفاده کنم متاسفانه به دلایلی از طریق POST کردن اطلاعات نمیشه(در سایتای دیگه با POST کردن اطلاعات لاگین میشم)

    • سلام دوست عزیز بله داریم میتونید از Simple html استفاده کنید و تگ ها ی صفحه رو شناسایی کنید. نمیشه عمل کلیک کردن رو انجام داد چون کلیک کردن عمل سمت کلاینت هست!!! اما میتونید با curl لاگین کنید.

  15. شایان حقوقی

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

    • میتونید لینک ajax رو پیدا کنید و استفاده کنید. کافیه توی console مرورگر برید و قسمت network رو ببینید.

می‌خواهید دیدگاهتان را بیان کنید؟