grep
私はWebページのすべてのリンクを取得し、目的のコンテンツを取得するために次のコマンドを使用しました。
curl $URL 2>&1 | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | egrep $CMP-[0-9].[0-9].[0-9]$ | cut -d'-' -f3
昨日まででも仲良くしていました。私はcurl
自分で実行してみて、それが返されるのを見ました。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
コマンドが機能しないようにするアップデートはありますか?
編集1:
wget
私は問題に対する態度を変えたこの回答:
wget -q $URL -O - | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | egrep $CMP-[0-9].[0-9].[0-9]$ | cut -d'-' -f3
curl
しかし、なぜこの方法が突然動作を停止したのかはまだわかりません。
ベストアンサー1
警告:正規表現を使用したHTMLの解析ほとんどの場合(すべてではない場合)はい悪いだからあなたの裁量に従って進めてください。
これにより、トリックを実行できます。
curl -f -L URL | grep -Eo "https?://\S+?\""
または
curl -f -L URL | grep -Eo '"(http|https)://[a-zA-Z0-9#~.*,/!?=+&_%:-]*"'
メモ:
これは、「全体」ではなくリンク、または基本的にリンク全体の一部のみが表示される「ハーフリンク」と呼ばれるリンクを考慮しない。これをどこで見たのか覚えていませんが、一部のWebサイトでは特定の/特定のHTMLタグの下に表示されます。編集する:ギルキノ「セミリンク」(正しい用語は相対リンク)で誤って説明したことに対する解決策を提供してください。
curl -Ls URL | grep -oP 'href="\K[^"]+'
- また、リンクの一部ではない項目(「文字」など)は「整理」されません。削除するには、sed などを作成または使用します。
curl -f -L URL | grep -Eo "https?://\S+?\"" | sed 's/&.*//'
最後に、これはリンクが表示される可能性のあるすべての方法を考慮しません。したがって、Webページの構造やHTMLに関する知識が必要です。上記の構造やWebページ自体の例を示すことができない、または表示できないことを考えると、より多くのHTML知識がないと、それに適用される回答を作成することは困難です。
PS:これは明らかでもそうではないかもしれませんが、カールは主に静的リンクに適しているため、動的に生成されたリンク/ URL(PHP、JSなど)を考慮しません。
PS(2):HTMLを解析するためのより良い方法を使用するには、次のより良い答えを使用する必要があります。ギルキノこれは、一般(完全など)およびより最適化されたHTML構文のサポートに適しています。
この場合のように、自分が何をしているのかわからない場合や、要件が非常に制限されている(リンクのみなど)でない限り、正規表現を使用してHTMLを解析することはお勧めできません。