Announcement

Collapse
No announcement yet.

HOWTO: wget, lynx, awk - parsing html pages for rapidshare links

Collapse

Forum Topic List

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • HOWTO: wget, lynx, awk - parsing html pages for rapidshare links

    HOWTO: parsing html pages for rapidshare links using wget, lynx, awk, egrep

    большинство фильмов и книг на этом сайте было добыто при помощи rapidshare.com и командной строки linux. Ниже я хочу рассказать, какие команды были для этого использованы.

    самый благоприятный случай, это когда у вас есть линк, ведущий в директорию того или иного пользователя на rapidshare.com, к примеру, вот такой:
    Code:
    http://rapidshare.com/users/JI39C
    "разобрать" подобного рода страничку очень легко, используя текстовый браузер lynx и команды grep и awk:

    Code:
    lynx -dump http://rapidshare.com/users/JI39C|egrep rapidshare.*\.rar|awk {'print $2'} > url.list.txt
    получив список файлов в таком вот "чистом" виде:
    Code:
    http://rapidshare.com/files/41973330/Pover.v.Mechtu._1985_.rar
    http://rapidshare.com/files/41973085/Music.from.Movies._1994_.part2.rar
    http://rapidshare.com/files/41973417/Neset.Menya.Techenie._1996_.rar
    http://rapidshare.com/files/41973427/Dolgozhdanny.Samolet._1986_.rar
    http://rapidshare.com/files/41973455/Music.from.Movies._1994_.part1.rar
    http://rapidshare.com/files/41973321/Ot.Pechali.Do.Radosti._1987_.rar
    http://rapidshare.com/files/41973066/Bonus.rar
    http://rapidshare.com/files/41973574/Zerkalo._1996_.rar
    http://rapidshare.com/files/41973315/Krysha.Doma.Tvoego._1983_.rar
    http://rapidshare.com/files/41973411/Lunnaya.Dorozhka._1996_.rar
    мы можем использовать его как источник данных для команды, которая будет загружать файлы с серверов rapidshare. Если у вас есть аккаунт на rapidshare.com то можно использовать следующий скрипт для загрузки:
    Code:
    #!/bin/bash
    usage="Usage: `basename $0` [file]"
    if [ $# -ne 1 ] ; then echo $usage; exit 1; fi
    username="[I]username[/I]"
    password="[I]password[/I]"
    wget --user=$username --password=$password -i $1
    сохраните данный скрипт в файле, скажем rapida, сделайте его выполняемым,
    Code:
    chmod 755 rapida;mv rapida /your/path
    поместите в директорию, находящуюся в вашем system path и вы теперь имеете возможность, находясь в любой директории, загружать туда файлы в автоматическом режиме, используя вот такую команду:
    Code:
    #rapida url.list.txt
    после того, как процесс выгрузки заданного вами списка завершился, вы можете автоматически же разархивировать все загруженные файлы при помощи одной команды. Представьте, если у вас в директрии содержится 100 и более архивных файлов, сколько времени у вас займет распаковать их каждый по отдельности?
    Code:
    for files in `ls|egrep "[^1-9]*1\.rar|[^0-9]\.rar"`;do rar -y x $files;done
    код, приведенный выше, немного громоздкий, но зато достаточно универсальный, по крайней мере для тех архивов, которые встречались мне последнее время. Если у вас в директории ТОЛЬКО многотомные архивы из более чем 10 томов, то команда может быть короче:
    Code:
    for files in `ls *part01.rar`;do rar -y x $files;done
    часто возникает необходимость переименовать больше количество файлов по заданному шаблону. Создадим скрипт, который принимает в качестве параметров:
    1. расширение файлов
    2. часть, которую нужно заменить
    3. часть, на которую нужно заменить


    далее, сохраним наш скрипт в файле renamer.sh, сделаем его исполняемым:

    Code:
    #!/bin/bash
    mask=$1
    pattern=$2
    replace=$3
        for files in `ls -A *$mask`;
            do
              source=$files
              dest=`echo $files|sed "s/$pattern/$replace/"`
              mv $source $dest;
            done
    и, к примеру, чтобы переименовать кучу файлов с расширением mp3 в другую кучу, но заменив в имени файла один куск на другой, выполним следующую команду:

    Code:
    ./renamer.sh mp3 [I]oldname newname[/I]
    часто возникает ситуация, когда нужно сравнить два текстовых файла с линками и выделить только разницу. Для этого следует использовать команду diff вот так:
    Code:
    diff file1 file2
    еще бывает, что в процессе загрузки большого списка файлов вы превысили ваш лимит в 25 гигабайт за 5 дней (это текущий лимит на rapidshare.com). В таком случае все линки сверх лимита будут сохранены на диске в файлах с нулевым или иным, но очень небольшим размером. Если потом запустить скрипт снова, то новые архивы будут переписаны в формате filename.ext.1 filename.ext.2 filename.ext.3 и так делее.
    Для того, чтобы выбрать из большого списка линков только те, которые в прошлый раз не были загружены, ножно выбрать все файлы малого размера, сравнить их имена с именами в первоначальном списке и сгенерировать новый листинг. Делаем это так:

    Code:
    for lines in `find . -size -10k|grep rar`;do cat full.list.txt|grep $lines;done > rest.txt
    в результате мы получаем на выходе новый список, но только с теми файлами, коотрые не были загружены в прошлый раз.

    встречаются и другие ситуации, но я пока вспомнил только самые "популярные". Возможно, данная тема будет иметь продолжение.

  • #2
    Re: HOWTO: wget, lynx, awk - parsing html pages for rapidshare links

    скрипт, который помогает автоматически загружать списки файлов с rapidshare.com (я его описал в предыдущем сообщении) можно немного усовершенствовать. Дело в том, что в том виде скрипт работает ТОЛЬКО с файлами, содержащими списки, а если возникает необходимость загрузить всего один файл, то приходилось пароль и логин вводить вручную или создавать файл с одним единственным линком внутри. Добавив в скрипт проверку передаваемого параметра ( файл это с линками или строка (url) ), мы сделаем наш скрипт более удобным и функциональным:

    Code:
    #!/bin/bash
    usage="Usage: `basename $0` [file]|url (single file)"
    if [ $# -lt 1 ] ; then echo $usage; exit 1; fi
    username="[I][COLOR="Red"]username[/COLOR][/I]"
    password="[I][COLOR="Red"]password[/COLOR][/I]"
    auth=" --user=$username --password=$password"
    if [ -f $1 ] && [ -s $1 ]; then
       wget $auth -i $1
    else
       wget $auth $1
    fi

    Comment

    Working...
    X