
قم بتصفية قوائم عناوين URL الكبيرة وإزالة التكرارات منها عن طريق إزالة الامتدادات الثابتة والكلمات المفتاحية غير المرغوب فيها والمعرّفات والبدائل اللغوية والمعاملات، لإنتاج مجموعات نقاط نهاية نظيفة لاستطلاع الويب.
هذه أداة تُستخدم لتنقية قائمة عناوين URL من التكرارات. كنقطة انطلاق، اعتمدت على الأداة الرائعة uro من إعداد Somdev Sangwan. لكنني أردت تغيير بعض الأمور، وإجراء بعض التحسينات (مثل التعامل مع GUIDs)، وجعلها أكثر قابلية للتخصيص.
يدعم urless Python 3.
قم بتثبيت urless في بيئة بايثون الافتراضية (العامة).
pip install urless
أو
pip install git+https://github.com/xnl-h4ck3r/urless.git -v
يمكنك الترقية باستخدام
pip install --upgrade urless
إعداد سريع في بيئة بايثون معزولة باستخدام pipx
pipx install git+https://github.com/xnl-h4ck3r/urless.git
تقوم أساسًا بتمرير قائمة عناوين URL (من ملف، أو عبر الأنبوب من STDIN)، وتحصل على ملف أو عناوين URL منقّاة في الإخراج. ولكن بأي طريقة يتم تنقيتها؟ سأشرح ذلك أدناه، لكن أولاً إليك بعض المصطلحات التي سيتم استخدامها:
-fe، أو تحديدها في FILTER_EXTENSIONS في config.yml، أو إذا لم يكن أي منهما موجودًا، فقائمة افتراضية من .css,.ico,.jpg,.jpeg,.png,.bmp,.svg,.img,.gif,.mp4,.flv,.ogv,.webm,.webp,.mov,.mp3,.m4a,.m4p,.scss,.tif,.tiff,.ttf,.otf,.woff,.woff2,.bmp,.ico,.eot,.htc,.rtf,.swf,.image.-fk، أو تحديدها في FILTER_KEYWORDS في config.yml، أو إذا لم يكن أي منهما موجودًا، فقائمة افتراضية من blog,article,news,bootstrap,jquery,captcha,node_modulesLANGUAGE في config.yml، أو إذا لم تكن موجودة، فقائمة افتراضية من الرموز الأكثر شيوعًا en,en-us,en-gb,fr,de,pl,nl,fi,sv,it,es,pt,ru,pt-br,es-mx,zh-tw,js.koإليك ما يحدث:
-dp/--disregard-params:
REMOVE_PARAMS (أو تم تجاوزها بالوسيط -rp/--remove-params)، فسيتم إزالتها من جميع عناوين URL قبل المعالجة.-rcid/--regex-custom-id وكان مسار URL يحتوي على معرف مخصص، فسيتم تضمين تطابق واحد فقط لتعبير المعرف المخصص إذا كانت هناك عناوين URL متعددة حيث يكون هذا هو الاختلاف الوحيد.-lang وكان عنوان URL يحتوي على رمز لغة (مثل en-gb)، فسيتم تضمين واحد فقط من رموز اللغات إذا كانت هناك عناوين URL متعددة حيث يختلف رمز اللغة.cat target_urls.txt | urless
أو
urless -i target_urls.txt
cat target_urls.txt | urless > output.txt
أو
urless -i target_urls.txt -o output.txt
يحتوي ملف config.yml على المفاتيح التي يمكن تحديثها لتناسب احتياجاتك:
FILTER_KEYWORDS - قائمة مفصولة بفواصل من الكلمات المفتاحية (مثل blog,article,news إلخ) التي يتم فحص عناوين URL مقابلها في ظروف معينة.FILTER_EXTENSIONS - قائمة مفصولة بفواصل من امتدادات الملفات (مثل .css,.jpg,.jpeg إلخ) التي يتم فحص جميع عناوين URL مقابلها. إذا تضمن عنوان URL أيًا من هذه السلاسل، فسيتم استبعاده من الإخراج.LANGUAGE - قائمة مفصولة بفواصل من رموز اللغات (مثل en-gb,fr,nl إلخ) التي يتم فحص جميع عناوين URL مقابلها عند تمرير الوسيط -lang. إذا كانت هناك عناوين URL متعددة برموز لغات مختلفة، فسيتم إخراج نسخة واحدة فقط من عنوان URL.REMOVE_PARAMS - قائمة مفصولة بفواصل من أسماء المعاملات الحساسة لحالة الأحرف (مثل cachebuster,cacheBuster) التي ستتم إزالتها من جميع عناوين URL قبل المعالجة.توجد حاليًا فحوصات تعبير نمطي تلقائية لجزء المسار إذا كان معرفًا عامًا فريدًا (GUID) أو معرفًا صحيحًا، لكن الوسيط -rcid / --regex-custom-id يسمح لك بتقديم تعبير نمطي لتحديد معرف مخصص. على سبيل المثال، إذا كان الهدف يحتوي على تنسيق معرف محدد (ليس GUID أو معرفًا صحيحًا)، فيمكنك تحديد تعبير نمطي له، وبعد ذلك سيتم إرجاع واحد فقط من هذه المعرفات في الإخراج إذا كان باقي عنوان URL هو نفسه. على سبيل المثال:
U-65241Xhttps://target.com/blah/U-61723A/settings
https://target.com/blah/U-63352B/settings
https://target.com/blah/U-61351A/profile
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
urless وتمرير -rcid 'U-[0-9]{5}[A-Z]'، ثم سيكون الإخراج:
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
ملاحظات مهمة حول التعبير النمطي:
-rcid.[^(\?|\/|#|$)]* إلى نهاية تعبيرك النمطي وهذا يعني جميع الأحرف الأخرى حتى نهاية جزء المسار.^ في البداية، و$ في النهاية، لتعبيرك النمطي لضمان أنه يمثل الجزء الكامل من المسار بين الشرطات المائلة. ومع ذلك، ستتم إضافتها تلقائيًا إذا تركتها.cat input.txt | grep -E 'U-[0-9]{5}[A-Z]' على سبيل المثال، ومعرفة ما إذا كان تعبيرك يبدو صحيحًا (يجب أن يبرز فقط ما تهتم به، وأن يبرز الجزء الكامل من المسار الذي يمثل المعرف المخصص).https://target.com/blah/xnl/settings حيث xnl هو اسم مستخدم، فلن تتمكن من إنشاء تعبير نمطي لاسم المستخدم لأنه ليس تنسيقًا فريدًا بما يكفي لتمييزه عن قيم المسار المحتملة الأخرى.إذا واجهت أي مشاكل على الإطلاق، أو كانت لديك أفكار للتحسينات، فلا تتردد في فتح مشكلة على Github. إذا كانت هناك مشكلة، فسيكون من المفيد أن تقدم الأمر الدقيق الذي شغّلته ووصفًا تفصيليًا للمشكلة. إذا أمكن، قم بالتشغيل باستخدام -v لإعادة إنتاج المشكلة وأخبرني عن أي رسائل خطأ تظهر.
لا شيء - لا تتردد في فتح مشكلة على Github لاقتراح أي تحسينات.
حظًا سعيدًا وصيدًا موفقًا! إذا كنت تحب الأداة حقًا (أو أي أدوات أخرى)، أو ساعدتك في العثور على مكافأة رائعة، ففكر في شراء قهوة لي! ☕ (أحتاج إلى الكافيين!)
🤘 /XNL-h4ck3r
| الوسيط | الوسيط الطويل | الوصف |
|---|
| -i | --input | ملف يحتوي على عناوين URL لتنقيتها. |
| -o | --output | ملف الإخراج الذي سيحتوي على قائمة عناوين URL المنقّاة (الافتراضي: output.txt). إذا تم تمرير الإخراج عبر الأنبوب إلى برنامج آخر، فسيتم كتابة الإخراج إلى STDOUT بدلاً من ذلك. |
| -fk | --filter-keywords | قائمة مفصولة بفواصل من الكلمات المفتاحية لاستبعاد الروابط (إذا لم تكن هناك معاملات). سيؤدي هذا إلى تجاوز قائمة FILTER_KEYWORDS المحددة في config.yml |
| -fe | --filter-extensions | قائمة مفصولة بفواصل من امتدادات الملفات لاستبعادها. سيؤدي هذا إلى تجاوز قائمة FILTER_EXTENSIONS المحددة في config.yml |
| -rp | --remove-params | قائمة مفصولة بفواصل من المعاملات الحساسة لحالة الأحرف لإزالتها من جميع عناوين URL. سيؤدي هذا إلى تجاوز قائمة REMOVE_PARAMS المحددة في config.yml. يمكن أن يكون هذا مفيدًا لإزالة معاملات كسر التخزين المؤقت على سبيل المثال.** |
| -ks | --keep-slash | لن تتم إزالة الشرطة المائلة في نهاية عنوان URL في الإدخال. لذلك قد تكون هناك عناوين URL متطابقة في الإخراج، واحدة بشرطة مائلة وأخرى بدونها. |
| -khw | --keep-human-written | افتراضيًا، تتم إزالة أي عنوان URL يحتوي جزء مساره على أكثر من 3 شرطات (-) لأنه يُفترض أنه محتوى مكتوب بواسطة البشر (مثل منشورات المدونات)، وليس مثيرًا للاهتمام. تمرير هذا الوسيط سيبقيها في الإخراج. |
| -kym | --keep-yyyymm | افتراضيًا، تتم إزالة أي عنوان URL يحتوي مساره على /YYYY/MM (حيث YYYY سنة و MM شهر) لأنه يُفترض أنه محتوى مدونة/أخبار، وليس مثيرًا للاهتمام. تمرير هذا الوسيط سيبقيها في الإخراج. |
| -rcid | --regex-custom-id | استخدم بحذر! تعبير نمطي لمعرف مخصص يستخدمه هدفك. تأكد من تمرير القيمة بين علامتي اقتباس. راجع القسم أدناه لمزيد من التفاصيل حول هذا. |
| -iq | --ignore-querystring | قم بإزالة سلسلة الاستعلام (بما في ذلك أجزاء URL #) بحيث يكون الإخراج مسارات فريدة فقط. |
| -fnp | --fragment-not-param | لا تتعامل مع أجزاء URL # بنفس طريقة التعامل مع المعاملات، على سبيل المثال إذا كان الرابط يحتوي على كلمة مفتاحية للتصفية وجزء (أو معامل) فعادةً ما يتم الاحتفاظ بالرابط، ولكن إذا تم تمرير هذا الوسيط وكان الرابط يحتوي على كلمة تصفية وجزء، فسيتم إزالة الرابط. أيضًا، إذا تم تمرير هذا الوسيط واستُخدم -iq / --ignore-querystring، فلن تتم إزالة الجزء من الروابط إذا لم تكن هناك سلسلة استعلام في الرابط. |
| -lang | --language | إذا تم تمريره وكانت هناك عناوين URL متعددة برموز لغات مختلفة كجزء من المسار، فسيتم إخراج نسخة واحدة فقط من عنوان URL. الرموز محددة في قسم LANGUAGE في config.yml. |
| -c | --config | مسار ملف الإعداد YML. إذا لم يتم تمريره، فسيبحث عن ملف config.yml في دليل الإعداد الافتراضي، مثل ~/.config/urless/. |
| -dp | --disregard-params | هناك تصفية معينة لا تتم إذا كانت عناوين URL تحتوي على معاملات، لأننا افتراضيًا نريد رؤية جميع المعاملات الممكنة. إذا تم تمرير هذا الوسيط، فسيتم إجراء التصفية بغض النظر عن وجود أي معاملات. |
| -nb | --no-banner | يخفي شعار الأداة من الإخراج (يكون مخفيًا افتراضيًا إذا قمت بتمرير الإدخال عبر الأنبوب إلى urless). |
| --version | يعرض رقم الإصدار الحالي. | |
| -v | --verbose | إخراج تفصيلي |
-)، لكنه ليس GUID. هذا يعني محتوى مكتوبًا بواسطة البشر، مثل how-to-hack-the-planet. إذا تم تمرير الوسيط -khw، فلن تتم إزالته./YYYY/MM/، مثل سنة، شهر. هذا عادةً محتوى ثابت مثل مدونة. إذا تم تمرير الوسيط -kym، فلن تتم إزالته.#) ولم يتم تمرير الوسيط -dp/--disregard-params: