Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
wxpath — wxpath - زحف ويب تصريحي باستخدام XPath؛ لغة استعلام ويب (WQL) | Kitploit
أدوات/GitHubGitHub/rodricios/wxpath
الاستخبارات مفتوحة المصدر (OSINT)الاستطلاعتسريب البياناتجمع المعلوماتأمن الويبزاحف الويب
GitHubrodricios/wxpath

wxpath

wxpath - زحف ويب تصريحي باستخدام XPath؛ لغة استعلام ويب (WQL)

عرض المستودع
111616منذ 2 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

wxpath - اجتياز الرسم البياني للويب التصريحي باستخدام XPath

Python 3.10+ Documentation Status

جديد: TUI - واجهة طرفية تفاعلية (مدعومة بـ Textual) لاختبار تعبيرات wxpath وتصدير البيانات.

Wxpath TUI Demo screenshot

التثبيت

يتطلب Python 3.10+.

pip install wxpath
# لدعم TUI:
pip install "wxpath[tui]"
# تشغيل TUI فورًا عبر uv:
uvx --from "wxpath[tui]" wxpath-tui

ما هو wxpath؟

wxpath هو زاحف ويب تصريحي حيث يتم التعبير عن الاجتياز مباشرة في XPath. بدلاً من كتابة حلقات زحف أمرية، يتيح لك wxpath وصف ما يجب تتبعه وما يجب استخراجه في تعبير واحد. يقوم wxpath بتنفيذ ذلك التعبير بشكل متزامن، بطريقة عرضية أولى تقريبًا، ويبث النتائج فور اكتشافها.

يقوم هذا التعبير بجلب صفحة، واستخراج الروابط، وبثها بشكل متزامن - بدون الحاجة إلى حلقة زحف:

import wxpath

expr = "url('https://quotes.toscrape.com')//a/@href"

for link in wxpath.wxpath_async_blocking_iter(expr):
    print(link)

من خلال إدخال عامل url(...) وبناء ///، يمكن لمحرك wxpath إجراء زحف ويب متكرر (أو مقسم إلى صفحات) واستخراج:

import wxpath

path_expr = """
url('https://quotes.toscrape.com')
  ///url(//a/@href)
    //a/@href
"""

for item in wxpath.wxpath_async_blocking_iter(path_expr, max_depth=1):
    print(item)

لماذا wxpath؟

معظم أدوات كشط الويب تجبرك على كتابة تدفق التحكم في الزحف أولاً، ثم الاستخراج ثانيًا.

wxpath يجمع هاتين الخطوتين في خطوة واحدة:

  • أنت تصف الاجتياز بشكل تصريحي
  • الاستخراج يتم التعبير عنه ضمنيًا
  • المحرك يتولى الجدولة والتزامن وإزالة التكرار

إخراج جاهز لـ RAG

استخرج تسلسلات هرمية JSON نظيفة ومنظمة مباشرة من الرسم البياني - قم بتغذية نماذج LLM الخاصة بك بالإشارات، وليس بالضوضاء. راجع تكامل LangChain لمزيد من التفاصيل.

حتمي

wxpath حتمي (أي: لا يعمل بواسطة نماذج LLM). بينما لا يمكننا ضمان استقرار الشبكة، يمكننا ضمان حتمية الاجتياز.

التوثيق (قيد الإعداد)

التوثيق متاح الآن هنا.

المحتويات

  • مثال: الرسم البياني المعرفي
  • تصميم اللغة
  • شرح url(...) و ///url(...)
  • التدفق العام
  • الزحف غير المتزامن
  • الزحف المهذب
  • أنواع المخرجات
  • XPath 3.1 افتراضيًا
  • شريط التقدم
  • CLI
  • TUI
  • الاستمرارية والتخزين المؤقت
  • الإعدادات
  • الخطافات (تجريبي)
  • التثبيت
  • مزيد من الأمثلة
  • المقارنات
  • متقدم: تكوين المحرك والزاحف
  • فلسفة المشروع
  • تحذيرات
  • دعم تجاري/استشارات
  • الإصدارات
  • الترخيص

مثال

import wxpath
from wxpath.settings import CRAWLER_SETTINGS

# رؤوس مخصصة للتهذيب؛ ضرورية لبعض المواقع (مثل ويكيبيديا)
CRAWLER_SETTINGS.headers = {'User-Agent': 'my-app/0.4.0 (contact: [email protected])'}

# ازحف، استخرج الحقول، ابنِ رسمًا بيانيًا معرفيًا
path_expr = """
url('https://en.wikipedia.org/wiki/Expression_language')
  ///url(
        //main//a/@href[
            starts-with(., '/wiki/') and not(contains(., ':'))
        ]
    )
    /map{
        'title': (//span[contains(@class, "mw-page-title-main")]/text())[1] ! string(.),
        'url': string(base-uri(.)),
        'short_description': //div[contains(@class, 'shortdescription')]/text() ! string(.),
        'forward_links': //div[@id="mw-content-text"]//a/@href ! string(.)
    }
"""

