در این آموزش، به بررسی کتابخانهها و ماژولهای مختلف پایتون که برای وب اسکرپینگ با پایتون استفاده میشوند میپردازیم و دلیل اینکه چرا پایتون ۳ انتخابی برتر برای این کار است را بررسی خواهیم کرد. همچنین یاد میگیرید چگونه از ابزارهای قدرتمندی مانند BeautifulSoup ،Scrapy و Selenium برای وب اسکرپینگ با پایتون هر وبسایتی استفاده کنید.
مقدمه
در دنیای دیجیتال امروز، دادهها کلید دسترسی به بینشهای ارزشمند هستند و بخش زیادی از این دادهها در وب موجود است. اما چگونه میتوان حجم زیادی از دادهها را بهطور مؤثر از وبسایتها جمعآوری کرد؟ اینجاست که وب اسکرپینگ با پایتون وارد میدان میشود. وب وب اسکرپینگ با پایتون، فرآیند استخراج دادهها از وبسایتها، بهعنوان روشی قدرتمند برای جمعآوری اطلاعات از گستره وسیع اینترنت شناخته شده است.
بستهها و ابزارهای ضروری برای وب اسکرپینگ با پایتون
آخرین نسخه پایتون مجموعهای غنی از ابزارها و کتابخانهها را ارائه میدهد که بهطور خاص برای وب اسکرپینگ با پایتون طراحی شدهاند و جمعآوری دادهها از وب را سادهتر و کارآمدتر از همیشه میکنند. در این آموزش، کتابخانهها و ماژولهای مختلف پایتون را که معمولاً برای وب اسکرپینگ با پایتون استفاده میشوند، بررسی میکنیم و به این میپردازیم که چرا Python 3 انتخاب ترجیحی برای این کار است. همراه با این، نحوه استفاده از ابزارهای قدرتمند مانند BeautifulSoup ،Scrapy و Selenium را برای خراش دادن هر وب سایتی نیز بررسی خواهید کرد.
ماژول Requests در پایتون
کتابخانه requests برای ارسال درخواستهای HTTP به یک URL مشخص و دریافت پاسخ استفاده میشود. این کتابخانه در پایتون امکانات داخلی برای مدیریت درخواست و پاسخ فراهم میکند.
pip install requests
کتابخانه requests برای ارسال درخواستهای HTTP به یک URL مشخص و دریافت پاسخ استفاده میشود. این کتابخانه در پایتون امکانات داخلی برای مدیریت درخواست و پاسخ فراهم میکند.
کتابخانه BeautifulSoup
کتابخانه Beautiful Soup چندین روش ساده و عبارات پایتونپسند برای هدایت، جستجو و تغییر درخت تجزیه ارائه میدهد؛ ابزاری برای مطالعه اسناد و استخراج اطلاعات موردنیاز. برای مستندسازی یک برنامه، به کد زیادی نیاز نیست. Beautiful Soup به طور خودکار رکوردهای ورودی را به Unicode و فرمهای خروجی را به UTF-8 تبدیل میکند. نیازی نیست به کدگذاریها فکر کنی، مگر اینکه سند کدگذاری تعریف نکرده باشد و Beautiful Soup نتواند آن را شناسایی کند. در این صورت، تنها کاری که باید انجام دهی، انتخاب کدگذاری اصلی است.
Beautiful Soup بر اساس پارسرهای معروف پایتون مانند LXML و HTML کار میکند و به تو این امکان را میدهد که استراتژیهای مختلف تجزیه را امتحان کرده یا بین سرعت و انعطافپذیری تعادل برقرار کنی.
pip install beautifulsoup4
مثال
ایمپورت کتابخانهها: کد، کتابخانه requests را برای ارسال درخواستهای HTTP و کلاس BeautifulSoup را از کتابخانه bs4 برای تجزیه HTML ایمپورت میکند.
ارسال درخواست GET: یک درخواست GET به آدرس https://www.programstore.ir/python-programming-language/ ارسال کرده و پاسخ را در متغیر r ذخیره میکند.
بررسی کد وضعیت: کد وضعیت پاسخ را چاپ میکند که معمولاً ۲۰۰ به معنای موفقیت است.
تجزیه HTML: محتوای HTML پاسخ با استفاده از BeautifulSoup تجزیه شده و در متغیر soup ذخیره میشود.
چاپ نسخه مرتب HTML: نسخه مرتبشده محتوای تجزیهشده HTML برای خوانایی و تحلیل چاپ میشود.
پیدا کردن عناصر بر اساس کلاس
حالا میخواهیم برخی دادههای مفید را از محتوای HTML استخراج کنیم. شی soup تمام دادهها را در یک ساختار تو در تو نگهداری میکند که میتوان آنها را بهصورت برنامهنویسی استخراج کرد. وبسایتی که قصد داریم آن را اسکرپ کنیم، حاوی متن زیادی است، بنابراین حالا میخواهیم تمام این محتواها را استخراج کنیم.
در تصویر بالا، میبینیم که تمام محتوای صفحه در داخل یک <div> با کلاس entry-content قرار دارد. ما از متد find استفاده خواهیم کرد. این متد برای پیدا کردن تگ داده شده با ویژگی داده شده استفاده میشود. در مورد ما، این متد تمام <div>هایی که کلاس آنها entry-content است را پیدا میکند.
ما میبینیم که محتوای صفحه در داخل تگ <p> قرار دارد. حالا باید تمام تگهای <p> موجود در این کلاس را پیدا کنیم. برای این کار میتوانیم از متد find_all در BeautifulSoup استفاده کنیم.
ماژول Selenium در پایتون
Selenium یک ماژول محبوب پایتون است که برای اتوماسیون مرورگرهای وب استفاده میشود. این ابزار به توسعهدهندگان اجازه میدهد تا مرورگرهای وب را بهصورت برنامهنویسی کنترل کنند و کارهایی مانند اسکرپینگ وب، تستهای خودکار و تعامل با برنامههای وب را انجام دهند. Selenium از مرورگرهای مختلفی از جمله Chrome، Firefox، Safari و Edge پشتیبانی میکند که آن را به ابزاری چندمنظوره برای اتوماسیون مرورگر تبدیل میکند.
مثال ۱: برای Firefox
در این مثال خاص، ما مرورگر را به صفحه جستجوی گوگل با پارامتر جستجو «ProgramStore» هدایت میکنیم. مرورگر این صفحه را بارگذاری میکند و سپس میتوانیم با استفاده از Selenium بهصورت برنامهنویسی با آن تعامل کنیم. این تعامل میتواند شامل کارهایی مانند استخراج نتایج جستجو، کلیک بر روی لینکها یا اسکرپ کردن محتوای خاص از صفحه باشد.
# import webdriver from selenium import webdriver # create webdriver object driver = webdriver.Firefox() # get google.co.in driver.get("https://google.co.in / search?q = ProgramStore")
خروجی:
مثال ۲: برای Chrome
- ما ماژول Webdriver را از کتابخانه Selenium ایمپورت میکنیم.
- مسیر فایل اجرایی وبدرایور را مشخص میکنیم. برای مرورگر خود باید درایور مناسب را دانلود کرده و مسیر آن را وارد کنید. در این مثال، از درایور Chrome استفاده میکنیم.
- یک نمونه جدید از مرورگر وب با استفاده از ()Webdriver.Chrome ایجاد کرده و مسیر فایل اجرایی درایور Chrome را به عنوان آرگومان به آن میدهیم.
- با استفاده از متد ()get مرورگر را به یک صفحه وب هدایت میکنیم و URL صفحه را به آن میدهیم.
- اطلاعاتی از صفحه وب استخراج میکنیم با استفاده از متدهای مختلفی که Selenium ارائه میدهد. در این مثال، عنوان صفحه را با استفاده از ویژگی title شی مرورگر دریافت میکنیم.
- در نهایت، مرورگر را با استفاده از متد ()quit میبندیم.
# importing necessary packages from selenium import webdriver from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager # for holding the resultant list element_list = [] for page in range(1, 3, 1): page_url = "https://webscraper.io/test-sites/e-commerce/static/computers/laptops?page=" + str(page) driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get(page_url) title = driver.find_elements(By.CLASS_NAME, "title") price = driver.find_elements(By.CLASS_NAME, "price") description = driver.find_elements(By.CLASS_NAME, "description") rating = driver.find_elements(By.CLASS_NAME, "ratings") for i in range(len(title)): element_list.append([title[i].text, price[i].text, description[i].text, rating[i].text]) print(element_list) #closing the driver driver.close()
خروجی:
ماژول lxml در پایتون
ماژول lxml در پایتون یک کتابخانه قدرتمند برای پردازش اسناد XML و HTML است. این کتابخانه امکانات قدرتمندی برای تجزیه XML و HTML فراهم میکند و یک API ساده و قابل استفاده برای پایتون ارائه میدهد. lxml به دلیل سرعت، انعطافپذیری و سهولت استفاده معمولاً در اسکرپینگ وب با پایتون مورد استفاده قرار میگیرد.
pip installieren lxml
مثال
در اینجا یک مثال ساده است که نشان میدهد چگونه ماژول lxml برای اسکرپینگ وب با پایتون استفاده میشود:
- ما ماژول HTML را از lxml همراه با ماژول requests برای ارسال درخواستهای HTTP وارد میکنیم.
- URL وبسایتی که میخواهیم اسکرپ کنیم را تعریف میکنیم.
- با استفاده از تابع ()requests.get یک درخواست HTTP-GET به وبسایت ارسال کرده و محتوای HTML صفحه را دریافت میکنیم.
- محتوای HTML را با استفاده از تابع ()html.fromstring از lxml تجزیه میکنیم که یک درخت عناصر HTML برمیگرداند.
- از عبارات XPath برای استخراج عناصر خاص از درخت HTML استفاده میکنیم. در این مورد، متن محتوای تمام عناصر <a> (لینکها) را از صفحه استخراج میکنیم.
- بر روی عناوین لینکهای استخراجشده تکرار کرده و آنها را چاپ میکنیم.
from lxml import html import requests # Define the URL of the website to scrape url = 'https://example.com' # Send an HTTP request to the website and retrieve the HTML content response = requests.get(url) # Parse the HTML content using lxml tree = html.fromstring(response.content) # Extract specific elements from the HTML tree using XPath # For example, let's extract the titles of all the links on the page link_titles = tree.xpath('//a/text()') # Print the extracted link titles for title in link_titles: print(title)
خروجی:
More information...
ماژول Urllib در پایتون
ماژول urllib در پایتون یک کتابخانه داخلی است که توابعی برای کار با URLها فراهم میکند. این ماژول به شما این امکان را میدهد که با صفحات وب تعامل داشته باشید، URLها را دریافت کنید (Uniform Resource Locators)، آنها را باز کرده و دادهها را از آنها بخوانید و سایر وظایف مربوط به URL مانند رمزگذاری و تجزیه را انجام دهید. urllib یک بسته است که چندین ماژول برای کار با URLها را جمعآوری میکند، مانند:
- urllib.request برای باز کردن و خواندن.
- urllib.parse برای تجزیه URLها.
- urllib.error برای استثناهایی که برانگیخته میشود.
- urllib.robotparser برای تجزیه فایلهای robot.txt.
اگر urllib در محیط شما موجود نیست، کد زیر را برای نصب آن اجرا کنید.
pip install urllib3
مثال
در اینجا یک مثال ساده است که نشان میدهد چگونه از ماژول urllib برای دریافت محتوای یک صفحه وب استفاده کنیم:
- URL صفحه وبی که میخواهیم محتوای آن را دریافت کنیم، تعریف میکنیم.
- از تابع ()urllib.request.urlopen برای باز کردن URL و دریافت شیء پاسخ استفاده میکنیم.
- محتوای شیء پاسخ را با استفاده از متد ()read میخوانیم.
- چون محتوا به صورت بایتها برگردانده میشود، آن را با استفاده از متد ()decode و کدگذاری utf-8 به رشته تبدیل میکنیم.
- در نهایت، محتوای HTML صفحه وب را چاپ میکنیم.
import urllib.request # URL of the web page to fetch url = 'https://www.example.com' try: # Open the URL and read its content response = urllib.request.urlopen(url) # Read the content of the response data = response.read() # Decode the data (if it's in bytes) to a string html_content = data.decode('utf-8') # Print the HTML content of the web page print(html_content) except Exception as e: print("Error fetching URL:", e)
خروجی:
ماژول PyAutoGUI در پایتون
ماژول Pyautogui در پایتون یک کتابخانه اتوماسیون GUI است که قابلیت کنترل ماوس و کیبورد را برای اتوماسیون وظایف فراهم میکند. اگرچه این ماژول به طور خاص برای اسکرپینگ وب طراحی نشده است، اما میتوان از آن همراه با کتابخانههای اسکرپینگ وب دیگر مانند Selenium برای تعامل با صفحات وبی که به ورودی کاربر نیاز دارند یا شبیهسازی اقدامات انسانی استفاده کرد.
pip3 install pyautogui
مثال: در این مثال، از Pyautogui برای انجام اسکرول و گرفتن یک اسکرینشات از صفحه نتایج جستجو استفاده میشود. این نتایج از طریق تایپ یک پرسوجو در فیلد ورودی جستجو و کلیک روی دکمه جستجو با استفاده از Selenium به دست آمده است.
import pyautogui # moves to (519,1060) in 1 sec pyautogui.moveTo(519, 1060, duration = 1) # simulates a click at the present # mouse position pyautogui.click() # moves to (1717,352) in 1 sec pyautogui.moveTo(1717, 352, duration = 1) # simulates a click at the present # mouse position pyautogui.click()
خروجی:
ماژول Schedule در پایتون
ماژول schedule در پایتون یک کتابخانه ساده است که به شما این امکان را میدهد که توابع پایتون را برای اجرا در فواصل زمانی مشخص برنامهریزی کنید. این ابزار بهویژه در اسکرپینگ وب پایتون مفید است زمانی که نیاز دارید به طور منظم دادهها را از یک وبسایت در فواصل زمانی از پیش تعیینشده، مانند هر ساعت، روزانه یا هفتگی، جمعآوری کنید.
مثال
- ما ماژولهای مورد نیاز schedule، time، requests و BeautifulSoup از بسته bs4 را وارد میکنیم.
- یک تابع به نام ()scrape_data تعریف میکنیم که وظیفه اسکرپینگ وب را انجام میدهد. در این تابع، یک درخواست GET به وبسایتی ارسال میکنیم (آدرس https://example.com را با URL وبسایتی که میخواهید اسکرپ کنید جایگزین کنید)، محتوای HTML را با استفاده از BeautifulSoup تجزیه میکنیم، دادههای مورد نظر را استخراج کرده و چاپ میکنیم.
- تابع ()scrape_data را برای اجرا هر ساعت با استفاده از schedule.every().hour.do(scrape_data) برنامهریزی میکنیم.
- وارد یک حلقه اصلی میشویم که به طور مداوم وظایف برنامهریزیشده معلق را با استفاده از ()schedule.run_pending بررسی میکند و بین هر تکرار یک ثانیه میخوابد تا از مصرف بیش از حد CPU جلوگیری شود.
import schedule import time def func(): print("ProgramStore") schedule.every(1).minutes.do(func) while True: schedule.run_pending() time.sleep(1)
خروجی:
ProgramStore ProgramStore ProgramStore
چرا Python3 برای اسکرپینگ وب؟
محبوبیت وب اسکرپینگ با پایتون به چند عامل اصلی برمیگردد:
- سهولت استفاده
سینتکس ساده و خوانای پایتون باعث میشود کدنویسی آسان و قابل درک باشد، حتی برای مبتدیان. این سادگی فرآیند توسعه را سریعتر کرده و منحنی یادگیری برای وظایف اسکرپینگ وب را کاهش میدهد. - اکوسیستم غنی
پایتون دارای اکوسیستمی گسترده از کتابخانهها و فریمورکهایی است که برای اسکرپینگ وب طراحی شدهاند. کتابخانههایی مانند BeautifulSoup، Scrapy، و Requests فرآیند تجزیه HTML را ساده کرده و استخراج دادهها را بسیار راحت میکنند. - انعطافپذیری
پایتون یک زبان همهکاره است که میتواند برای طیف وسیعی از وظایف فراتر از اسکرپینگ وب استفاده شود. این انعطافپذیری به توسعهدهندگان اجازه میدهد که اسکرپینگ وب را بهصورت یکپارچه با پروژههای بزرگتر مانند تحلیل دادهها، یادگیری ماشین، یا توسعه وب ترکیب کنند. - پشتیبانی جامعه
پایتون یک جامعه بزرگ و فعال از توسعهدهندگان دارد که به کتابخانههای آن کمک کرده و از طریق انجمنها، آموزشها و مستندات پشتیبانی ارائه میدهند. این منابع فراوان تضمین میکنند که توسعهدهندگان در هنگام برخورد با چالشهای اسکرپینگ وب به کمک و راهنمایی دسترسی داشته باشند.
نتیجهگیری
این آموزش، اصول استفاده وب اسکرپینگ با پایتون را نشان داد. با ابزارهایی که بررسی کردیم، میتوانید به سرعت و به آسانی دادهها را از اینترنت جمعآوری کنید. چه این دادهها را برای یک پروژه، تحقیقات، یا تفریح بخواهید، پایتون این امکان را برای شما فراهم میکند. به یاد داشته باشید که همیشه به صورت مسئولانه دادهها را اسکرپ کنید و قوانین وبسایتها را رعایت کنید. اگر مشتاق یادگیری بیشتر در مورد پایتون و وب اسکرپینگ با پایتون هستید، دورههای آموزشی پایتون منبع عالی برای درک عمیقتر و بهبود مهارتهایتان هستند، در حالی که از کشف قدرت پایتون لذت میبرید.