من یاغی دربندم

مطالب سعید علیجانی/اهل گنو/اهل شعر/طرفدار دانش آزاد

من یاغی دربندم

مطالب سعید علیجانی/اهل گنو/اهل شعر/طرفدار دانش آزاد

آخرین نظرات
  • ۳۰ مرداد ۹۶، ۰۰:۳۳ - بهروز
    ازز

۲ مطلب با کلمه‌ی کلیدی «دانلود» ثبت شده است

امروز یکی از دوستام ازم یه سوال پرسید که می‌تونم از یه صفحهٔ وب چیزی رو دانلود کنم؟ من هم در جواب بهش گفتم که باشه الان امتحان می‌کنم. پیوندی رو که فرستاده بود، باز کردم. پیوند مربوط به یه مقاله در کتابخانهٔ مرکزی دانشگاه صنعتی شریف بود. یه خورده سایت رو بررسی کردم. رو گزینهٔ مشاهده کلیک کردم. یه پاپ‌آپ نمایش‌دهندهٔ مستندات باز شد. اونجا صفحات مستند مورد نظر رو دیدم، ولی خب گزینه‌ای برای دانلود نداشت، روی صفحهٔ مقاله کلیک راست هم نمی‌شد کرد. برای این که بفهمم چی به چیه، از ابزار Page Inspector فایرفاکس استفاده کردم و سورس قسمت مورد نظر رو باهاش مشاهده کردم. دیدم که مقاله رو به صورت فایل‌های png نمایش میده.


سورس قسمت مورد نظر:

<img id="Photo" style="width: 950px; height: 1335px; display: block; left: 0px; top: 0px; border: 1px solid rgb(204, 204, 204);" src="http://library.sharif.ir:80/parvan/resource/285081/c/13327/get/dsPID=ma1&amp;scale=1.65">


قسمت آخر سورس آدرس عکس قرار داشت

src="http://library.sharif.ir:80/parvan/resource/285081/c/13327/get/dsPID=ma1&amp;scale=1.65"


این آدرس رو در یک تب جدید باز کردم و عکس رو مشاهده کردم.

http://library.sharif.ir:80/parvan/resource/285081/c/13327/get/dsPID=ma1


برای این که مطمئن بشم عکس‌های بعدی هم طبق این الگو هستن، عدد ۱ آخر آدرس رو به ۲ و ۳ تغییر دادم و دیدم درسته. خب حالا وقتشه که کل عکس‌ها رو دانلود کنم. برای این کار تنها کافیه یه اسکریپت خیلی کوچیک bash بنویسم و اجراش کنم تا ۱۳۰ صفحهٔ‌مقاله دانلود بشه و خب این کار رو انجام دادم.


#!/bin/bash

for ((i=1; i<= 130;i++))
do
        wget --output-document=$i.png  http://library.sharif.ir/parvan/resource/285081/c/13327/get/dsPID=ma$i
done


خب این همون حلقهٔ معروف for هست و از برنامهٔ دانلود تحت کامند wget برای دانلود استفاده کردم، سوئیچ «output-document» هم اسم فایل رو مشخص می‌کنه، که من گذاشتم از ۱ تا ۱۳۰ باشه.


بعد از این که ۱۳۰ صفحه دانلود شد، دیدم یه مشکل خیلی بزرگ‌تر هست، دربارهٔ این مشکل بزرگ‌تر در پست بعدی می‌نویسم.

۰ نظر موافقین ۰ مخالفین ۰ ۰۳ فروردين ۹۵ ، ۱۸:۰۷
سعید علیجانی
چند وقت پیش دنبال یه چی می‌گشتم که دانلودش کنم، به یه صفحهٔ وب رسیدم که علاوه بر اون چیزی که من می‌خواستم کلی لینک دیگه داشت، و من تصمیم گرفتم همهٔ لینک‌های اون صفحه رو دانلود کنم. اما کلیک کردن روی دونه‌دونه لینک‌ ها یا کپی کردن دونه‌دونهٔ اون‌ها کاری حوصله‌سربر بود. تصمیم گرفتم همه‌اش رو یک جا کپی کنم و یک جا دانلود کنم.

برای این کار ابتدا از افزونهٔ Web Developer فایرفاکس استفاده کردم و از طریق منوی Information این افزونه، گزینهٔ View Link Information رو انتخاب کردم و یک صفحه برام باز شد که تمام لینک‌هارو آورده بود. تمام متن اون صفحه رو کپی کردم و تو یه فایل به اسم links ریختم.

مسالهٔ بعدی حذف لینک‌های اضافی بود. من تو این صفحه تمام لینک‌های رو می‌خواستم که پسوند .zip داشتن. خب تو ترمینال گنو/لینوکس این کار به راحتی با دستور cat و grep امکان‌پذیره.

cat links | grep .zip > downloads

دستور cat محتویات فایل رو در خروجی قرار میده و grep تمام خط‌هایی که .zip تو اون‌ها هست انتخاب می‌کنه و همهٔ این‌ها تو یه فایل جدید ریخته میشه. خب الان من تمام لینک‌هایی رو که می‌خواستم داخل یک فایل دارم. مرحلهٔ بعدی اینه که یه با استفاده از یه برنامهٔ دانلود این لینک‌ها رو دانلود کنم. من از برنامهٔ axel استفاده می‌کنم. برای همین باید تمام این لینک‌ها رو با axel دریافت کنم. برای همین axel رو به اول هر خط اضافه کردم. اما دستی اضافه نکردم و از دستور فوق‌العاده جذاب sed استفاده کردم.

cat downloads  | sed 's/[ ]/axel /' > download.sh

دستور بالا میگه که محتوای فایل بریز تو یه فایل جدید به اسم downlooad.sh و این که جای اسپیس اول هر خط عبارت axel رو قرار بده. چون من از طریق افزونهٔ Web Developer لینک‌ها رو کپی کردم، اول هر کدوم یه اسپیس قرار گرفته. در کل برنامهٔ sed خیلی خوب و کار راه بینداز هست، در موردش بیشتر بخونید، تا تجربهٔ خوشایندتری رو در گنو/لینوکس داشته باشید. حالا تنها کافیه این فایل رو اجرا کنم و صبر کنم که تمام فایل‌هایی که می‌خواستم دانلود شن.

sh download.sh

البته با افزونه‌هایی مثل FlashGot هم میشه این کار رو کرد، و من هم بعضی وقت‌ها ازش استفاده می‌کنم، ولی خب باید دونه‌دونه لینک‌ها رو انتخاب کرد و برای اون صفحه کاری دشوار بود و استفاده از grep برای انتخاب کردن راحت‌تر و سریع‌تر هست.

۲ نظر موافقین ۰ مخالفین ۰ ۲۸ دی ۹۴ ، ۲۰:۳۳
سعید علیجانی