前回に続いてテキストブラウザLynxを使います。前回はLynxを使ってページを閲覧しました。今回はLynxを使ってWebページ内の検索などを行います。なお、見やすさの都合でUbuntu上でのLynxを使用していますが、Raspberry PiやmacOSでも同様です。(UbuntuはmacOS+Multipassで動作させています)

今回もこれまでのようにサンプルで利用するファイル・ディレクトリはデスクトップのsampleディレクトリとしています。デスクトップにsampleディレクトリがない場合は作成しておいてください。(コマンド入力ならmkdir ~/Desktop/sampleとして作成することができます)
また、カレントディレクトリも上記の場所になります。cd ~/Desktop/sampleのようにコマンドを入力してカレントディレクトリを変更しておけばよいでしょう。

Lynx上でページ内検索をする

 ページ内の検索ならLynxで該当するWebページを表示してから/キーを押します。

検索する文字列を入力するように促されるので検索したい文字列を入力してからリターンキーを押します。該当する文字列があれば対象箇所がリストアップされます。

該当する文字列がない場合は〜not foundといった見つからなかったことを示すメッセージが表示されます。このメッセージはしばらくすると消えます。

コマンドラインから検索する

 LynxはWebページを表示しなくてもコマンドラインから検索することもできます。Lynxにはdumpオプションを指定するとWebページ内の文字だけをピックアップして出力する機能があります。WebページでHTMLタグを削除したり面倒なことをするくらいならLynxでdumpオプションを指定して出力させてから様々な処理をさせる方が楽でしょう。特にRaspberry Piは最初からLynxが入っているのでcronなどと組み合わせれば定期的に特定のWebページの内容を保存しておくようなこともできます。
 それではdumpオプションを指定してWebページを表示してみましょう。以下のようにすると、この連載の目次ページが表示されます。

lynx -dump https://news.mynavi.jp/techplus/series/natonakucommand/

瞬時に表示されてしまいます。ページの先頭から見るにはlessやmoreなどのページャー関係のコマンドを使うと便利です。このようにすれば特にWebブラウザを使わずに手慣れた(?)lessなどを使って簡単にページを閲覧できることになります。

lynx -dump https://news.mynavi.jp/techplus/series/natonakucommand/ | less

なお、macOSの場合、日本語部分が文字化けしてしまうので以下のように-display_charset=UTF-8を指定する必要があります。以後もmacOSで日本語等を含むページを処理する場合は、このオプションを指定する必要があります。

lynx -dump -display_charset=UTF-8 https://news.mynavi.jp/techplus/series/natonakucommand/ | less

パイプ(|)を使えるということはgrepを使って検索できるということです。早速grepで検索してみましょう。grepの後に検索する文字列を指定します。該当する文字列がある場合は該当行が表示されます。

lynx -dump https://news.mynavi.jp/techplus/series/natonakucommand/ | grep 'IoT'

該当する文字列がない場合は何も表示されません。

lynx -dump https://news.mynavi.jp/techplus/series/natonakucommand/ | grep 'sample'

Webページを保存する(テキスト)

 Lynxのdumpオプションを使えばWebページの内容を保存しておくことができます。これはリダイレクト(>)を使えば簡単にできます。以下の例はindex.txtという名前でカレントディレクトリに保存します。

lynx -dump https://news.mynavi.jp/techplus/series/natonakucommand/ > index.txt

特定の名前でなくコマンド実行時の日付で保存したい場合は以下のようになります。

lynx -dump https://news.mynavi.jp/techplus/series/natonakucommand/ > "index_$(date +%Y年%m月%d日).txt"

ニュースサイトなど頻繁に更新されるページの場合は以下のように時間を含めて保存しておくこともできます。

lynx -dump https://news.mynavi.jp/techplus/series/natonakucommand/ > "index_$(date +%Y年%m月%d日%H時%M分%S秒).txt"

なお、リンク先のURLを不要な場合は以下のようにnolistオプションを指定します。

lynx -dump -nolist URL https://news.mynavi.jp/techplus/series/natonakucommand/ > index_noURL.txt

Webページを保存する(HTML)

 テキストでなく生のHTMLのまま保存することもできます。この場合はsourceオプションを指定します。生のHTMLを保存するだけならLynxでなくcurlやwgetを使う方法もあります。(第6回参照

lynx -source https://news.mynavi.jp/techplus/series/natonakucommand/ > index.html

 名前のHTMLやテキストだけでなくリンク(URL)のみをピックアップすることもできます。この場合、listonlyオプションを指定します。

lynx -dump -listonly https://news.mynavi.jp/techplus/series/natonakucommand/ | less

 Lynxを上手に使えば手軽にWeb上のデータ検索や保存などを行うことができます。工夫次第では面白いこともできるでしょう。  では、また次回。

著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。