6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HTMLコンテンツをcurlで取得して特定タグ内だけ抜き出す

Last updated at Posted at 2020-03-09

コンテンツ取得

コンテンツ取得
#!/bin/sh
curl -fsSL http://www.wisdomsoft.jp/190.html |
    tr '\n\r' '\t' |
    sed -e 's/\t//g' |
    grep -oP '<div class="SectionContents".*?</div>' |
    sed -re 's_</?p>_\n_g' |
    grep -vE '</?div'
  1. curlでURLのコンテンツ取得
  2. trで改行(\r\n)をタブ文字(\t)に変換
  3. sedでタブ文字を消す
  4. grepでSectionContentsクラスを抜き出す。-PでPerl正規表現を使って最短一致する。これをつけないと最長一致でを抜き出してくる
  5. sedで<p>タグを改行にする。-rで拡張正規表現を使わないと?(0文字または1文字)を表現できない
  6. grep -vで<div>タグを消す。-Eで拡張正規表現を使わないと?(0文字または1文字)を表現できない

リンク抜き出し

リンク抜き出し
#!/bin/sh
curl -fsSL http://www.wisdomsoft.jp/189.html |
    grep -o '<li><a href=".*.html">.*</a></li>' |
    tr '"<>' ' ' |
    awk '{print "http://www.wisdomsoft.jp/"$4.html,$5}'
  1. curlでコンテンツ取得
  2. grep -oでリストタグ内のリンク行のみ抜き出し
  3. trで "と<と>をスペースに変換
  4. awkで特定列の取得とリンクの保管

wisdomsoftコンテンツをすべてtxtに書き出す

wisdomsoftコンテンツをすべてtxtに書き出す
#!/bin/sh
# http://www.wisdomsoft.jp/189.htmlのリンクから
# リンク先のコンテンツをwisdomsoft.txtに書き出す
URL="http://www.wisdomsoft.jp/189.html"
./wisdomsoft_link.sh ${URL} |
    awk '{print $1}' |
    xargs -I{} ./wisdomsoft_content.sh {} > wisdomsoft.txt

まとめ

pythonのBeautifulSoup4を使ってコネコネしていましたが、ふとshellスクリプトを組みたくなって、15分休憩時間X3で作ることができました。shellって素晴らしい。

sed -rとかgrep -Pとか拡張正規表現1を使う方法が勉強になりました。
この程度だったらgrepよりawkの方がパフォーマンス良いのかな?
改善あったら教えてください。。

Gist/u1and0

  1. 【正規表現】個人的備忘

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?