ページ上のリンクを検索するbashスクリプトを作成しています。ページからソースコードをダウンロードし、その中のリンクを見つけます。ㅏタグを付けて配列に保存します。$link。ただし、問題は、一部のリンクには完全なURLが含まれておらず、サブページまたはファイルのみが含まれることです。ページのソースコードが次のとおりです。
<h1>Julian's crappy webpage</h1>
<a href="http://one.com">Page One</a>
<a href="https://two.com">Page Two</a>
<a href="/three">Page Three</a>
<a href="four">Page Four</a>
リンクが見つかると、配列は次のようになります。
http://one.com
https://two.com
/three
four
私も変数があります$urlこれは ' のような有効な URL です。https://google.com」
すべてのアイテムを作成する方法が必要です。$linkプロジェクトによって異なることをすることが効果的です。各項目について$link:
- エントリが/で始まる場合は、次のものをマージします。$url+${リンク[n]}
- エントリが「/」、「https://」、または「http://」で始まらない場合は、次のものを組み合わせてください。$url+"/"+${リンク[n]}
たとえば、上記の期待される応答は次のとおりです。
http://one.com
https://two.com
https://google.com/three
https://google.com/four
答え1
これを達成するために使用できるサンプルスクリプトは次のとおりです。
#!/bin/bash
shopt -s extglob
readonly URL="https://google.com"
links=($(grep -o -P '(?<=href=").*(?=")' source.html)) # read into array
for ((i=0; i<${#links[@]}; i++))
do
case ${links[$i]} in
http*)
: # do nothing
;;
/*)
links[$i]="$URL"${links[$i]}; # update array
;;
*)
links[$i]="$URL/"${links[$i]}; # update array
;;
esac
done
source.html
現在ディレクトリにあるWebページのダウンロードソースと見なされます。
答え2
正規表現を使用してHTMLを解析する方法は数多くあります。エラー。これは、HTMLファイルからURLを抽出するのと同じように、一見単純なものにも当てはまります。
したがって、正規表現を使用しないでください。次のように使用してください。
#! /bin/bash
htmlfile='./file.html'
URL='https://google.com'
links=($(lynx -dump -listonly -nonumbers -force_html "$htmlfile" |
sed -e "s=^file://=$URL="))
printf "%s\n" "${links[@]}"
これが必要ですサルクインストールされています。 lynx
ncursesに基づくテキストモードのWebブラウザです。ここで使用されているのは、lynx
すでに解決されているHTMLファイルのリンクリストを生成することです。思ったよりずっと難しいHTMLコンテンツ(ブラウザの操作の重要な部分)でURLを確実に見つける方法に関する問題です。 URLを抽出するためにHTMLを解析するのに良いライブラリモジュールがあるか、perl
他の言語があります。python
シェルスクリプトの場合lynx
。
man lynx
詳細より。
lynx
Linuxディストリビューションや他のUNIXのようなオペレーティングシステム用に事前にパッケージ化されて提供されることはほぼ確実です。そうでない場合は、上記のリンクからソースコードを取得できます。