متن خبر

نحوه خراش دادن چندین صفحه وب با استفاده از پایتون

نحوه خراش دادن چندین صفحه وب با استفاده از پایتون

اخبارنحوه خراش دادن چندین صفحه وب با استفاده از پایتون
شناسهٔ خبر: 266622 -




خبرکاو:

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

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

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

Scraping وب می تواند ابزار مفیدی برای جمع آوری داده ها و اطلاعات باشد، اما مهم است که اطمینان حاصل شود که آن را به روشی ایمن و قانونی انجام می دهید.

در اینجا چند نکته برای انجام صحیح اسکراپینگ وب وجود دارد:

قبل از اینکه سایتی را خراش دهید، اجازه بگیرید.

شرایط خدمات وب سایت و فایل robots.txt را بخوانید و درک کنید.

تعداد دفعات خراش دادن خود را محدود کنید.

از ابزارهای خراش وب استفاده کنید که به شرایط خدمات صاحبان وب سایت احترام می گذارند.

اکنون که روش صحیح نزدیک شدن به خراش دادن را درک کردید، بیایید وارد آن شویم. در این آموزش گام به گام، نحوه خراش دادن چندین صفحه از یک وب سایت با استفاده از کاربرپسندترین ماژول خراش دادن وب پایتون، سوپ زیبا را شرح خواهیم داد.

این آموزش به دو بخش تقسیم می شود: در مرحله اول یک صفحه را خراش می دهیم. سپس در بخش دوم، چندین صفحه را بر اساس کد استفاده شده در بخش اول خراش می دهیم.

الزامات

Python 3 : برای این آموزش باید از Python 3 استفاده کنید، زیرا کتابخانه ای که ما استفاده خواهیم کرد یک کتابخانه Python است. برای دانلود و نصب پایتون به وب سایت رسمی مراجعه کنید.

Beautiful Soup: Beautiful Soup یک بسته پایتون برای تجزیه ساختار یافته داده ها است. برای صفحات تجزیه شده، یک درخت تجزیه تولید می کند که می توانید از آن برای استخراج داده ها از HTML استفاده کنید. این به شما امکان می دهد با HTML به همان روشی که می توانید با یک صفحه وب با استفاده از ابزارهای توسعه دهنده تعامل داشته باشید، تعامل داشته باشید.

برای شروع استفاده از آن، ترمینال خود را راه اندازی کنید و Beautiful Soup را نصب کنید:

 $ pip install beautifulsoup4

کتابخانه درخواست ها: کتابخانه درخواست ها استاندارد پایتون برای ایجاد درخواست های HTTP است. ما از این به همراه Beautiful Soup برای بدست آوردن HTML برای یک وب سایت استفاده خواهیم کرد.

 $ pip install requests

نصب یک تجزیه کننده: برای استخراج داده ها از متن HTML، به یک تجزیه کننده نیاز داریم. ما در اینجا از تجزیه کننده lxml استفاده خواهیم کرد. برای نصب این تجزیه کننده، دستور زیر را اجرا کنید:

 pip install lxml

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

چگونه یک صفحه وب را خراش دهیم

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

بیایید اولین اسکراپر خود را بسازیم.

کتابخانه ها را وارد کنید

ابتدا، بیایید کتابخانه های مورد نیاز خود را وارد کنیم:

 import requests from bs4 import BeautifulSoup

HTML وب سایت را دریافت کنید

ما قصد داریم یک وب سایت با صدها صفحه رونوشت فیلم را خراش دهیم. ما با خراش دادن یک صفحه شروع می کنیم و سپس نحوه خراش دادن چندین صفحه را نشان می دهیم.

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

سپس از وب سایت request می کنیم و پاسخی را دریافت می کنیم که در متغیر نتیجه ثبت می کنیم. پس از آن، ما از روش .text برای بازیابی محتوای وب سایت استفاده می کنیم.

در نهایت، ما از تجزیه‌کننده lxml برای دریافت soup استفاده می‌کنیم، که شی حاوی تمام داده‌های ساختار تودرتو است که بعداً دوباره از آن استفاده خواهیم کرد.

 website = 'https://subslikescript.com/movie/Titanic-120338' result = requests.get(website) content = result.text soup = BeautifulSoup(content, 'lxml') print(soup.prettify())