for item in wxpath.wxpath_async_blocking_iter(path_expr, max_depth=1):
    print(item)

ملاحظة: قد تمنع بعض المواقع (بما في ذلك ويكيبيديا) الطلبات بدون رؤوس مناسبة.
انظر متقدم: تكوين المحرك والزاحف لتعيين User-Agent مخصص.

يقوم التعبير أعلاه بما يلي:

  1. يبدأ من عنوان URL المحدد، https://en.wikipedia.org/wiki/Expression_language.
  2. يقوم بتصفية الروابط في قسم <main> التي تبدأ بـ /wiki/ ولا تحتوي على نقطتين (:).
  3. لكل رابط يتم العثور عليه،
    • يتابع الرابط ويستخرج العنوان، عنوان URL، والوصف المختصر للصفحة.
    • يكرر الخطوة 2 حتى الوصول إلى العمق الأقصى.
  4. يبث البيانات المستخرجة فور اكتشافها.

شرح url(...) و ///url(...)

  • url(...) هو عامل مخصص يقوم بجلب محتوى عنوان URL المحدد من قبل المستخدم أو الذي تم إنشاؤه داخليًا ويعيده ككائن lxml.html.HtmlElement لمزيد من معالجة XPath.
  • ///url(...) يشير إلى زحف عميق. يخبر محرك وقت التشغيل بمتابعة تتبع الروابط حتى max_depth المحدد. على عكس القفزات المتكررة url()، يسمح تعبير واحد بوصف استكشاف رسم بياني أعمق. تحذير: استخدم بحذر ومع قيود (عبر max_depth أو مسندات XPath) لتجنب انفجار الاجتياز.

تصميم اللغة

انظر DESIGN.md للحصول على تفاصيل تصميم اللغة. سترى المفاهيم الأساسية وتصميم اللغة من الألف إلى الياء.

التدفق العام

يقوم wxpath بتقييم تعبير كقائمة من خطوات الاجتياز والاستخراج (يشار إليها داخليًا باسم Segment).

url(...) ينشئ مهام زحف إما بشكل ثابت (عبر عنوان URL ثابت) أو ديناميكيًا (عبر عنوان URL مشتق من تعبير XPath). يتم إزالة تكرار عناوين URL عالميًا، على أساس أفضل جهد - وليس لكل عمق.

تعمل مقاطع XPath على المستندات التي تم جلبها (التي تم جلبها عبر عمليات url(...) السابقة مباشرة).

///url(...) يشير إلى الزحف العميق - يتقدم بطريقة عرضية أولى تقريبًا حتى max_depth.

يتم إرجاع النتائج بمجرد أن تصبح جاهزة.

الزحف غير المتزامن

wxpath يعتمد على asyncio/aiohttp في المقام الأول، ويوفر واجهة برمجة تطبيقات غير متزامنة للزحف واستخراج البيانات.

import asyncio
from wxpath import wxpath_async

items = []

async def main():
    path_expr = "url('https://en.wikipedia.org/wiki/Expression_language')///url(//@href[starts-with(., '/wiki/')])//a/@href"
    async for item in wxpath_async(path_expr, max_depth=1):
        items.append(item)

asyncio.run(main())

الطلبات المتزامنة الحاجزة

يوفر wxpath أيضًا واجهة برمجة تطبيقات غير متزامنة ولكن في سياق متزامن، مما يسمح لك بزحف صفحات متعددة بشكل متزامن مع الحفاظ على بساطة الكود المتزامن. هذا مفيد بشكل خاص للزحف في بيئات تنفيذ متزامنة تمامًا (أي ليس داخل حلقة أحداث asyncio) حيث يكون الأداء مهمًا.

from wxpath import wxpath_async_blocking_iter

path_expr = "url('https://en.wikipedia.org/wiki/Expression_language')///url(//@href[starts-with(., '/wiki/')])//a/@href"
items = list(wxpath_async_blocking_iter(path_expr, max_depth=1))

الزحف المهذب

wxpath يحترم robots.txt افتراضيًا عبر المُنشئ WXPathEngine(..., robotstxt=True).

أنواع المخرجات

تقوم واجهة برمجة تطبيقات wxpath في Python بإرجاع كائنات منظمة.

اعتمادًا على التعبير، قد تتضمن النتائج:

  • كائنات lxml.* و lxml.html.*
  • كائنات elementpath.datatypes.* (لميزات XPath 3.1)
  • WxStr (قيم نصية مع مصدر)
  • قواميس / خرائط
  • قوائم أو قيم XPath أصلية أخرى

تقوم CLI بتسطير هذه الكائنات إلى JSON عادي للعرض. تحتفظ واجهة برمجة تطبيقات Python بالبنية افتراضيًا.

XPath 3.1 افتراضيًا

يستخدم wxpath مكتبة elementpath لتوفير دعم XPath 3.1، مما يتيح ميزات XPath متقدمة مثل الخرائط و المصفوفات وغيرها. يتيح لك هذا كتابة استعلامات XPath أكثر قوة.

تنزيل الأداة