گاهی اوقات ممکن است متوجه شوید که پس از انتقال CMS، برخی چیزها گم شده اند. بدیهی است که هیچ کس از عمد چنین کاری را انجام نمی دهد، درست است؟ اما ممکن است اتفاق بیفتد. ناگهان، به جای چیزی کامل، تنها با گیتار باقی میمانید.
بیایید یک هک سریع و کثیف انجام دهیم تا URL های مهم و گم شده را بررسی کنیم.
curl "http://web.archive.org/cdx/search/cdx?url=colored.house.com*&output=txt&from=20241201&to=20241231" --output - \
| grep " text/html 200 " | awk '{print $3}' | sed 's/\?.*//' | sort | uniq -c | sort -nr \
| awk '{print $2}' | head -n 50 | xargs -I {} curl -s -o /dev/null -w "%{http_code} %{url_effective}\\n" {} \
| grep -v "^(23)"
در اینجا شما، URL های “مهم” برتر از سایتی هستید که در ماه دسامبر کار می کردند، اما اکنون کار نمی کنند (نه تغییر مسیر و نه بازگرداندن محتوا). پس از آن یک مالک جدی سایت می تواند URL ها را برای مواردی که می خواهند حفظ کنند (شاید محتوای تاریخی)، اگر URL های جدیدی برای جایگزینی وجود دارد (شاید اکنون یک بخش با دیگری جایگزین شده باشد) بررسی کند، یا شاید آنها فقط می خواهند موارد 404 را حفظ کنند. سئوکاران ممکن است بخواهند ارزش برخی از URL های قدیمی را حفظ کنند، حتی اگر جایگزین ها کمی نزدیک باشند.
آن خط فرمان کمی افراطی است. بیایید آن را تجزیه کنیم:
دریافت URL
به یاد آوردم که آرشیو اینترنت راهی برای استخراج URL هایی دارد که از آنها اطلاع دارد. با یک جستجوی سریع، یک پست وبلاگ یافت شد که نمونه هایی دارد. این منجر به URL curl اولیه می شود، که از ابتدا تا پایان دسامبر 2024 به دنبال URL های شناخته شده می گردد (در صورت نیاز تنظیم کنید).
اجازه دهید فقط خروجی را در یک فایل متنی ضبط کنیم، زیرا تماس مکرر با archive.org کمی بی ادبانه است. همچنین، گاهی اوقات این درخواست ها با شکست مواجه می شوند، در این صورت باید یک کمک مالی 5 دلاری آپلود کنید و دوباره امتحان کنید.
curl "http://web.archive.org/cdx/search/cdx?url=colored.house.com*&output=txt&from=20241201&to=20241231" \
--output - > archive-wh-urls.txt
این بایگانی شامل URL هایی است که کار نمی کنند و آدرس هایی که HTML نیستند، بنابراین ما آنها را با grep " text/html 200 "
. این همچنین نشانیهای اینترنتی «http» را فیلتر میکند، زیرا، امیدواریم، شما به «https» تغییر مسیر داده باشید. سپس، URL ها را از هر خط (که سومین عنصر در خط است) نگه می داریم: awk '{print $3}'
. تا اینجای کار خیلی خوبه؟
متعارف سازی
در حال حاضر، ما مجموعه ای از URL ها را داریم، اما هنوز پارامترهای cruft – query زیادی وجود دارد. بیایید هر چیزی را بعد از علامت سوال قطع کنیم: sed 's/\?.*//'
(من هرگز sed را نمی فهمم، اما فکر می کنم این کار می کند). فکر نمیکنم IA URLهای قطعه (“#”) داشته باشد، بنابراین میتوانیم از آنها بگذریم. (هشتگها جاوا اسکریپت هستند، درست است، و چه کسی آن را میخواهد؟) این کمی شبیه متعارفسازی اولیه است که یک موتور جستجو انجام میدهد. من مطمئن هستم که شما هم می توانید از یک LLM برای انجام این کار استفاده کنید، اما بیا.
به هر حال، اکنون URL های تمیزی داریم، اما تکراری زیاد. فرض من این است که IA URL ها را با فرکانسی که با اهمیت آنها قابل مقایسه است بررسی می کند، بنابراین ما از آن به عنوان تابع رتبه بندی خود استفاده خواهیم کرد. بسیاری از موتورهای جستجو کار مشابهی انجام می دهند: اگر URL مهم است، بیایید آن را بیشتر بررسی کنیم. خوب، برای رتبهبندی، یک مدل یادگیری ماشینی را آموزش میدهیم و آن را با جاسازیهای شباهت کسینوس URLها تغذیه میکنیم. شوخی می کنم، ما فقط بر اساس تعداد دفعاتی که URL ظاهر می شود مرتب می کنیم: sort | uniq -c | sort -nr | awk '{print $2}'
(قبل از اینکه بتوانید ورودی های منحصر به فرد را بکشید باید مرتب سازی کنید، سپس دوباره بر اساس تعداد مرتب می کنیم و تعداد را حذف می کنیم). خوب، ما اکنون رتبه بندی بر اساس مرجع را انجام داده ایم. ما اساساً گوگل هستیم (منهای GPU).
اگر می خواهید مرحله میانی را ذخیره کنید، به این صورت است:
cat archive-wh-urls.txt | grep " text/html 200 " | awk '{print $3}' \
| sed 's/\?.*//' | sort | uniq -c | sort -nr | awk '{print $2}' \
> archive-wh-urls-clean.txt
واکشی زنده بدون قورباغه
اکنون بخش بدی که من نیاز داشتم برای جمینی در اطراف آن قرار می گرفتم می آید: بررسی URL ها برای اینکه ببینم هنوز کار می کنند یا خیر. برای چیزی منطقی، من فقط فهرست را تکرار می کنم و یک اسکریپت ساده و خوانا می سازم. اما ما اینجا نیستیم که منطقی باشیم.
گرفتن URL های برتر بخش آسان است: head -n 50
. بخش بد بو این است که بر روی URL ها تکرار می شود و آنها را در “curl” قرار می دهد تا کد وضعیت آنها را بررسی کند. ما در اینجا از “xargs” استفاده می کنیم زیرا به نظر شیک می رسد. آیا مردم واقعاً این کار را در زندگی واقعی انجام می دهند؟ خیلی وحشی است اما باز هم در دوران عجیبی زندگی می کنیم.
«xargs» اساساً «curl» را برای هر URL («{}») میخواند، ما فقط میخواهیم کد وضعیت و URL را در خطوط جداگانه ببینیم: xargs -I {} curl -s -o /dev/null -w "%{http_code} %{url_effective}\\n" {}
. این به نظر علم موشکی است، اما چه کسی واقعاً می داند دانشمندان موشکی در تمام روز چه می کنند؟ ظاهراً آنها مهاجرت های CMS تمیز را تنظیم نمی کنند، در غیر این صورت ما اینجا نبودیم.
در نهایت، URL های موفق (کار خوب) را فیلتر می کنیم تا روی شکست تمرکز کنیم: grep -v "^(23)"
(کدهای وضعیت 2xx و 3xx موفق در نظر گرفته می شوند). استفاده از regex در اینجا بسیار جذاب است، و این یک راه خوب برای نشان دادن مهارتهای شماست (اگر این تکمیل خودکار سخت است، متأسفیم).
در نتیجه
و بس. بیایید این بار همه را در خطوط جداگانه کنار هم بگذاریم:
curl "http://web.archive.org/cdx/search/cdx?url=colored.house.com*&output=txt&from=20241201&to=20241231" \
--output - > archive-wh-urls.txt
cat archive-wh-urls.txt | grep " text/html 200 " | awk '{print $3}' | sed 's/\?.*//' \
| sort | uniq -c | sort -nr | awk '{print $2}' > archive-wh-urls-clean.txt
cat archive-wh-urls-clean.txt | head -n 50 \
| xargs -I {} curl -s -o /dev/null -w "%{http_code} %{url_effective}\\n" {} \
| grep -v "^(23)"
و به این ترتیب می توانید URL های گم شده را پس از انتقال CMS بررسی کنید. اگر می خواهید همه چیز را تمیز کنید، بهتر است این کار را ظرف چند روز انجام دهید – نه موتورهای جستجو و نه کاربران 4 سال منتظر نخواهند بود تا شما کار خود را انجام دهید.
چگونه این یک خط به یک پست وبلاگ طولانی تبدیل شد؟ این وحشی است. خیلی کنکاش به هر حال.
نظرات / سوالات
در حال حاضر هیچ قابلیت نظر دادن در اینجا وجود ندارد. اگر میخواهید نظر بدهید، لطفاً از Bluesky استفاده کنید و من را در آنجا ذکر کنید: @johnmu.com. با تشکر