Гость
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Bash скрипт для скачивания картинок с веб-сайта / 16 сообщений из 16, страница 1 из 1
04.11.2015, 04:14
    #39094217
Eugene DMC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Нашел замечательный скрипт с данного источника -
http://www.techpaste.com/2011/08/bash-script-crawl-download-images-web-page/:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#!/bin/bash
#Description: Images downloader
#Filename: img_downloader.sh
if [ $# -ne 3 ];
then
echo "Usage: $0 URL -d DIRECTORY"
exit -1
fi
for i in {1..4}
do
case $1 in
-d) shift; directory=$1; shift ;;
*) url=${url:-$1}; shift;;
esac
done
mkdir -p $directory;
baseurl=$(echo $url | egrep -o "https?://[a-z.]+")
curl –s $url | egrep -o "<img src=[^>]*>" | sed 's/<img src=\"\([^"]*\).*/\1/g' > /tmp/$$.list
sed -i "s|^/|$baseurl/|" /tmp/$$.list
cd $directory;
while read filename;
do
curl –s -O "$filename" --silent
done < /tmp/$$.list



Но к сожалению при выполнение команды под root пользователем, выдает Permission Denied. Подскажите в чем может быть проблема.
Код: powershell
1.
2.
3.
4.
5.
sh-3.2# ./img_downloader.sh http://www.flickr.com/search/?q=linux -d images
sh: ./img_downloader.sh: Permission denied
sh-3.2# whoami
root
sh-3.2# 
...
Рейтинг: 0 / 0
04.11.2015, 09:47
    #39094267
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Eugene DMCНашел замечательный скрипт с данного источника -
http://www.techpaste.com/2011/08/bash-script-crawl-download-images-web-page/:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#!/bin/bash
#Description: Images downloader
#Filename: img_downloader.sh
if [ $# -ne 3 ];
then
echo "Usage: $0 URL -d DIRECTORY"
exit -1
fi
for i in {1..4}
do
case $1 in
-d) shift; directory=$1; shift ;;
*) url=${url:-$1}; shift;;
esac
done
mkdir -p $directory;
baseurl=$(echo $url | egrep -o "https?://[a-z.]+")
curl –s $url | egrep -o "<img src=[^>]*>" | sed 's/<img src=\"\([^"]*\).*/\1/g' > /tmp/$$.list
sed -i "s|^/|$baseurl/|" /tmp/$$.list
cd $directory;
while read filename;
do
curl –s -O "$filename" --silent
done < /tmp/$$.list



Но к сожалению при выполнение команды под root пользователем, выдает Permission Denied. Подскажите в чем может быть проблема.
Код: powershell
1.
2.
3.
4.
5.
sh-3.2# ./img_downloader.sh http://www.flickr.com/search/?q=linux -d images
sh: ./img_downloader.sh: Permission denied
sh-3.2# whoami
root
sh-3.2# 



chmod u+x ./myscript.sh
...
Рейтинг: 0 / 0
04.11.2015, 09:48
    #39094268
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
ваш запуск
img_downloader.sh http://www.flickr.com/search/?q=linux -d images
а в скрипте
mkdir -p $directory;
попробуйте прописать полный путь на директорию images
...
Рейтинг: 0 / 0
04.11.2015, 11:05
    #39094317
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Eugene DMCпри выполнение команды под root пользователемА нафига чисто юзерский скрипт запускать от рута?
...
Рейтинг: 0 / 0
04.11.2015, 11:44
    #39094347
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Eugene DMC,

0. Как правильно сказал vkle, не надо запускать скрипты из интернета от рута. Нигде, никогда и никакие. Как минимум до тех пор, пока вы не будете понимать каждый символ в этом скрипте. Хотя лучше вообще не надо.
1. У скрипта нет прав на исполнение. Надо либо дать права на исполнение как написал MasterZiv, либо запускать файл например так:
bash /path/to/img_downloader.sh
...
Рейтинг: 0 / 0
04.11.2015, 16:42
    #39094474
Eugene DMC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Всем спасибо большое за советы. Скрипт выполняется, но выдает следующий результат:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
bash-3.2$ ./img_downloader.sh http://www.flickr.com/search/?q=linux -d images
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: –s
100    72  100    72    0     0     96      0 --:--:-- --:--:-- --:--:--    96
sed: 1: "/tmp/774.list": invalid command code 7
bash-3.2$ cat /tmp/774.list
bash-3.2$ 



Сергей, подскажите как нужно правильно указать строку вместо
mkdir -p $directory; правильно ли я понимаю что нужно подставить /Users/eugenesheyko/images/ $directory;?
...
Рейтинг: 0 / 0
04.11.2015, 17:58
    #39094547
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Eugene DMC,

