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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: دانلود فایل های داخل یک سایت  (دفعات بازدید: 4139 بار)

0 کاربر و 6 مهمان درحال مشاهده موضوع.

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
دانلود فایل های داخل یک سایت
« : 27 بهمن 1393، 01:07 ب‌ظ »
چجوری میشه بدون این که همه ی صفحات یک سایت رو دستی باز کرد فایل های  pdf و mp3 داخل اون سایت رو دانلود کرد مثلا من می خوام در مورد این آدرس این کار رو انجام بدم:

http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/

اینجا چند ده تا لینک هست که داخل هرکدومشون فایل pdf و mp3 وجود داره(بعضا فیلم هم وجود داره) می خوام همشون رو بدون این که وارد لینک ها بشم دانلود کنم چجوری میشه این کار رو کرد؟

آفلاین Ma3X

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 877
  • جنسیت : پسر
  • It is Matrix
    • ماتریکس. آی آر
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #1 : 27 بهمن 1393، 01:26 ب‌ظ »
باید یک اسکریپت‌بنویسی که خودکار این‌کار رو انجام بده.
مثلا بر اساس یک پترن لینک درست کنی و با یک پترن دیگه محتوا رو از خروجی بکشی بیرون.
من برای این‌کار از simple_html_dom استفاده می‌کنم که یک کلاس PHP هست و می‌تونی دانلودش کنی.

یکی از آخرین کارهایی که انجام دادم رو برات پیوست می‌کنم.
اسکریپت one.php لیست همه قاری‌ها رو به همراه نام، تصویر و لینک قاری توی سایت جمع می‌کنه و توی یک تیبل ذخیره می‌کنه.
اسکریپت two.php وارد آدرس لینک هر قاری می‌شه و قطعات قرائت رو توی هر چند تا صفحه که باشه به‌همراه عنوان، لینک و مدت زمان، جمع آوری می‌کنه و توی یک تیبل دیگه ذخیره می‌کنه.
نکته: اسکریپت two.php رو باید از طریق کامند لاین اجرا کنی.

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #2 : 27 بهمن 1393، 04:00 ب‌ظ »
ممنون، من بیشتر علاقه دارم که بدونم آیا یک برنامه آماده ای برای همچین کاری وجود داره یا نه؟(خودم برنامه نویسی بلد نیستم یکمی ادیت و لگو بازی با کدهابلدم  ;D)
من با این اسکریپتی که نوشتم می تونم فقط pdf و mp3 درس های سایت جدیدش رو دانلود کنم ولی چیزی که پست اول گفتم نیست:
#!/bin/bash
read -p "Which unit do you want to download? (just number) > "
unit=$REPLY
proxychains wget -O $unit-source http://www.bbc.co.uk/learningenglish/english/course/lower-intermediate/unit-$unit/downloads
grep -Po '(?<=href=")[^"]*' $unit-source | grep -E '(.mp3|.pdf)' > dl-$unit.txt

cat dl-$unit.txt
read -p "Do you want to download files now? [yes|no] > "
if [ $REPLY == "yes" ]; then
mkdir unit-$unit
proxychains aria2c -c -x16 -s16 -k 1M -j2 -i dl-$unit.txt -d unit-$unit
else
exit
fi

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19722
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #3 : 27 بهمن 1393، 04:38 ب‌ظ »
از wget استفاده کن
$ man wget
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین محسن صفری

  • Jr. Member
  • *
  • ارسال: 47
  • جنسیت : پسر
    • صفری آنلاین
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #4 : 27 بهمن 1393، 10:08 ب‌ظ »
wget سوییچ A- را دارد که فقط فایلهایی با پسوند داده شده را دانلود می کند و همچنین سوییچ m- که کل لینکها را دانلود می کند . ترکیب این دو تا شاید بتونه مشکل شما را حل کنه .

ولی من فکر می کنم در سایتهای بزرگ توی انبوه لینکها wget نتونه کاری از پیش ببره .

