web scraping (part-1)

درود دوستان؛ امروز میخام درباره یه مقوله خیلی مهم برای اینکه بتونید داده ها رو جمع آوری کنید و تحلیل و توصیه روی اونا انجام بدین براتون بگم. web scraping کارش همینه یعنی داده هایی که از طریق بازدید از یه وب سایت در دسترس هستند رو می تونیم بدون بازدید جمع آوری کنیم. پس وب اسکرپینگ یعنی فرایند جمع آوری و یا استخراج داده ها از وب))مرحله اول: نصب کتابخانه هابهتون پیشنهاد می کنم از یه محیط مجازی (virtual env) برای نصب کتابخونه ها استفاده کنید. چرا؟ زیرا که شما می خواید یه سری کتابخونه استفاده کنید مخصوص به همین کاری که الان می خواید انجامش بدین پس دیگه نیازی به این که کل پایتون رو خبردار کنید و فضای حافظه رو پر کنید نیست که! خیلی آروم و بی سر و صدا یه فضای مجازی ایجاد کنید. خب حالا برای ایجاد محیط مجازی اگه از قبل این کتابخونه رو نصب دارید که برید 4 خط بعدی. ( از کجا بفهمیم نصب داریمش از قبل ؟ وارد محیط cmd بشین تو ویندوز و تایپ کنید pip list و enter رو بزنید. هر چی کتابخونه نصب دارید رو بهتون نشون میده اگر virtualenv رو دیدین که خب نصب کردید از قبل) اگر هم نصب ندارید که برای نصبش می تونید وارد cmd بشین و تایپ کنید:pip install virtualenvحالا برای اینکه بتونیم یه فضای مجازی بسازیم تو مسیر دلخواهمون cmd رو باز می کنیم و یه فضای مجازی با اسم دلخواهمون ایجاد می کنیم:virtualenv nameتبریک میگم، یه فضای مجازی ایجاد کردی.پس من یه پوشه ایجاد کردم مثلا به اسم webscraping، داخل پوشه یه فضای مجازی به اسم new ساختم. بعد از ایجاد فضای مجازی اگه وارد پوشه webscraping بشم، یه پوشه new ساخته شده که توی این پوشه هم کلی فایل دیده میشه. حالا برای اینکه بتونم کتابخونه های لازم رو نصب کنم همه رو باید ببرم تو پوشه Scripts که تو پوشه new ساخته شده برای همین وارد همین مسیر Scripts میشم . اول باید محیط مجازی م رو اکتیو کنم برای این کار هم تو محیط cmd بعد اینکه دقیقا تو مسیر Scripts قرار گرفتیم(مثلا: C:\Users\webscraping\new\Scripts) به صورت زیر تایپ می کنیم:activateحالا اگر دیدین تو خط بعدی به این صورت اسم فضای مجازی قبل کدها قرار گرفته یعنی فضای مجازی که ایجاد کردین فعال شده:(new) C:\Users\webscraping\new\Scriptsالان میتونیم کتابخونه های لازم برای وب اسکرپینگ رو نصب کنیم که دو تا کتابخونه requests و bs4 رو به صورت زیر تو فضای مجازی نصب می کنیم:pip install requestspip install bs4خب برای محیط کدنویسی من از ژوپیتر استفاده می کنم. شما هم می تونید از هر محیط دیگه ای مثل pycharm, vscode , ... استفاده کنید.کتابخانه Requestsهمون طور که از اسمش هم مشخصه به کمک این کتابخونه می تونیم درخواست ارسال کنیم به وب سایت های مختلف. یا این طوری بگم همونطور که ما وارد مرورگر میشیم و یه آدرسی رو درخواست می دیم و پاسخ دریافت می کنیم . این فرایند درخواست و دریافت جواب از طریق پروتکل http انجام میشه. http بین مرورگر و سرور ارتباط برقرار می کنه و این یعنی مرورگر ما یک سرویس گیرنده http هست. http درخواست ما رو برای سرور می فرسته، (نه تا روش برای ارسال درخواستای http داریم مهمترینیش هم get و post هست) وقتی که آدرسی رو تو مرروگر مینویسیم و ارسال می کنیم در واقع از متد get استفاده می کنیم. و وقتی که داریم یه فرم ثبت نام پر می کنیم و یا داده ای رو داریم وارد می کنیم این نوع درخواست از طریق متد post انجام میشه. خیلی خب برای کار با کتابخونه requests اول باید اون رو توی برنامه ایمپورت کنیم:import requestsیه متغیر به اسم url تعریف می کنیم و مشخص می کنیم که به چه وب سایتی قراره درخواست بفرستیم و درخواستمون رو هم به صورت زیر ارسال می کنیم:url='https://www.aparat.com/'response=requests.get(url)و اگر response رو پرینت کنیم پاسخ 200 هست یعنی درخواست ما درست بوده، که اگر درخواستمون اشتباه باشه تو خروجی 404 رو می بینیم.متدهای کتابخونه requests رو براتون معرفی می کنم در ادامه :متد requst: این متد نوع درخواست رو برامون مشخص میکنه (که درخواست از نوع get بوده یا از نوع post)print(response.request)متد headers: به کمک این متد می تونیم اطلاعاتی درمورد درخواستی که فرستادیم به دست بیاریم.print(response.request.headers)متد status_code: وضعیت درخواست رو مشخص می کنه ، مثلاً اگر درخواست درست باشه عدد 200 و اگه هم اشتباه باشه که 404 رو برمیگردونه.print(response.status_code)متد reason: این متد هم مثل متد قبلی وضعیت درخواست رو مشخص می کنه ولی به شکل نوشتاری یعنی به جای عدد ، Ok و یا Not found رو نشون میده.print(response.reason)متد text: کل سورس کد از صفحه درخواستی رو بهمون برمیگردونه.print(response.text)خب اینا متدهای پرکاربرد تو کتابخونه requests هستند البته کامل نیست و خودتون می تونین این کتابخونه رو جداگونه بررسی کنید.یه مثال عملی هم اینجا می زنم. فرض کنید که تو یه سایتی هستیم و می خوایم یه عکس رو دانلود کنیم با کمک requests. اول میایم عکس رو تو یه صفحه جدید باز می کنیم لینکش رو کپی و تو محیط کد این دستورا رو می نویسیم:import requestsurl='http://www.araas.ir/wp-content/uploads/2018/02/www.araas_.ir-18-17.jpg?v=1621338029'response=requests.get(url)with open('pic.jpg','wb')as file: file.write(response.content)و حالا تو مسیر ذخیره محیطی که کد می زنید رو ببینید عکسی که می خواستین دانلود شده.بقیه مباحث باشه برای جلسه های بعدی...