هنگامی که ما شیء soup را داریم، می توانیم به سادگی با استفاده از .prettify() HTML قابل خواندن دریافت کنیم. اگرچه ممکن است از HTML چاپ شده در یک ویرایشگر متن برای یافتن عناصر استفاده کنیم، اما رفتن مستقیم به کد HTML عنصر مورد نظر بسیار ساده تر است. ما این کار را در فاز بعدی انجام خواهیم داد.

صفحه وب و کد HTML را تحلیل کنید

قبل از اینکه شروع به نوشتن کد کنیم، ابتدا باید وب سایتی را که قصد داریم خراش دهیم و کد HTML دریافتی را ارزیابی کنیم تا بهترین استراتژی برای خراش دادن وب سایت را شناسایی کنیم. نمونه رونوشت در زیر موجود است. چیزهایی که باید خراشیده شوند، عنوان و متن فیلم هستند.

Screen-Shot-2023-02-10-at-16.45.28
تصویری که عنوان و متن فیلم تایتانیک را نشان می دهد.

برای دریافت کد HTML برای یک عنصر داده شده، مراحل زیر را انجام دهید:

    به وب سایت رونوشت تایتانیک بروید.

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

Screen-Shot-2023-02-10-at-17.00.05
تصویری که کد منبع صفحه را نشان می دهد

چگونه یک عنصر را با سوپ زیبا پیدا کنیم

پیدا کردن یک عنصر در سوپ زیبا آسان است. به سادگی روش .find() را روی سوپ آماده شده قبلی اعمال کنید.

به عنوان مثال، کادر حاوی عنوان، توضیحات و متن فیلم را پیدا کنید. این در یک برچسب article قرار دارد و main-article کلاس را روی آن دارد. برای یافتن آن باکس می توانیم از کد زیر استفاده کنیم:

 box = soup.find('article', class_='main-article')

عنوان فیلم در یک تگ h1 محصور شده و فاقد نام کلاس است. پس از یافتن آن، از تابع .get_text() برای بازیابی متن درون گره استفاده می کنیم:

 title = box.find('h1').get_text()

رونوشت در یک تگ div گنجانده شده است و دارای کلاس full-script است. در این سناریو، آرگومان های پیش فرض را در تابع .get_text() تغییر می دهیم تا متن را دریافت کنیم.

ما با تنظیم strip=True برای حذف فضاهای پیشرو و انتهایی شروع می کنیم. سپس یک فضای خالی به separator separator=' ' اضافه می کنیم تا مطمئن شویم که کلمات بعد از هر خط جدید یک فضای خالی دارند \n .

 transcript = box.find('div', class_='full-script') transcript = transcript.get_text(strip=True, separator=' ')

تا کنون، ما داده ها را با موفقیت خراش داده ایم. برای اطمینان از اینکه همه چیز به درستی کار می کند، متغیرهای title و transcript را چاپ کنید.

چگونه داده ها را به یک فایل txt صادر کنیم

می توانید داده ها را در CSV ، JSON و فرمت های دیگر ذخیره کنید. در این مثال، داده های استخراج شده را در فایل a.txt ذخیره می کنیم. برای انجام این کار، همانطور که در کد زیر نشان داده شده است، از کلمه کلیدی with استفاده می کنیم:

 with open(f'{title}.txt', 'w') as file: file.write(transcript)

به خاطر داشته باشید که از f -string برای تنظیم نام فایل به عنوان عنوان فیلم استفاده کنید. پس از اجرای کد، باید یک فایل .txt در پوشه کاری خود داشته باشیم.

اکنون که با موفقیت داده‌ها را از یک صفحه وب حذف کرده‌ایم، آماده حذف رونوشت‌ها از چندین صفحه هستیم!

چگونه چندین صفحه وب را خراش دهیم

در صفحه رونوشت، به پایین پیمایش کنید و روی همه فیلمنامه‌های فیلم کلیک کنید. می توانید آن را در پایین صفحه وب پیدا کنید.

