アーカイブされたウェブサイトからすべてのリンク(ダウンロードを除く)を抽出して印刷します。

アーカイブされたウェブサイトからすべてのリンク(ダウンロードを除く)を抽出して印刷します。

アーカイブされたウェブサイトからすべてのリンク(ダウンロードではない)を抽出して印刷したいです。つまり、www.foosite.com/archive すべてのフォルダとサブフォルダを繰り返します。

www.foosite.com/archive シナリオ:私はダウンロード可能なファイルを含むディレクトリとサブディレクトリを含むこのようなWebアーカイブにいます。

-man.pdf -.listing.txt |-Books/ |-my_book.pdf |-new_books.pdf |-Classics/ |-Songs |-annie's.song.mp3 |-summer.of.69.mp3 -robot.txt ................ すべてのディレクトリを(再帰的に)繰り返し、すべての(ダウンロード可能な)ファイルパス(URL)を取得します。 https://www.asite.com/man.pdf https://www.asite.com/read.txt https://www.asite.com/Books/my_book.pdf https://www.asite.com/Books/new_books.pdf https://www.asite.com/Classics/..... https://www.asite.com/Classics/........ https://www.asite.com/Songs/annie's.song.mp3 ....... https://www.asite.com/terms.txt ............................

しかし、単純なWebナビゲーション技術をシミュレートするために使用したいシェルスクリプトでは、出力はlynx無限の再帰に閉じ込められます(問題は実装の問題ではなく構文の問題に近いと思います)。

パスワード:

#!/bin/bash

links=`/usr/bin/lynx -dump -listonly -nonumbers $1`

function dump_primary_links() {

        for link in $links 
        do
            echo "$link" | grep -P "\/$" > /dev/null
            # if link ends with "/" that's a directory 

            if [  $? -eq 0  ]; then
                echo "primary link:$link"
                print_directory_items $link
                 # now recursively traverse the directory 
            else
                echo "$link" # else a normal link

            fi

        done


    }



function print_directory_items() {
    # get contents of directory 
    lst=`/usr/bin/lynx -dump -listonly -nonumbers $link`


     for lnk in $lst 
        do
            echo "$lnk" | grep -P "\/$" > /dev/null 
            # if there is a directory in $lst then travel directory recursively 

            if [  $? -eq 0  ]; then

                link=$lnk
                print_directory_items $link
            else
                echo "$lnk" # directory contents
            fi
       done

    }


get_link

気づく:この場合、Python(RequestsとBeautifulsoupまたはScrapy)が良いソリューションになることを知っていますが、単純なUNIXナビゲーションシミュレーションまたは「Webディレクトリナビゲーション」が必要です。

ベストアンサー1

ミラーサイトを使用することもできますがwget、何もダウンロードしないようにWebスパイダーとして機能するように指定することもできます。

したがって、これは可能ですが、ログを保存する必要があります。

wget --no-directories --mirror --spider "$url" 2>&1 | tee "$log"

私の場合、ログには次のようなものが見つかりました。

Spider mode enabled. Check if remote file exists.
--2017-12-19 07:19:23--  URL

grepその後、URLを検索するために使用します。

grep -P -o -e '(?<=^--....-..-.. ..:..:..--  )(.*)' "$log"

例:

$ wget --no-directories --mirror --spider https://utw.me/file/scripts/ 2>&1 | tee log.txt
...
$ grep -P -o -e '(?<=^--....-..-.. ..:..:..--  )(.*)' log.txt
...
https://utw.me/file/scripts/Fate%20Zero/%5BUTW%5D%20Fate%20Zero%20-%2001.ass
https://utw.me/file/scripts/Fate%20Zero/%5BUTW%5D%20Fate%20Zero%20-%2002.ass
https://utw.me/file/scripts/Fate%20Zero/%5BUTW%5D%20Fate%20Zero%20-%2003.ass
https://utw.me/file/scripts/Fate%20Zero/%5BUTW%5D%20Fate%20Zero%20-%2004.ass
https://utw.me/file/scripts/Fate%20Zero/%5BUTW%5D%20Fate%20Zero%20-%2005.ass
...

おすすめ記事