مروری بر 5 کتابخانه برتر و زمان استفاده از هر یک از آنها
در زندگی امروزی در اطراف خود با دادههای مختلف احاطه شدهایم. توانایی جمعآوری و استفاده از این دادهها در پروژهها یک مهارت ضروری برای هر دانشمند داده است.
آموزشهای آنلاین زیادی در مورد نحوه استفاده از کتابخانههای خاص پایتون برای جمعآوری دادههای آنلاین وجود دارد، اما به ندرت میتوان بهترین کتابخانه را برای برنامه خاص خود پیدا کرد.
پایتون کتابخانههای متنوعی مانند Scrapy ،Beautiful Soup ،Requests ،Urllib و Selenium را برای وب اسکرپینگ (Web Scraping) ارائه داده است. البته کتابخانههای بیشتری وجود دارد و با توجه به محبوبیت پایتون به زودی تعداد بیشتری هم منتشر خواهد شد.
در این مقاله، به معرفی 5 کتابخانه پرداختیم. نمای کلی هر کتابخانه، مثال به همراه کد و زمان استفاده برای هر یک از آنها ارائه شده است.
1- Scrapy
Scrapy یک فریمورک متنباز و یکی از محبوبترین کتابخانههای حال حاضر پایتون برای وب اسکرپینگ است. Scrapy فقط یک کتابخانه نیست، یک ابزار کامل است که میتوانید از آن برای نظارت، استخراج داده، آزمایش خودکار و سیستماتیک در سراسر وب استفاده کنید.
Scrapy در ابتدا برای ایجاد Web Spiderها طراحی شد که میتوانند به تنهایی در وب بخزند.
از نظر پردازنده و حافظه در مقایسه با سایر روشهای پایتون برای وب اسکرپینگ بسیار موثر است. نکته منفی استفاده از Scrapy این است که نصب آن و کار صحیح روی دستگاه میتواند کمی دردسرساز باشد.
هم رویش منتشر کرده است:
آموزش scrapy پروژه محور ــ کتابخانه وب اسکرپینگ پایتون
نمای کلی و نصب
برای شروع کار با Scrapy، باید از Python 3 یا بالاتر استفاده کنید. برای نصب Scrapy، میتوانید دستور زیر را در ترمینال سیستم بنویسید.
pip install scrapy
هنگامی که Scrapy با موفقیت نصب شد، میتوانید Shell یا پوسته Scrapy را با تایپ کردن به صورت زیر اجرا کنید:
scrapy shell
میتوانید از پوسته Scrapy برای اجرای دستورات ساده استفاده کنید، به عنوان مثال، میتوانید محتوای HTML یک وبسایت را با استفاده از تابع fetch واکشی کنید. فرض کنید میخواهیم وبسایت همرویش را واکشی کنیم.
fetch("https://hamruyesh.com/")
سپس میتوانید از تابع view برای باز کردن این فایل HTML در مرورگر پیشفرض خود استفاده کنید. یا فقط میتوانید کد HTML صفحه را چاپ کنید.
view(response)
print(response.text)
شاید اطلاعات خاصی از متن HTML بخواهید. این کار با استفاده از CSS Selectors انجام میشود.
قبل از شروع باید ساختار صفحهوب موردنظر خود را بررسی کنید تا بتوانید از انتخاب کننده (Selector) صحیح CSS استفاده کنید.
چه زمانی از Scarpy استفاده کنیم؟
بهترین مورد برای استفاده از Scrapy زمانی است که بخواهید یک وبسایت در مقیاس بزرگ را اسکرپ کنید یا چندین آزمایش را خودکار کنید. Scrapy بسیار ساختاریافته است، و این امکان را میدهد انعطافپذیری و سازگاری بیشتری با برنامههای خاص داشته باشید. علاوه بر این، نحوه سازماندهی پروژههای Scrapy، نگهداری و گسترش آن را آسانتر میکند.
پیشنهاد میکنم که اگر پروژه کوچکی دارید یا میخواهید یک یا چند صفحهوب را اسکرپ کنید، از استفاده از Scrapy اجتناب کنید. در این مورد، Scarpy چیزها را بیش از حد پیچیده میکند و مزیتی نخواهد داشت.
2- requests
requests سادهترین کتابخانه HTTP است که میتوانید از آن استفاده کنید. requests به کاربر اجازه میدهد تا درخواستها را به سرور HTTP ارسال کرده و پاسخ را در قالب HTML یا JSON دریافت کند. همچنین به کاربر اجازه میدهد تا درخواستهای POST را برای اصلاح یا افزودن محتوا به سرور ارسال کند.
requests قدرت واقعی را با یک API انتزاعی سطح بالا که به خوبی طراحی شده است، نشان میدهد.
نمای کلی و نصب
requests اغلب در کتابخانه داخلی پایتون (کتابخانه استاندارد پایتون) گنجانده شده است. با این حال، اگر به دلایلی نمیتوانید آن را import کنید، میتوانید کتابخانه را به راحتی با استفاده از pip نصب کنید.
pip install requests
میتوانید از requests برای واکشی و تمیزکردن پاسخهای منظم API استفاده کنید. به عنوان مثال، فرض کنید میخواهیم یک فیلم را در پایگاهداده OMDB جستجو کنیم. requests اجازه میدهد نام یک فیلم را به API ارسال کرده، پاسخ را پاک کنیم و در کمتر از 10 خط کد البته بدون درنظرگرفتن کامنتها، چاپ کنیم.
import requests
#API URL
url = "http://www.omdbapi.com/?i=tt3896198&apikey=bd51a16a"
#Get a movie to search for
search = input("Enter movie name:") #title of movie
#Obtain a response
response = requests.get(url, params = {"s":search})
#Clean up the JSON response for title and year of production
Data = response.json()["Search"]
for i in range(len(Data)):
print(Data[i]["Title"])
print(Data[i]["Year"])
print("==========================")
چه موقع از requests استفاده کنیم؟
requests هنگام شروع کار با وب اسکرپینگ، و تماس API tp با آن، انتخابی ایدهآل است. ساده است و نیازی به تمرین زیاد برای تسلط ندارد. همچنین requests نیازی ندارد که رشتههای پرسوجو را به صورت دستی به آدرسهای اینترنتی خود اضافه کنید. برای این کتابخانه یک اسناد بسیار خوب نوشته شده است و از تمام API با متدهای آن (PUT ،GET ،DELETE و POST ) پشتیبانی میکند.
در صورتی که صفحهوب موردنظر شما دارای محتوای JavaScriptp است، از requests خودداری کنید، چون پاسخها ممکن است اطلاعات صحیح را تجزیه نکنند.
3- urllib
Urllib یک کتابخانه پایتون است که به توسعهدهنده اجازه میدهد اطلاعات پروتکلهای HTTP یا FTP را باز و تجزیه کند. Urllib برخی از قابلیتها را برای رسیدگی و بازکردن آدرسها ارائه میدهد، یعنی:
urllib.request : آدرسهای اینترنتی را باز کرده و میخواند.
urllib.error: موارد استثنائی را که توسط urllib.request مطرح شده است، میگیرد.
urllib.parse: url ها را تجزیه میکند.
urllib.robotparser: فایلهای robots.txt را تجزیه میکند.
نمای کلی و نصب
نیازی به نصب Urllib ندارید چون بخشی از کتابخانه داخلی پایتون است. با این حال، در برخی موارد نادر، ممکن است Urllib را در بسته پایتون خود پیدا نکنید. البته میتوانید به سادگی آن را با استفاده از pip نصب کنید.
pip install urllib
میتوانید از Urllib برای کاوش و تجزیه وبسایتها استفاده کنید. با این حال، عملکرد چندانی ارائه نمیدهد.
import urllib.request
import urllib.robotparser as rob
#The URL
url = " https://hamruyesh.com/product-category/multi-part-courses/ "
#To open a URL
urllib.request.urlopen(url)
#To obtain the source code of the website
request_url = urllib.request.urlopen(url)
print(request_url.read())
#Reading thr bot file
bot = rob.RobotFileParser()
#Check where the website's robot.txt file is
url_rob = url+'/robot.txt'
bot_loc = bot.set_url(url_rob)
print(bot_loc)
#Read the file
bot_content = bot.read()
print(bot_content)
#Crawl the website using the bot
web_crawl = bot.can_fetch('*', url)
print(web_crawl)
چه زمانی از Urllib استفاده کنیم؟
Urllib کمی پیچیدهتر از Requests است. اگر میخواهید کنترل بهتری بر درخواستهای خود داشته باشید، Urllib راهی است که باید طی کنید.
4- Beautiful Soup
Beautiful Soup یک کتابخانه پایتون است که برای استخراج اطلاعات از فایلهای XML و HTML استفاده میشود. Beautiful Soup یک کتابخانه تجزیهکننده محسوب میشود. تجزیه و تحلیل به برنامهنویس کمک میکند تا از یک فایل HTML داده بدست آورد. اگر تجزیهکنندهها وجود نداشتند، احتمالاً از Regex برای مطابقت و بدست آوردن الگوهای متن استفاده میکردیم، که کارآمد یا قابل حفظ نیست.
خوشبختانه، نیازی به این کار نداریم، زیرا تجزیه کننده داریم!
یکی از نقاط قوت Beautiful Soup توانایی تشخیص کدگذاری صفحه و در نتیجه دریافت اطلاعات دقیقتر از متن HTML است. یکی دیگر از مزایای Beautiful Soup سادگی و سهولت آن است.
هم رویش منتشر کرده است:
آموزش وب اسکریپینگ با پایتون از صفر ــ بسته مقدماتی
نمای کلی و نصب
نصب Beautiful Soup بسیار ساده و مستقیم است. تنها کاری که باید انجام دهید این است که موارد زیر را در ترمینال تایپ کنید.
pip install beautifulsoup4
Beautiful Soup تجزیهکنندهای است که بهکمک آن ابتدا باید HTML را دریافت کرده و سپس از Beautiful Soup برای استخراج اطلاعات مورد نیاز خود از آن استفاده کنیم. میتوانیم از Urllib یا Requests برای دریافت متن HTML از یک صفحهوب و سپس برای تمیزکردن آن از Beautiful Soup استفاده کنیم.
با بازگشت به صفحهوب قبلی، میتوانیم از Requests برای واکشی منبع HTML صفحهوب استفاده کنیم و سپس از Beautiful Soup برای دریافت تمام پیوندهای داخل <a> در صفحه استفاده کنیم. میتوان این کار را با چند خط کد انجام داد.
import requests
from bs4 import BeautifulSoup
#fetch link
page = requests.get('http://books.toscrape.com/')
#Get HTML content
soup = BeautifulSoup(page.text, 'html.parser')
#Save all href links in a list
links_list = []
links = soup.find_all('a')
for link in links:
fullLink = link.get('href')
links_list.append(fullLink)
چه موقع از Beautiful Soup استفاده کنیم؟
اگر به تازگی شروع به کار با وبسایتها با پایتون کردهاید، Beautiful Soup بهترین انتخاب است. علاوه بر این، اگر اسنادی که میخواهید اسکن کنید ساختار ندارند، Beautiful Soup گزینه مناسبی برای استفاده خواهد بود.
اگر در حال ساخت یک پروژه بزرگ هستید، Beautiful Soup گزینه عاقلانهای نخواهد بود. پروژههای Beautiful Soup انعطافپذیر نیستند و نگهداری آنها با افزایش اندازه پروژه دشوار است.
5- Selenium
سلنیوم یک ابزار متنباز مبتنی بر وب و یک درایور وب است، به این معنی که میتوانید از آن برای باز کردن یک صفحه وب، کلیک بر روی دکمه و دریافت نتایج استفاده کنید. یک ابزار قوی است که عمدتا در جاوا برای خودکار کردن آزمایشات نوشته شده است.
علیرغم قدرت آن، سلنیوم یک ابزار مبتدی است که نیازی به منحنی یادگیری تند ندارد. همچنین به کد اجازه میدهد تا رفتار انسان را تقلید کند، که در آزمایش خودکار ضروری است.
نمای کلی و نصب
برای نصب سلنیوم، میتوانید از دستور pip در ترمینال استفاده کنید.
pip install selenium
اگر میخواهید قدرت کامل سلنیوم را به دست آورید، باید یک Selenium WebDriver را نصب کنید تا مرورگر را به صورت یک کاربر واقعی، به صورت محلی یا در دستگاههای از راهدور، به صورت محلی هدایت کنید.
میتوانید از سلنیوم برای ورود خودکار به توییتر یا فیس بوک یا هر سایتی، استفاده کنید.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
#Data needed to login
user_name = "email@email.email"
password = "notAveryGoodPW"
#Create a Chrome driver
driver = webdriver.Chrome()
driver.get("https://www.twitter.com")
#Use the data to login
element = driver.find_element_by_id("email")
element.send_keys(user_name)
element = driver.find_element_by_id("pass")
element.send_keys(password)
#Login to Twitter
element.send_keys(Keys.RETURN)
element.close()
چه زمانی از سلنیوم استفاده کنیم؟
اگر در حوزه Scraping وب تازهکار هستید، اما به یک ابزار قدرتمند قابل توسعه و منعطف نیاز دارید، سلنیوم بهترین انتخاب است. همچنین، اگر میخواهید چند صفحه را اسکرپ دهید، یک انتخاب عالی است. اطلاعات مورد نیاز هم در جاوا اسکریپت وجود دارد.
استفاده از کتابخانه مناسب برای پروژه، زمان و تلاش زیادی را برای شما ذخیره میکند و میتواند برای موفقیت پروژه بسیار مهم باشد.
به عنوان یک دانشمند داده، احتمالاً در طول کار با همه این کتابخانهها و شاید بیشتر از آن برخورد میکنید، که تنها راه شناخت، مزایا و معایب هر یک از آنهاست. با انجام این کار، حس ششم را پرورش میدهید تا شما را در انتخاب و استفاده از بهترین کتابخانه در پروژههای آینده راهنمایی کند.
کلیدواژگان
بهترین کتابخانه وب اسکریپینگ | کتابخانه وب اسکریپینگ | بهترین کتابخانه وب اسکرپینگ | کتابخانه وب اسکرپینگ | کتابخانه های وب اسکریپینگ | کتابخانه های وب اسکرپینگ | کتابخانه های وب اسکریپینگ را نام ببرید | اسکریپی چیست | کتابخانه اسکریپی چیست | scrapy چیست | کتابخانه scrapy چیست | سلنیوم چیست | کتابخانه سلنیوم چیست | Selenium چیست | درباره کتابخانه Selenium
منبع
choose-the-best-python-web-scraping-library-for-your-application
1 دیدگاه برای “بهترین کتابخانه وب اسکریپینگ (Web Scraping) ”
عالی بود فقط کاش روی کد هایی که نوشتین بیشتر توضیح میدادیم