cronジョブとして実行すると、lynx -dumpの出力が異なります。

cronジョブとして実行すると、lynx -dumpの出力が異なります。

私は数年間、lynx -dumpラテン語以外の文字を含むWebページのコンテンツを「スクレイピング」してきました。ページコンテンツをファイルに保存し、sedプロキシを介して変更し、電子メール本文に含めて送信します。これはすべて私が作成したスクリプト内で発生します。しかし、ディストリビューション(UbuntuからVoidへ)を切り替えた後、スクリプトが期待どおりに機能しないことがわかりました。以下のように障害点を確認しました。

コマンドラインでスクリプトの最初の部分(内容lynx -dump URLと内容を保存したいファイル名を含む部分)を実行すると、すべてが期待どおりに機能します。ファイルには、私が期待するビラテン文字が表示され、含まれています。ただし、cronジョブと同じコマンドを指定してプロセスを自動化しようとすると、結果は異なります。期待したファイルが表示されますが、同じテキストが私が望むものではなく、予想されるビラテン文字を含むのではなく、ラテン文字に翻訳されています。私のスクリプトの次の内容は、ラテン語以外の文字の存在に依存しているため失敗します。

それでは、cronジョブではなくコマンドラインでlynxコマンドを実行しているかどうかによって、これらの奇妙な結果が表示されるのはなぜですか?おそらく、サイトはどのような種類の検出を実行し、ある場合には翻訳されたページを提供しますが、他の場合には提供しない可能性がありますか?それとも、Lynx自体がビラテン文字をラテン文字に翻訳していますか?コメントありがとうございます。

答え1

lynx現在のロケールを使用して、ページを表示するために使用できる文字セットを決定します。ただし、この情報を使用できない可能性があるcronため、次のことを行う必要があります。

lynx -display_charset=UTF-8 -dump http://example.com/some/page.html

(もちろん、UTF-8と異なる場合は、システムの文字セットを使用してください。)

答え2

スラソニーは音訳を使うロケールプロンプトに設定します。で実行している場合、cronロケールはPOSIXである可能性が高いです。まず見てみましょう。

Lynx 構成の場合は、ここから始めます。

  • 文字セット(トピック)
  • CHARACTER_SET
  • LOCALE_CHARSET

    LOCALE_CHARSET書くCHARACTER_SETtrueの場合、現在のロケールを使用して対応するMIME名を見つけ、それを表示文字セットとして使用します。

関連情報