1. При обращении к http://www.flickr.com/search/?q=linux сразу же идёт редиректит на http s ://www.flickr.com/search/?q=linux
2. В html-странице указанному адресу ссылок на картинки по запрашиваемому ключевому слову нет.
...
Рейтинг: 0 / 0
04.11.2015, 20:13
    #39094624
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Eugene DMCВсем спасибо большое за советы
Сергей, подскажите как нужно правильно указать строку вместо
mkdir -p $directory; правильно ли я понимаю что нужно подставить /Users/eugenesheyko/images/ $directory;?
img_downloader.sh http://www.flickr.com/search/?q=linux -d /Users/eugenesheyko/images
...
Рейтинг: 0 / 0
05.11.2015, 00:54
    #39094759
Eugene DMC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Некоторое время вроде как скрипт отрабатывает, потом выдает следующее:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
bash-3.2$ ./img_downloader.sh https://www.flickr.com/search/?q=linux -d /Users/eugenesheyko/images
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:29 --:--:--     0curl: (6) Could not resolve host: –s
100  227k  100  227k    0     0  55729      0  0:00:04  0:00:04 --:--:-- 55742
sed: 1: "/tmp/803.list": invalid command code 8
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
GIF89a????!?,D;curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information

bash-3.2$ cat /tmp/803.list
https://geo.yahoo.com/b?s=792600534
https://y3.analytics.yahoo.com/p.pl?js=no&a=10001109650879&b=search-photos-unified-page-view&.ys=792600534
bash-3.2$ 
...
Рейтинг: 0 / 0
06.11.2015, 04:43
    #39096042
Eugene DMC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Всем привет еще раз:)
Установил параметр -x в начале скрипта, чтобы можно было отследить полное его выполнение:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
bash-3.2$ cat img_downloader.sh
#!/bin/bash -x
#Description: Images downloader
#Filename: img_downloader.sh
if [ $# -ne 3 ];
then
echo "Usage: $0 URL -d DIRECTORY"
exit -1
fi
for i in {1..4}
do
case $1 in
-d) shift; directory=$1; shift ;;
*) url=${url:-$1}; shift;;
esac
done
mkdir -p $directory;
baseurl=$(echo $url | egrep -o "https?://[a-z.]+")
curl –s $url | egrep -o "<img src=[^>]*>" | sed 's/<img src=\"\([^"]*\).*/\1/g' > /tmp/$$.list
sed -i "s|^/|$baseurl/|" /tmp/$$.list
cd $directory;
while read filename;
do
curl –s -O "$filename" --silent
done < /tmp/$$.list
bash-3.2$ 



Скрипт вроде как отрабатывает, но выдает такое сообщение "curl: Remote file name has no length!".
Полный результат скрипта ниже.

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
bash-3.2$ ./img_downloader.sh http://www.web-statistics.org -d images
+ '[' 3 -ne 3 ']'
+ for i in '{1..4}'
+ case $1 in
+ url=http://www.web-statistics.org
+ shift
+ for i in '{1..4}'
+ case $1 in
+ shift
+ directory=images
+ shift
+ for i in '{1..4}'
+ case $1 in
+ url=http://www.web-statistics.org
+ shift
+ for i in '{1..4}'
+ case $1 in
+ url=http://www.web-statistics.org
+ shift
+ mkdir -p images
++ echo http://www.web-statistics.org
++ egrep -o 'https?://[a-z.]+'
+ baseurl=http://www.web
+ curl $'?\200\223s' http://www.web-statistics.org
+ sed 's/<img src=\"\([^"]*\).*/\1/g'
+ egrep -o '<img src=[^>]*>'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: –s
100 29489    0 29489    0     0  42122      0 --:--:-- --:--:-- --:--:-- 42122
+ sed -i 's|^/|http://www.web/|' /tmp/840.list
sed: 1: "/tmp/840.list": invalid command code 8
+ cd images
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/logo.png --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/team1.png --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/team2.png --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/team3.png --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/team4.png --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/testimonial1.jpg --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/testimonial2.jpg --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/testimonial3.jpg --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/blank-latestposts.png --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/blank-latestposts.png --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/map25-redish.png --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/envelope4-green.png --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename
+ curl $'?\200\223s' -O /wp-content/themes/zerif-lite/images/telephone65-blue.png --silent
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
+ read filename



