آموزش وب اسکرپینگ با پایتون — با مثال های کاربردی

عکس شاخص آموزش وب اسکرپینگ با پایتون

در این آموزش، به بررسی کتابخانه‌ها و ماژول‌های مختلف پایتون که برای وب اسکرپینگ با پایتون استفاده می‌شوند می‌پردازیم و دلیل اینکه چرا پایتون ۳ انتخابی برتر برای این کار است را بررسی خواهیم کرد. همچنین یاد می‌گیرید چگونه از ابزارهای قدرتمندی مانند 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

  1. ما ماژول Webdriver را از کتابخانه Selenium ایمپورت می‌کنیم.
  2. مسیر فایل اجرایی وب‌درایور را مشخص می‌کنیم. برای مرورگر خود باید درایور مناسب را دانلود کرده و مسیر آن را وارد کنید. در این مثال، از درایور Chrome استفاده می‌کنیم.
  3. یک نمونه جدید از مرورگر وب با استفاده از ()Webdriver.Chrome  ایجاد کرده و مسیر فایل اجرایی درایور Chrome را به عنوان آرگومان به آن می‌دهیم.
  4. با استفاده از متد ()get مرورگر را به یک صفحه وب هدایت می‌کنیم و URL صفحه را به آن می‌دهیم.
  5. اطلاعاتی از صفحه وب استخراج می‌کنیم با استفاده از متدهای مختلفی که Selenium ارائه می‌دهد. در این مثال، عنوان صفحه را با استفاده از ویژگی title شی مرورگر دریافت می‌کنیم.
  6. در نهایت، مرورگر را با استفاده از متد ()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 برای اسکرپینگ وب با پایتون استفاده می‌شود:

  1. ما ماژول HTML را از lxml همراه با ماژول requests برای ارسال درخواست‌های HTTP وارد می‌کنیم.
  2. URL وب‌سایتی که می‌خواهیم اسکرپ کنیم را تعریف می‌کنیم.
  3. با استفاده از تابع ()requests.get یک درخواست HTTP-GET به وب‌سایت ارسال کرده و محتوای HTML صفحه را دریافت می‌کنیم.
  4. محتوای HTML را با استفاده از تابع ()html.fromstring از lxml تجزیه می‌کنیم که یک درخت عناصر HTML برمی‌گرداند.
  5. از عبارات XPath برای استخراج عناصر خاص از درخت HTML استفاده می‌کنیم. در این مورد، متن محتوای تمام عناصر <a> (لینک‌ها) را از صفحه استخراج می‌کنیم.
  6. بر روی عناوین لینک‌های استخراج‌شده تکرار کرده و آن‌ها را چاپ می‌کنیم.
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 در پایتون یک کتابخانه ساده است که به شما این امکان را می‌دهد که توابع پایتون را برای اجرا در فواصل زمانی مشخص برنامه‌ریزی کنید. این ابزار به‌ویژه در اسکرپینگ وب پایتون مفید است زمانی که نیاز دارید به طور منظم داده‌ها را از یک وب‌سایت در فواصل زمانی از پیش تعیین‌شده، مانند هر ساعت، روزانه یا هفتگی، جمع‌آوری کنید.

