Webページの一部ダウンロード [重複]

Webページの一部ダウンロード [重複]

Webページ(html)の一部のリストを「解析」したいです。 「解析」するには、<title> </title>タグ間のコンテンツを特定のファイルにリダイレクトするだけです。まずfor、ループを使用してwgetから(timeもちろん)curlこのケースがより速いという結論を下します。

だからそれは次のようになります:

for page in $(cat source.txt)
do
 echo "$(curl -s https://somewebpage/some_sub_page/$page \
 | grep '<title>' -A2 | sed -n '2p')" > tmp/$page/index
done 

これらすべてのサブページには、<title>以下のように私が興味を持っている情報が含まれています。

<title>
...
</title>

そのため、結果を得るために一般的なシェルツールを適用しました。私の問題は何ですか?約400ページなので、ページ全体を読み込んだ後にページをgrep読み込むなどの作業には時間がかかります。 HTMLドキュメントの最初の10行だけをロードするなど、より複雑なロードソリューションはありますか?私は古典的なbashユーティリティ(curl、wget)を使用していますが、この問題に適していると思われるユーティリティをお勧めします。

UPD:たぶんこれは完璧な解決策ではないかもしれませんが、headスクリプトを2回減らした後に追加されました。 (コピー)curltime

答え1

正しい方法で試してください。表現する:

注文する:

saxon-lint --html --xpath '//title/text()' http://domain.tld/path

確認するサクソンリント(自己プロジェクト)

あなたはテストすることができますhttps(ただし、ほとんどの場合、HTMLパーサーはSTDERRを非表示にする必要があり、これはサポートされていません。それ以前に作成したコマンドと同じくらい良いです)

xmllint --html --xpath '//title/text()' http://domain.tld/path 2>/dev/null

ついに:

for page in $(cat source.txt); do
    chosen_command "https://somewebpage/some_sub_page/$page" > "/tmp/$page/index"
done

答え2

ここに入りたい内容をパイプできます。

wget -4 -qO- {$query} |\
html2text |\
awk '/<title>/,/<\/title>/{print}'

答え3

一般に、HTTP パフォーマンスを制限する要因は帯域幅ではなく待ち時間です。したがって、ページの一部のみをロードするとパフォーマンスに大きな影響を与えるとは思いません。ただし、HTTPはこれを行うメカニズム(範囲要求)を提供します。そしてもちろん、cURLのサポート

しかし、タイトルの厳格な要件HTML コンテンツの先頭、すぐに表示される場所に表示されます。心に

ページが約400ページ程度になりますが、ページ全体を読み込むのに時間がかかります。

上記のように、ここでは多くの利点が得られないようです(私が間違っている場合は、データグラムモデルではなくストリームベースのプロセッサ実装を検討する必要があります)。より迅速に結果を得るには、ワークロードを分割して複数のハンドラを並列に実行します。

関連情報