
خب وسایلی که نیاز دارید :
پایتون
کتابخانه requests
کتابخانه beautifulsoup4
کتابخانه pyperclip
کتابخانه tkinter

خب پس از نصب کتابخانه های لازم کد زیر را داخل پایتون وارد میکنیم .
import tkinter as tk from tkinter import ttk from tkinter import messagebox import requests from bs4 import BeautifulSoup import pyperclip # کتابخانه برای دسترسی به کلیپبورد # تابع استخراج لینکها def fetch_and_extract_links(url): links = set() # استفاده از set برای جلوگیری از تکرار لینکها try: response = requests.get(url, timeout=10) response.raise_for_status() # بررسی خطاهای HTTP soup = BeautifulSoup(response.text, 'html.parser') for link_tag in soup.find_all('a', href=True): href = link_tag['href'] # پاکسازی لینکها و تبدیل لینکهای نسبی به مطلق if href.startswith('#') or href.startswith(''): continue # تبدیل لینک نسبی به مطلق if not href.startswith('http://') and not href.startswith('https://'): from urllib.parse import urljoin href = urljoin(url, href) links.add(href) except requests.exceptions.RequestException as e: messagebox.showerror("خطای درخواست", f"خطا در دریافت آدرس: {e}") return None except Exception as e: messagebox.showerror("خطای تجزیه", f"خطا در پردازش صفحه: {e}") return None return sorted(list(links)) # مرتبسازی لینکها قبل از بازگرداندن # تابع برای پیست کردن آدرس از کلیپبورد def paste_from_clipboard(): try: clipboard_content = pyperclip.paste() url_entry.delete(0, tk.END) # پاک کردن محتوای فعلی فیلد url_entry.insert(0, clipboard_content) # درج محتوای کلیپبورد except Exception as e: messagebox.showerror("خطای کلیپبورد", f"امکان پیست کردن وجود ندارد: {e}") # تابع برای کپی کردن نتایج استخراج شده def copy_results_to_clipboard(): try: results_content = results_text.get("1.0", tk.END) # دریافت کل متن از ناحیه نتایج if results_content.strip(): # فقط اگر محتوایی وجود دارد کپی کن pyperclip.copy(results_content) status_label.config(text="نتایج در کلیپبورد کپی شد!") else: messagebox.showwarning("محتوای خالی", "هیچ لینکی برای کپی کردن وجود ندارد.") except Exception as e: messagebox.showerror("خطای کپی", f"امکان کپی کردن نتایج وجود ندارد: {e}") # تابع برای نمایش لینکها در رابط کاربری def display_links(): url = url_entry.get().strip() if not url: messagebox.showwarning("ورودی نامعتبر", "لطفاً یک آدرس URL معتبر وارد کنید.") return # افزودن http:// اگر کاربر وارد نکرده باشد if not url.startswith('http://') and not url.startswith('https://'): url = 'http://' + url url_entry.delete(0, tk.END) url_entry.insert(0, url) status_label.config(text="در حال استخراج لینکها...") results_text.config(state=tk.NORMAL) results_text.delete('1.0', tk.END) # پاک کردن نتایج قبلی results_text.config(state=tk.DISABLED) app.update_idletasks() # بهروزرسانی رابط کاربری قبل از عملیات طولانی extracted_links = fetch_and_extract_links(url) results_text.config(state=tk.NORMAL) if extracted_links is not None: if extracted_links: for link in extracted_links: results_text.insert(tk.END, link + '\n') status_label.config(text=f"تعداد {len(extracted_links)} لینک پیدا شد.") copy_button.config(state=tk.NORMAL) # فعال کردن دکمه کپی else: status_label.config(text="هیچ لینکی در صفحه یافت نشد.") copy_button.config(state=tk.DISABLED) # غیرفعال کردن دکمه کپی else: status_label.config(text="عملیات با خطا مواجه شد.") copy_button.config(state=tk.DISABLED) # غیرفعال کردن دکمه کپی results_text.config(state=tk.DISABLED) # --- ساخت رابط کاربری --- app = tk.Tk() app.title("استخراج لینک از وب") app.geometry("700x600") # تنظیم اندازه پنجره # فریم اصلی main_frame = ttk.Frame(app, padding="10") main_frame.pack(fill=tk.BOTH, expand=True) # فریم ورودی URL و دکمهها input_frame = ttk.Frame(main_frame) input_frame.pack(fill=tk.X, pady=5) # برچسب URL url_label = ttk.Label(input_frame, text="آدرس URL:") url_label.pack(side=tk.LEFT, padx=5) # فیلد ورودی URL url_entry = ttk.Entry(input_frame, width=50) url_entry.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5) # دکمه پیست (جدید) paste_button = ttk.Button(input_frame, text="پیست", command=paste_from_clipboard) paste_button.pack(side=tk.LEFT, padx=5) # دکمه استخراج extract_button = ttk.Button(input_frame, text="استخراج لینکها", command=display_links) extract_button.pack(side=tk.LEFT, padx=5) # دکمه کپی نتایج (جدید) copy_button = ttk.Button(input_frame, text="کپی نتایج", command=copy_results_to_clipboard, state=tk.DISABLED) # در ابتدا غیرفعال copy_button.pack(side=tk.LEFT, padx=5) # ناحیه نمایش نتایج results_text = tk.Text(main_frame, wrap=tk.WORD, state=tk.DISABLED, font=("Arial", 10)) results_text.pack(fill=tk.BOTH, expand=True, pady=10) # نوار اسکرول برای ناحیه نتایج scrollbar = ttk.Scrollbar(results_text, orient=tk.VERTICAL, command=results_text.yview) scrollbar.pack(side=tk.RIGHT, fill=tk.Y) results_text.config(yscrollcommand=scrollbar.set) # برچسب وضعیت status_label = ttk.Label(main_frame, text="آماده") status_label.pack(fill=tk.X, pady=5) # --- اجرای برنامه --- # اطمینان از نصب بودن pyperclip try: import pyperclip except ImportError: messagebox.showerror("خطای وابستگی", "لطفاً کتابخانه 'pyperclip' را نصب کنید: pip install pyperclip") app.destroy() # بستن برنامه اگر کتابخانه نصب نباشد app.mainloop()

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

برای دانلود همین پایتون یا فایل تبدیل شده به برنامه روی نوشته لینک بزنید و 15ثانیه صبر کنید و فایل را دریافت کنید .
اینم از این پروژه اگر ایده یا سوالی دارید در نظرات بنویسید .