Screen-Shot-2023-02-11-at-07.59.55
صفحه همه رونوشت ها

اسکرین شات تمام رونوشت های فیلم را نشان می دهد. این وب سایت دارای 1757 صفحه است که تقریباً 30 رونوشت فیلم در هر صفحه دارد.

در این بخش با بدست آوردن ویژگی href هر لینک چندین لینک را خراش می دهیم. ابتدا باید وب سایت را تغییر دهیم تا اسکراپین مجاز باشد. متغیر جدید وب سایت ما به صورت زیر خواهد بود:

 root = 'https://subslikescript.com' website = f'{root}/movies'

دلیل اصلی تعریف متغیر root در کد کمک به خراش چندین صفحه وب بعداً است.

نحوه دریافت ویژگی href

بیایید با ویژگی href 30 فیلم در یک صفحه شروع کنیم. هر عنوان فیلم را در کادر " فهرست رونوشت های فیلم " تحلیل کنید.

پس از آن، ما باید کد HTML را داشته باشیم. یک a باید با رنگ آبی برجسته شود. هر a متعلق به عنوان یک فیلم است.

Screen-Shot-2023-02-11-at-13.04.17

همانطور که می بینیم، پیوندهای داخل href شامل دامنه root subslikescript.com نمی شوند. به همین دلیل است که قبل از الحاق یک متغیر ریشه ایجاد کردیم.

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

چگونه عناصر متعدد را پیدا کنیم

در Beautiful Soup از متد .find_all() برای مکان یابی چندین عنصر استفاده می کنیم. برای استخراج پیوندی که مربوط به رونوشت هر فیلم است، باید پارامتر href=True را وارد کنیم.

 box.find_all('a', href=True)

برای دریافت پیوندها از href، ['href'] به عبارت بالا اضافه کنید. با این حال، از آنجایی که متد .find_all() فهرست ی را برمی گرداند، باید از طریق آن حلقه بزنیم و hrefs را یک به یک در داخل حلقه دریافت کنیم.

 for link in box.find_all('a', href=True): link['href']

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

 links = [link['href'] for link in box.find_all('a', href=True)] print(links)

اگر فهرست پیوندها را چاپ کنید، پیوندهایی که قصد داریم خراش دهیم، قابل مشاهده خواهند بود. در مرحله زیر، هر صفحه را خراش می دهیم.

برای خراش دادن رونوشت هر پیوند، مراحلی را که برای اولین رونوشت استفاده کردیم، تکرار می کنیم. این بار، این مراحل را داخل حلقه for در زیر قرار می دهیم.

 for link in links: result = requests.get(f'{root}/{link}') content = result.text soup = BeautifulSoup(content, 'lxml')

همانطور که ممکن است به خاطر داشته باشید، پیوندهایی که قبلاً ذخیره کرده بودیم حاوی root subslikescript.com نبودند، پس باید آن را با عبارت f'{root}/{link}' الحاق کنیم.

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

بسته شدن

اگر می خواهید صفحات وب را مرور کنید، دو گزینه دارید.

هر یک از صفحات قابل مشاهده در صفحه وب را تحلیل کنید (به عنوان مثال، 1، 2، 3، یا 1757). برچسب a را با ویژگی href همراه با پیوندهای هر صفحه دریافت کنید. هنگامی که پیوندها را دارید، آنها را با ریشه ترکیب کنید و پس از انجام این کار همانطور که در بخش 2 توضیح داده شده است، ادامه دهید.

از صفحه 2 دیدن کنید و پیوندی را که در آنجا می بینید کپی کنید. اینگونه باید ظاهر شود: subslikescript.com/movies?page=2 . می توانید ببینید که وب سایت یک قالب ثابت برای هر صفحه دارد: f'{website}?page={i}' . اگر می خواهید ده صفحه اول را مرور کنید، می توانید از متغیر وب سایت مجددا استفاده کنید و بین 1 تا 10 حلقه بزنید.

بیایید در توییتر و لینکدین متصل شویم. همچنین می توانید در کانال یوتیوب من عضو شوید.

کد نویسی مبارک!

برچسب‌ها

ارسال نظر




تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است