Все картинки с указанной веб-страницы записываются в текстовом виде в папке /tmp:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
bash-3.2$ cat /tmp/840.list
/wp-content/themes/zerif-lite/images/logo.png
/wp-content/themes/zerif-lite/images/team1.png
/wp-content/themes/zerif-lite/images/team2.png
/wp-content/themes/zerif-lite/images/team3.png
/wp-content/themes/zerif-lite/images/team4.png
/wp-content/themes/zerif-lite/images/testimonial1.jpg
/wp-content/themes/zerif-lite/images/testimonial2.jpg
/wp-content/themes/zerif-lite/images/testimonial3.jpg
/wp-content/themes/zerif-lite/images/blank-latestposts.png
/wp-content/themes/zerif-lite/images/blank-latestposts.png
/wp-content/themes/zerif-lite/images/map25-redish.png
/wp-content/themes/zerif-lite/images/envelope4-green.png
/wp-content/themes/zerif-lite/images/telephone65-blue.png
bash-3.2$ 



Подскажите плз как возможно осуществить сохранение файлов в заново созданную папку?
...
Рейтинг: 0 / 0
06.11.2015, 05:51
    #39096051
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Это что за хрень непотребная нарисовалась?
Eugene DMC
Код: sql
1.
+ curl $'?\200\223s' http://www.web-statistics.org


Там должно быть "-s" (дефис эс), а не этот бредовый копипаст из ворда. Проверяйте, нет ли ещё каких сюрпризов.

Eugene DMCВсе картинки с указанной веб-страницы записываются в текстовом виде в папке /tmp:
Код: powershell
1.
bash-3.2$ cat /tmp/840.list

Неа. Это не картинки, а фрагменты ссылок на картинки. И записываются они не "в текстовом виде в папке /tmp", а в файл, который Вы читать изволите.

Eugene DMCПодскажите плз как возможно осуществить сохранение файлов в заново созданную папку?Таки прочтите код внимательно ещё раз. Именно это там и делается.
...
Рейтинг: 0 / 0
06.11.2015, 05:59
    #39096052
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Eugene DMC
Код: sql
1.
baseurl=$(echo $url | egrep -o "https?://[a-z.]+")

Явная ошибка. В классе должен быть дефис, как допустимый элемент имени домена.
Оттуда и лезет обрезка:
Код: sql
1.
+ baseurl=http://www.web
...
Рейтинг: 0 / 0
06.11.2015, 11:49
    #39096364
Мутаген
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
wget с ключом -p справится с задачей гораздо лучше этого дурацкого скрипта
...
Рейтинг: 0 / 0
06.11.2015, 15:12
    #39096714
Eugene DMC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
vkle,

На самом деле там и указан параметр -s, а не $:
Код: powershell
1.
curl –s $url | egrep -o "<img src=[^>]*>" | sed 's/<img src=\"\([^"]*\).*/\1/g' > /tmp/$$.list

.

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#!/bin/bash -x
#Description: Images downloader
#Filename: img_downloader.sh
if [ $# -ne 3 ];
then
echo "Usage: $0 URL -d DIRECTORY"
exit -1
fi
for i in {1..4}
do
case $1 in
-d) shift; directory=$1; shift ;;
*) url=${url:-$1}; shift;;
esac
done
mkdir -p $directory;
baseurl=$(echo $url | egrep -o "https?://[a-z.]+")
curl –s $url | egrep -o "<img src=[^>]*>" | sed 's/<img src=\"\([^"]*\).*/\1/g' > /tmp/$$.list
sed -i "s|^/|$baseurl/|" /tmp/$$.list
cd $directory;
while read filename;
do
curl –s -O "$filename" --silent
done < /tmp/$$.list            



Подскажите где именно должен быть дефис в этой строчке -
Код: powershell
1.
baseurl=$(echo $url | egrep -o "https?://[a-z.]+")
...
Рейтинг: 0 / 0
06.11.2015, 18:37
    #39096912
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
Eugene DMCvkle,

На самом деле там и указан параметр -s, а не $:
Код: powershell
1.
curl –s $url | egrep -o "<img src=[^>]*>" | sed 's/<img src=\"\([^"]*\).*/\1/g' > /tmp/$$.list

Вы это своему командному интерпретатору объясняйте. Он Вам сказал в отладчике, что там бредятина, но Вы предпочли поспорить. Со мной - не имеет смысла.

Вообще, при копипасте "фик знает откуда" часто бывают подобного рода ошибки. Проще всего перепечатать проблемное место заново.
...
Рейтинг: 0 / 0
14.11.2015, 23:02
    #39103658
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bash скрипт для скачивания картинок с веб-сайта
брад галимый. я скачивал коллекцию картинок на вноый товар с сайта одной строкой по типу xsel | wget -O - | sed | wget

ну иногда небольшие вариации, например если надо переименовал файл..

Код: bash
xsel -b|wget -i - -O -|sed -rn 's/^.*"(http[^"]+.(gif|jpg|jpeg)).*/\1/p' |sed 's/thumb/full/' | wget -ci -


что-то по типу этого. но там не было двух картинок (нужных мне) указанных в одной строке исходников. (и второй сед явно не обязателен :) )
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Bash скрипт для скачивания картинок с веб-сайта / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]