من اسکریپت زیر را نوشتم . شبیه اسکریپت خودتونه . ولی آدرس صفحاتی که اطمینان دارید لینک هایPDF و یا MP3 داخلوشون هست را داخل یک فایل و در هر خط یک لینک قرار می دهید . اینجوری  اطمینان دارید اسکریپت الکی دور خودش نمی چرخه و بعد به صورت زیر برنامه را فراخوانی می کنید :

$ dowloader file

کد برنامه downloader به صورت زیره :

#!/bin/bash

if [ $# -ne 1 ]; then
echo "Usage: $0 filename" 1>&2;
exit 1;
fi

if [ ! -e "$1" ]; then
echo file "$1" not exists! 1>&2;
exit 1;
fi

t="tmp.$$"
>$t || { echo "could not create temp file" 1>&2; exit 1; }

while read line
do
echo "Opening: $line"
curl "$line" 2>/dev/null | egrep -o "http://[^ ]*(\.mp3|\.pdf)" >>$t
done <"$1"

echo "======================================================================="
echo "We grabbed these files: "
nl -ba $t
echo "======================================================================="

echo "Now download each of them"
wget -i $t

rm -f $t

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19722
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #5 : 27 بهمن 1393، 10:52 ب‌ظ »
ولی من فکر می کنم در سایتهای بزرگ توی انبوه لینکها wget نتونه کاری از پیش ببره .

چرا نتونه؟ کارش همینه! کافیه بهش بگید تا عمق چند لینک از صفحه جلو بره
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین محسن صفری

  • Jr. Member
  • *
  • ارسال: 47
  • جنسیت : پسر
    • صفری آنلاین
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #6 : 27 بهمن 1393، 10:55 ب‌ظ »
ولی من فکر می کنم در سایتهای بزرگ توی انبوه لینکها wget نتونه کاری از پیش ببره .

چرا نتونه؟ کارش همینه! کافیه بهش بگید تا عمق چند لینک از صفحه جلو بره

خودتون تصدیق کردید که توی اینجور موارد باید بهش عمق بدیم و محدودش کنیم !

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19722
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #7 : 28 بهمن 1393، 01:24 ق‌ظ »
خودتون تصدیق کردید که توی اینجور موارد باید بهش عمق بدیم و محدودش کنیم !

خب معلومه، اگه محدود نشه کلّ اینترنت رو بارگیری می‌کنه. این «کاری از پیش نبردن» نیست، اتّفاقاً عملکرد بی‌نقصه
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین محسن صفری

  • Jr. Member
  • *
  • ارسال: 47
  • جنسیت : پسر
    • صفری آنلاین
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #8 : 28 بهمن 1393، 10:08 ق‌ظ »
این بخشی از سوالی هست که دوستمون پرسیدن .
چجوری میشه بدون این که همه ی صفحات یک سایت رو دستی باز کرد فایل های  pdf و mp3 داخل اون سایت رو دانلود کرد.

من با wget و با همان سوییچ های A- و m- تست کردم و احساس کردم که لینکهایی که تست می کنه اکثرا غیر مفید هستند و صرف وقت کاملا بی مورد  . از طرفی همون طور که توی سوال آمده دوستمون می خواد همه صفحات رو باز کنه و فایل های PDF اون رو دانلود کنه پس در نتیجه چیزی که اینجا معنی نداره DEPTH هست .

در هنگام اجرا من برای سایت بزرگی مثل BBC فرمول wget و یا هر چیز دیگه ای رو بعید می دونم نتیجه قابل قبولی بده .

لطفا اگر می خواهید بگید بعید نمی دونید دستور wget ای که کل فایل ها را استخراج می کند رو اینجا بنویسید تا عملکرد آن را در هنگام اجرا ببینیم . فقط از depth استفاده نکنید چون در اینجا بی معنیه .

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

آفلاین جادی

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1610
    • در دفاع از آزادی بیان
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #9 : 28 بهمن 1393، 11:04 ق‌ظ »
تایید می کنم که wget کارش همینه. لازم هم نیست عمق بدین بلکه می گین لینک ها رو دنبال کنه ولی فقط در کدوم دامین ها بچرخه. مثلا می گین هر چقدر لازم بود برو جلو ولی از یو آر ال jadi.net خارج نشو یا حتی اگر روی سی دی ان است که بهش می گین که روی این پنج تا یو آر ال بمونه.
آزادی کیبورد حق هر انسان است - جادی

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #10 : 28 بهمن 1393، 10:48 ب‌ظ »
ممنون از پاسخ های دوستان
مثلا برای این آدرس:
http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/
می خوام فقط لینک هایی که تو همین صفحه هست رو باز کنه و فایل های pdf و mp3 داخلش رو دانلود کنه چجوری باید wget رو تنظیم کنم؟

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #11 : 28 بهمن 1393، 11:00 ب‌ظ »
wget سوییچ A- را دارد که فقط فایلهایی با پسوند داده شده را دانلود می کند و همچنین سوییچ m- که کل لینکها را دانلود می کند . ترکیب این دو تا شاید بتونه مشکل شما را حل کنه .

ولی من فکر می کنم در سایتهای بزرگ توی انبوه لینکها wget نتونه کاری از پیش ببره .

من اسکریپت زیر را نوشتم . شبیه اسکریپت خودتونه . ولی آدرس صفحاتی که اطمینان دارید لینک هایPDF و یا MP3 داخلوشون هست را داخل یک فایل و در هر خط یک لینک قرار می دهید . اینجوری  اطمینان دارید اسکریپت الکی دور خودش نمی چرخه و بعد به صورت زیر برنامه را فراخوانی می کنید :

$ dowloader file

کد برنامه downloader به صورت زیره :

#!/bin/bash

if [ $# -ne 1 ]; then
echo "Usage: $0 filename" 1>&2;
exit 1;
fi

if [ ! -e "$1" ]; then
echo file "$1" not exists! 1>&2;
exit 1;
fi

t="tmp.$$"
>$t || { echo "could not create temp file" 1>&2; exit 1; }

while read line
do
echo "Opening: $line"
curl "$line" 2>/dev/null | egrep -o "http://[^ ]*(\.mp3|\.pdf)" >>$t
done <"$1"

echo "======================================================================="
echo "We grabbed these files: "
nl -ba $t
echo "======================================================================="

echo "Now download each of them"
wget -i $t

rm -f $t
ممنون از پاسختون.
من یک لینک بهش دادم ولی دانلود نشد:
sajjad@sajjad-K45VD:~/Desktop/bbc$ proxychains ./downloader dl.txt
ProxyChains-3.1 (http://proxychains.sf.net)
Opening: http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/2014/04/140408_vwitn_stone.shtml
=======================================================================
We grabbed these files:
=======================================================================
Now download each of them
No URLs found in tmp.4773.

آفلاین محسن صفری

  • Jr. Member
  • *
  • ارسال: 47
  • جنسیت : پسر
    • صفری آنلاین
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #12 : 28 بهمن 1393، 11:20 ب‌ظ »
برای من دو تا لینک پیدا کرد :

$ ./c2 f
Opening: http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/2014/04/140408_vwitn_stone.shtml
=======================================================================
We grabbed these files:
     1 http://http-ws.bbc.co.uk.edgesuite.net/mp3/learningenglish/2014/04/140409_vwitn_stone_from_sky_140409_vwitn_stone_audio_au_bb.mp3
     2 http://wsdownload.bbc.co.uk/learningenglish/pdf/2014/04/140409130151_bbc_vwitn_stone_from_sky.pdf
=======================================================================
Now download each of them
--2015-02-17 23:15:10--  http://http-ws.bbc.co.uk.edgesuite.net/mp3/learningenglish/2014/04/140409_vwitn_stone_from_sky_140409_vwitn_stone_audio_au_bb.mp3
Connecting to 127.0.0.1:8080... connected.
Proxy request sent, awaiting response... 200 OK
Length: 1939383 (1.8M) [audio/mpeg]
Saving to: ‘140409_vwitn_stone_from_sky_140409_vwitn_stone_audio_au_bb.mp3’

14% [=====================>                                                                                                                                ] 287,357     --.-K/s  eta 16m 17s ^

به نظر می رسه توی سیستم شما curl نتونسته محتویات صفحه داده شده رو بخونه . تنظیمات به قول دوستان فندق شکنتون رو چک کنید . من این کد رو زدم توی bash :

$ export http_proxy="127.0.0.1:8080"

تا تنظیمات فندق شکن توی shell اعمال بشه .
« آخرین ویرایش: 28 بهمن 1393، 11:25 ب‌ظ توسط محسن صفری »

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #13 : 29 بهمن 1393، 12:35 ق‌ظ »
برای من دو تا لینک پیدا کرد :

$ ./c2 f
Opening: http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/2014/04/140408_vwitn_stone.shtml
=======================================================================
We grabbed these files:
     1 http://http-ws.bbc.co.uk.edgesuite.net/mp3/learningenglish/2014/04/140409_vwitn_stone_from_sky_140409_vwitn_stone_audio_au_bb.mp3
     2 http://wsdownload.bbc.co.uk/learningenglish/pdf/2014/04/140409130151_bbc_vwitn_stone_from_sky.pdf
=======================================================================
Now download each of them
--2015-02-17 23:15:10--  http://http-ws.bbc.co.uk.edgesuite.net/mp3/learningenglish/2014/04/140409_vwitn_stone_from_sky_140409_vwitn_stone_audio_au_bb.mp3
Connecting to 127.0.0.1:8080... connected.
Proxy request sent, awaiting response... 200 OK
Length: 1939383 (1.8M) [audio/mpeg]
Saving to: ‘140409_vwitn_stone_from_sky_140409_vwitn_stone_audio_au_bb.mp3’

14% [=====================>                                                                                                                                ] 287,357     --.-K/s  eta 16m 17s ^

به نظر می رسه توی سیستم شما curl نتونسته محتویات صفحه داده شده رو بخونه . تنظیمات به قول دوستان فندق شکنتون رو چک کنید . من این کد رو زدم توی bash :

$ export http_proxy="127.0.0.1:8080"

تا تنظیمات فندق شکن توی shell اعمال بشه .
ممنون کار کرد، اما این همه لینک رو یکی یکی کپی کردن هم سخته اگه مثلا با دستور grep همه لینک ها به صورت جدا بشن و توی یک فایل ذخیره بشن سرعت کار بیشتر میشه.(خودم یه جستجویی می کنم تو گوگل شاید چیزی پیدا کردم!!)

آفلاین جادی

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1610
    • در دفاع از آزادی بیان
پاسخ : دانلود فایل های داخل یک سایت
« پاسخ #14 : 29 بهمن 1393، 03:59 ب‌ظ »
ممنون از پاسخ های دوستان
مثلا برای این آدرس:
http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/
می خوام فقط لینک هایی که تو همین صفحه هست رو باز کنه و فایل های pdf و mp3 داخلش رو دانلود کنه چجوری باید wget رو تنظیم کنم؟

سجاد جان، من جات بودم حس بدی پیدا می کردم که چرا هیچ کس درست جواب نمی ده. دلیلش اینه که می گیم سوال باید هوشمندانه باشه. یک تلاش بکن. بگو چه دستوری تست کردی و چه مشکلی داشت و بعد آدم ها می گن اشکالش چیه ولی الان سوال برای من که هر روز با wget کار نمی کنم اینه «من لازم دارم در این صفحه لینک ها باز بشن و فایل های ام پی تری و پی دی اف دانلود بشن. لطفا یکی بره راهنما رو نگاه کنه برام دستوری که لازم دارم رو بنویسه».

همیشه اگر می خوای این خطی که پیشنهاد می شه رو بری جلو باید راهنمای دستور (man wget) رو ببینی و بعد سعی کنی و ببینی به چه مشکلاتی بر می خوری و دقیق مطرح کنی که کجا گیر کردی که بشه جواب داد.

ببخشید که روده درازی می کنم ولی باعث پیشرفت دنیای لینوکس می شه (:
آزادی کیبورد حق هر انسان است - جادی