هنگامی که با خراش دادن وب پایتون شروع می کنید، انتخاب های شما در نهایت به سه ابزار خلاصه می شود: سوپ زیبا، اسکرپی و سلنیوم.
آیا می خواهید با پایتون اسکراپینگ وب را یاد بگیرید اما در مورد استفاده از سوپ زیبا، سلنیوم یا اسکرپی برای پروژه بعدی خود گیج شده اید؟ در حالی که همه این کتابخانهها و چارچوبهای پایتون به خودی خود قدرتمند هستند، همه نیازهای اسکراپینگ وب را برآورده نمیکنند، و از این رو، مهم است که بدانید از کدام ابزار برای یک کار خاص استفاده کنید.
بیایید نگاهی به تفاوتهای بین سوپ زیبا، اسکرپی و سلنیوم بیندازیم تا بتوانید قبل از شروع پروژه بعدی خراش دادن وب پایتون تصمیم عاقلانهای بگیرید.
1. سهولت استفاده
اگر مبتدی هستید، اولین نیاز شما یک کتابخانه خواهد بود که یادگیری و استفاده از آن آسان باشد. Beautiful Soup تمام ابزارهای ابتدایی مورد نیاز برای خراش دادن وب را در اختیار شما قرار می دهد، و به ویژه برای افرادی که تجربه حداقلی با پایتون دارند اما می خواهند با خراش دادن وب به زمین بزنند مفید است.
تنها نکته این است که به دلیل سادگی، سوپ زیبا در مقایسه با اسکرپی یا سلنیوم قدرتمند نیست. برنامه نویسان با تجربه توسعه می توانند به راحتی بر Scrapy و Selenium مسلط شوند، اما برای مبتدیان، اگر بخواهند به جای Beautiful Soup از این چارچوب ها استفاده کنند، ساخت اولین پروژه زمان زیادی می برد.
برای خراش دادن محتوای تگ عنوان در example.com با استفاده از Beautiful Soup، از کد زیر استفاده کنید:
url = "https://example.com/"
res = requests.get(url).text
soup = BeautifulSoup(res, 'html.parser')
title = soup.find("title").text
print(title)
برای دستیابی به نتایج مشابه با استفاده از سلنیوم، باید بنویسید:
url = "https://example.com"
driver = webdriver.Chrome("path/to/chromedriver")
driver.get(url)
title = driver.find_element(By.TAG_NAME, "title").get_attribute('text')
print(title)
ساختار فایل یک پروژه Scrapy از چندین فایل تشکیل شده است که به پیچیدگی آن می افزاید. کد زیر عنوان را از example.com حذف می کند:
import scrapy
class TitleSpider(scrapy.Spider):
name = 'title'
start_urls = ['https://example.com']
def parse(self, response):
yield {
'name': response.css('title'),
}
اگر میخواهید دادهها را از سرویسی که یک API رسمی ارائه میدهد استخراج کنید، ممکن است تصمیم عاقلانهای باشد که از API به جای توسعه یک وباسکریپر استفاده کنید.
2. سرعت تراشیدن و موازی سازی
از بین این سه، Scrapy برنده واضحی است که صحبت از سرعت به میان می آید. این به این دلیل است که به طور پیش فرض از موازی سازی پشتیبانی می کند. با استفاده از Scrapy، میتوانید چندین درخواست HTTP را به طور همزمان ارسال کنید، و وقتی اسکریپت کد HTML را برای اولین مجموعه درخواستها دانلود کرد، آماده ارسال یک دسته دیگر است.
با Beautiful Soup، میتوانید از کتابخانه رشتهای برای ارسال درخواستهای HTTP همزمان استفاده کنید، اما این کار راحت نیست و برای انجام این کار باید Multithreading را یاد بگیرید. در سلنیوم، رسیدن به موازی سازی بدون راه اندازی چندین نمونه مرورگر غیرممکن است.
اگر بخواهید این سه ابزار خراش دادن وب را از نظر سرعت رتبه بندی کنید، Scrapy سریع ترین است و بعد از آن Beautiful Soup و Selenium قرار دارند.
3. استفاده از حافظه
سلنیوم یک API اتوماسیون مرورگر است که کاربردهای خود را در زمینه خراش دادن وب پیدا کرده است. هنگامی که از سلنیوم برای خراش دادن یک وب سایت استفاده می کنید، یک نمونه مرورگر بدون هد ایجاد می کند که در پس زمینه اجرا می شود. این باعث می شود که سلنیوم در مقایسه با سوپ زیبا و اسکرپی، ابزاری با منابع فشرده باشد.
از آنجایی که دومی کاملاً در خط فرمان عمل می کند، از منابع سیستم کمتری استفاده می کند و عملکرد بهتری نسبت به سلنیوم ارائه می دهد.
4. الزامات وابستگی
Beautiful Soup مجموعه ای از ابزارهای تجزیه است که به شما کمک می کند داده ها را از فایل های HTML و XML استخراج کنید. با هیچ چیز دیگری ارسال می شود. شما باید از کتابخانه هایی مانند درخواست ها یا urllib برای ایجاد درخواست های HTTP، تجزیه کننده های داخلی برای تجزیه HTML/XML و کتابخانه های اضافی برای اجرای پروکسی ها یا پشتیبانی پایگاه داده استفاده کنید.
از طرف دیگر اسکرپی با کل شبانگ همراه است. شما ابزارهایی برای ارسال درخواست، تجزیه کد دانلود شده، انجام عملیات بر روی داده های استخراج شده و ذخیره اطلاعات خراشیده دریافت می کنید. میتوانید با استفاده از برنامههای افزودنی و میانافزار قابلیتهای دیگری را به Scrapy اضافه کنید، اما این کار بعداً انجام میشود.
با سلنیوم، درایور وب را برای مرورگری که میخواهید خودکار کنید دانلود میکنید. برای پیاده سازی سایر ویژگی ها مانند ذخیره سازی داده ها و پشتیبانی از پروکسی، به ماژول های شخص ثالث نیاز دارید.
5. کیفیت اسناد
به طور کلی، هر یک از مستندات پروژه به خوبی ساختار یافته است و هر روشی را با استفاده از مثال ها توصیف می کند. اما اثربخشی مستندات یک پروژه به شدت به خواننده نیز بستگی دارد.
مستندات Beautiful Soup برای مبتدیانی که با خراش دادن وب شروع می کنند بسیار بهتر است. بدون شک سلنیوم و اسکرپی مستندات دقیقی دارند، اما اصطلاحات تخصصی فنی می توانند بسیاری از تازه واردان را غافلگیر کنند.
اگر در زمینه مفاهیم و اصطلاحات برنامه نویسی باتجربه هستید، هر یک از این سه سند برای خواندن کامل خواهد بود.
6. پشتیبانی از برنامه های افزودنی و میان افزار
Scrapy توسعه پذیرترین چارچوب Python scraping وب است. از میانافزار، افزونهها، پروکسیها و موارد دیگر پشتیبانی میکند و به شما کمک میکند تا یک خزنده برای پروژههای مقیاس بزرگ توسعه دهید.
میتوانید با پیادهسازی میانافزارها در Scrapy، خزندههای بیخطر و کارآمد بنویسید، که اساساً قلابهایی هستند که عملکردهای سفارشی را به مکانیزم پیشفرض چارچوب اضافه میکنند. برای مثال، HttpErrorMiddleware از خطاهای HTTP مراقبت میکند تا عنکبوتها مجبور نباشند هنگام پردازش درخواستها با آنها برخورد کنند.
میانافزار و افزونهها انحصاری Scrapy هستند، اما میتوانید با Beautiful Soup و Selenium با استفاده از کتابخانههای Python اضافی به نتایج مشابهی برسید.
7. رندر جاوا اسکریپت
سلنیوم یک مورد استفاده دارد که در آن از دیگر کتابخانههای اسکراپینگ وب پیشی میگیرد و آن خراش دادن وبسایتهای دارای جاوا اسکریپت است. اگرچه می توانید عناصر جاوا اسکریپت را با استفاده از میان افزارهای Scrapy خراش دهید، گردش کار Selenium ساده ترین و راحت ترین از همه است.
شما از یک مرورگر برای بارگذاری یک وب سایت استفاده می کنید، با کلیک و فشار دادن دکمه با آن تعامل می کنید، و هنگامی که محتوایی را که باید روی صفحه نمایش دهید، دریافت کردید، آن را با استفاده از انتخابگرهای CSS و XPath سلنیوم استخراج کنید.
Beautiful Soup می تواند عناصر HTML را با استفاده از انتخابگرهای XPath یا CSS انتخاب کند. با این حال، عملکردی برای خراش دادن عناصر رندر شده با جاوا اسکریپت در یک صفحه وب ارائه نمی دهد.
اسکرپینگ وب با پایتون آسان شد
اینترنت پر از داده های خام است. اسکرپینگ وب به تبدیل این داده ها به اطلاعات معنی دار کمک می کند که می توان از آنها به خوبی استفاده کرد. اگر میخواهید یک وبسایت را با جاوا اسکریپت پاک کنید یا قبل از استخراج دادهها، نیاز به فعال کردن برخی از عناصر روی صفحهنمایش دارید، احتمالاً سلنیوم مطمئنترین شرط شما است.
Scrapy یک چارچوب تمام عیار خراش دادن وب برای همه نیازهای شما است، چه بخواهید یک خزنده کوچک بنویسید یا یک اسکراپر در مقیاس بزرگ که به طور مکرر اینترنت را برای داده های به روز می خزند.
اگر مبتدی هستید یا نیاز به ساخت سریع اسکراپر دارید، می توانید از سوپ زیبا استفاده کنید. با هر چارچوب یا کتابخانه ای که می روید، شروع یادگیری وب اسکرپینگ با پایتون آسان است. را