انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: abc در 08 تیر 1403، 11:05 ب‌ظ

عنوان: کراول کردن وبسایت
ارسال شده توسط: abc در 08 تیر 1403، 11:05 ب‌ظ
بدون داشتن سایت‌مپ و سرج‌انجین داخلی در سایت چی جوری می‌شود یک سایت را کامل کراول کرد؟ آیا متد‌های خاضی برای این کار وجود دارد؟‌ مثلا هر چی لینک داخلی هست را ذخیره کنم و بعد داخلی آن لینک داخلی‌ها باز هرچی لینک داخلی بود. اصلا گوگل و... چی جوری کراول می‌کنند (البته بدون داشتن موارد بالا)
عنوان: پاسخ : کراول کردن وبسایت
ارسال شده توسط: esmaeelE در 08 تیر 1403، 11:44 ب‌ظ
بهتره برای چنین پرسشی‌ با مثال پیش برید و سوال را دقیق بپرسید.
دقیقا داده‌های چه سایتی را می‌خواهید بگیرید و کاربردش چیه؟

به طور کلی کلید‌واژه‌های زیر را جستجو کنید.
crawler with python
scraping websites with python
پیوند زیر هفت نمونه از کتابخانه‌های پایتون برای این کار را فهرست کرده است.

https://www.zenrows.com/blog/python-web-scraping-library#best-python-scraping-libraries




ویرایش

موضوع مرتبط

https://forum.ubuntu-ir.org/index.php?topic=148843.msg1160743#msg1160743


عنوان: پاسخ : کراول کردن وبسایت
ارسال شده توسط: جادی در 09 تیر 1403، 12:54 ب‌ظ
با دستوری مثل wget می تونی بگی برو فلان صفحه، هر چی برای نمایشش لازمه رو دانلود کن، هر لینکی هم توش دیدی برو تو و اونم ذخیره کن و ...
عنوان: پاسخ : کراول کردن وبسایت
ارسال شده توسط: abc در 09 تیر 1403، 06:58 ب‌ظ
نقل‌قول
دقیقا داده‌های چه سایتی را می‌خواهید بگیرید و کاربردش چیه؟
سایت خاصی مدنظرم نبود. مشکلی از بابت یک یا دو سایت خاص ندارم. چون اونجوری سایت رو نگاه می‌کنم متانسب با آن طراحی می‌کنم. ولی خب می‌خواستم ببینم می‌شه اسکریپ کلی‌تری تهیه کرد.
نقل‌قول
با دستوری مثل wget می تونی بگی برو فلان صفحه، هر چی برای نمایشش لازمه رو دانلود کن، هر لینکی هم توش دیدی برو تو و اونم ذخیره کن و ...
ممنون آقای جادی عزیز. پس در کل باید خودم  لینک‌ها را پیدا کنم. بیشتر دنبال چیزی بودم که مثلا به سرور سایت درخواست بفرستم و آن هم برایم سایت‌مپ سایت یا لیست لینک‌های داخلی‌اش را در یک json بفرسته که فکر کنم توقع بی‌جایی داشتم  ;D
عنوان: پاسخ : کراول کردن وبسایت
ارسال شده توسط: esmaeelE در 12 تیر 1403، 11:15 ق‌ظ
سایت خاصی مدنظرم نبود. مشکلی از بابت یک یا دو سایت خاص ندارم. چون اونجوری سایت رو نگاه می‌کنم متانسب با آن طراحی می‌کنم. ولی خب می‌خواستم ببینم می‌شه اسکریپ کلی‌تری تهیه کرد.

به صورت کلی نمی‌شه پاسخ داد. باید کاربرد نهایی، هدف و وبسایت را مشخص کنید.


همانطوری که در پیوند فرستهٔ پیشین می‌تونید ببینید با ابزارهایی مانند lynx می‌توانید فهرستی از تمام پیوندهای یک وبسایت بدست بیارید.