مثال

  1. ما ماژول‌های مورد نیاز schedule، time، requests و BeautifulSoup از بسته bs4 را وارد می‌کنیم.
  2. یک تابع به نام ()scrape_data تعریف می‌کنیم که وظیفه اسکرپینگ وب را انجام می‌دهد. در این تابع، یک درخواست GET به وب‌سایتی ارسال می‌کنیم (آدرس https://example.com را با URL وب‌سایتی که می‌خواهید اسکرپ کنید جایگزین کنید)، محتوای HTML را با استفاده از BeautifulSoup تجزیه می‌کنیم، داده‌های مورد نظر را استخراج کرده و چاپ می‌کنیم.
  3. تابع ()scrape_data را برای اجرا هر ساعت با استفاده از schedule.every().hour.do(scrape_data) برنامه‌ریزی می‌کنیم.
  4. وارد یک حلقه اصلی می‌شویم که به طور مداوم وظایف برنامه‌ریزی‌شده معلق را با استفاده از ()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 برای اسکرپینگ وب؟

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

  1. سهولت استفاده
    سینتکس ساده و خوانای پایتون باعث می‌شود کدنویسی آسان و قابل درک باشد، حتی برای مبتدیان. این سادگی فرآیند توسعه را سریع‌تر کرده و منحنی یادگیری برای وظایف اسکرپینگ وب را کاهش می‌دهد.
  2. اکوسیستم غنی
    پایتون دارای اکوسیستمی گسترده از کتابخانه‌ها و فریم‌ورک‌هایی است که برای اسکرپینگ وب طراحی شده‌اند. کتابخانه‌هایی مانند BeautifulSoup، Scrapy، و Requests فرآیند تجزیه HTML را ساده کرده و استخراج داده‌ها را بسیار راحت می‌کنند.
  3. انعطاف‌پذیری
    پایتون یک زبان همه‌کاره است که می‌تواند برای طیف وسیعی از وظایف فراتر از اسکرپینگ وب استفاده شود. این انعطاف‌پذیری به توسعه‌دهندگان اجازه می‌دهد که اسکرپینگ وب را به‌صورت یکپارچه با پروژه‌های بزرگ‌تر مانند تحلیل داده‌ها، یادگیری ماشین، یا توسعه وب ترکیب کنند.
  4. پشتیبانی جامعه
    پایتون یک جامعه بزرگ و فعال از توسعه‌دهندگان دارد که به کتابخانه‌های آن کمک کرده و از طریق انجمن‌ها، آموزش‌ها و مستندات پشتیبانی ارائه می‌دهند. این منابع فراوان تضمین می‌کنند که توسعه‌دهندگان در هنگام برخورد با چالش‌های اسکرپینگ وب به کمک و راهنمایی دسترسی داشته باشند.

نتیجه‌گیری

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


سوالات متداول


وب اسکرپینگ با پایتون چیست؟

وب اسکرپینگ با پایتون به فرآیند استخراج داده از وب‌سایت‌ها با استفاده از برنامه‌نویسی پایتون اشاره دارد. این فرآیند شامل دریافت محتوای HTML از یک صفحه وب و تجزیه آن برای جمع‌آوری اطلاعات خاص می‌شود.

آیا وب اسکرپینگ با پایتون قانونی است؟

وب اسکرپینگ با پایتون در صورتی قانونی است که قوانین و شرایط خدمات وب‌سایت را رعایت کنید و از استخراج داده‌های شخصی یا حساس خودداری کنید. همیشه فایل robots.txt وب‌سایت را بررسی کنید تا مطمئن شوید که قوانین آن را رعایت می‌کنید.

تفاوت بین BeautifulSoup و Scrapy چیست؟

BeautifulSoup (یک کتابخانه ساده برای مبتدیان است که بیشتر بر تجزیه و استخراج HTML تمرکز دارد.) Scrapy (یک فریم‌ورک پیشرفته‌تر برای وب اسکرپینگ با پایتون است که می‌تواند وظایف پیچیده‌ای مانند پیمایش داده‌های بزرگ یا مدیریت خودکار صفحات چندگانه (pagination) را انجام دهد.)

موارد استفاده متداول برای وب اسکرپینگ با پایتون

مقایسه قیمت‌ها - تجمیع محتوا - لیست‌های شغلی - داده‌های املاک - تحلیل احساسات (اسکرپینگ وب به جمع‌آوری داده‌های ساختارمند از وب‌سایت‌ها برای اهداف مختلف تجاری و پژوهشی کمک می‌کند.)

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 0 از 0 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
geeksforgeeks realpython مجله پی استور

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *



برچسب‌ها:
برنامه نویسی پایتون پایتون


پیمایش به بالا