lynx -dump -listonly http://hosseinmohri.com

برای تمرین

سعی کنید فهرست ویدیوهای اینجا را بگیرید و چند تا را دریافت کنید.
ترکیب lynx, wget/aria2 یا به کلی با پایتون پیاده‌سازی کنید.
https://farachart.com/19921


اینجا را برای انجام تحلیل روی داده‌ها پس از استخراج ببینید.

بررسی آماری تعداد تکرار واژگان در ضرب‌المثل‌های فارسی
https://virgool.io/@mostafaasadi/persian-proverb-analyze-bbnp6l5vpmz2
عنوان: پاسخ : کراول کردن وبسایت
ارسال شده توسط: goldenthing در 12 تیر 1403، 05:20 ب‌ظ
با دستوری مثل wget می تونی بگی برو فلان صفحه، هر چی برای نمایشش لازمه رو دانلود کن، هر لینکی هم توش دیدی برو تو و اونم ذخیره کن و ...

آیا این کار نیاز به دومین داره؟ آی پی عومی چطور؟ من میتونم یه کامپیوتر بیکار رو به یک کرالر تبدیل کنم؟ ممنون میشم اگه بیشتر توضیح بدید یا مقاله/ویدیو پیشنهاد کنید.
عنوان: پاسخ : کراول کردن وبسایت
ارسال شده توسط: abc در 12 تیر 1403، 08:19 ب‌ظ
lynx -dump -listonly http://hosseinmohri.com

آقا این خیلی سر راست بود. همه‌ی لینک‌های داخل صفحه را بر می‌گردونه. فکر کنم باید با همین دستور و با همان متد آقای جادی پیش برم کار کنه. یعنی یه set در پایتون درست کنم و لینک‌های داخلی رو بهش اضافه کنم و بعد همین طوری لا‌یه‌به‌لا پیش برم و اگر مثلا تا یه تعداد مشخص اندازه set تغییری نکرد کراول‌کردن متوقف بشه. فکر کنم اینجوری یه سایت‌مپ نسبتا خوب از سایت در اختیارم بذاره (الته با os.popen در پایتون خروجی می‌شه str که البته می‌شه دوباره تبدیلش کرد به لیست). ممنون از شما.
عنوان: پاسخ : کراول کردن وبسایت
ارسال شده توسط: esmaeelE در 13 تیر 1403، 12:27 ق‌ظ
درسته با همین ایده می‌تونید پیش برید.
راه دیگه استفاده از امکانات خود پوسته نظیر pipe و ترکیب با سایر دستورات است.
lynx | uniq
توجه کنید که خود lynx امکان دریافت به صورت تو در تو ندارد(حداقل تا جایی که من فهمیدم)
و به این شکل باید عمل کنید که هر پیوندی که پیدا کردید اگر مربوط به صفحهٔ وب بود(مثلا پروندهٔ mp3 نبود) مجدد به عنوان ورودی lynx در نظر بگیرید.
در برنامه نویسی می‌تونید چنین منطقی را با تابع بازگشتی(Recursive Function) پیاده سازی کنید.

https://codingforseo.com/blog/extract-links-with-lynx/


ویرایش

می‌تونید به دستور lynx انتخاب  nonumbers- هم اضافه کنید تا پیش از پیوندها عدد نشون نده.

https://paste.ubuntu-ir.org/hcxz



ویرایش


اگر پیوندها محدود شده بودند می‌تونید ابزارهای از پراکسی رد کنید.
برای نمونه اگر تونل ssh دارید تنظیم زیر با proxychains کار ساز است.

برقراری تونل


ssh -D 0.0.0.0:9999 bsd -N

نصب

sudo apt install proxychains

تنظیمات

[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
# socks4 127.0.0.1 9050
socks5 127.0.0.1 9999


اجرا

$ proxychains4 aria2c -s16 -x16 -i list