curl
コマンドを使用してファイルをダウンロードしました。html
homeoint.org/books/boericmm/d.htmそしてファイルとして保存してみてください。
関連部分は次のとおりです。
<p><font size="2"><a href="d/dam.htm" target="_top">DAM</a> ------>
DAMIANA (TURNERA)<br>
<a href="d/daph.htm" target="_top">DAPH</a> ------> DAPHNE INDICA<br>
<a href="d/dig.htm" target="_top">DIG</a> ------> DIGITALIS PURPUREA
(DIGITALIS)<br>
<a href="d/dios.htm" target="_top">DIOS</a> ------> DIOSCOREA VILLOSA<br>
<a href="d/diosm.htm" target="_top">DIOSM</a> ------> DIOSMA LINCARIS<br>
<a href="d/diph.htm" target="_top">DIPH</a> ------> DIPHTHERINUM<br>
<a target="_top" href="d/dol.htm">DOL</a> ------> DOLICHOS PRURIENS
(DOLICHOS PURIENS - MUCUNA)<br>
<a href="d/dor.htm" target="_top">DOR</a> ------> DORYPHORA
DECEMLINEATA (DORYPHORA)<br>
<a href="d/dros.htm" target="_top">DROS</a> ------> DROSERA
ROTUNDIFOLIA (DROSERA)<br>
<a href="d/dubo-m.htm" target="_top">DUBO-M</a> ------> DUBOISIA
MYOPOROIDES (DUBOISIA)<br>
<a href="d/dulc.htm" target="_top">DULC</a> ------> DULCAMARA<br>
</font></p>
grepの値が必要です
">" to "<br>"
出力は次のようになります。
DAMIANA (TURNERA)
DAPHNE INDICA
DIGITALIS PURPUREA (DIGITALIS)
DIOSCOREA VILLOSA
DIOSMA LINCARIS
DIPHTHERINUM
DOLICHOS PRURIENS (DOLICHOS PURIENS - MUCUNA)
DORYPHORA DECEMLINEATA (DORYPHORA)
DROSERA ROTUNDIFOLIA (DROSERA)
DUBOISIA MYOPOROIDES (DUBOISIA)
DULCAMARA
grepコマンドを使用しようとしています。
cat d.htm | grep -o -P '(?<=> ).*(?=<br>)'
しかし、私の出力は不完全です。
答え1
lynx
HTMLをテキストとしてレンダリングし、各行の後のスペースの前にあるすべての項目をsed
削除するために使用されます>
(ただし、実際に影響を受ける行のみを印刷)。
$ lynx --dump 'http://homeoint.org/books/boericmm/d.htm' | sed -n 's/.*> //p'
DAMIANA (TURNERA)
DAPHNE INDICA
DIGITALIS PURPUREA (DIGITALIS)
DIOSCOREA VILLOSA
DIOSMA LINCARIS
DIPHTHERINUM
DOLICHOS PRURIENS (DOLICHOS PURIENS - MUCUNA)
DORYPHORA DECEMLINEATA (DORYPHORA)
DROSERA ROTUNDIFOLIA (DROSERA)
DUBOISIA MYOPOROIDES (DUBOISIA)
DULCAMARA
lynx
改行の挿入に問題がある場合は、「ページ」幅をデフォルト値80からより高い数に増やします--width
(lynx
マニュアルを参照)。
答え2
複数文字RSにGNU awkを使用する:
awk -v RS='>|<br>' '!(NR%2){$1=$1; print}' file
DAMIANA (TURNERA)
DAPHNE INDICA
DIGITALIS PURPUREA (DIGITALIS)
DIOSCOREA VILLOSA
DIOSMA LINCARIS
DIPHTHERINUM
DOLICHOS PRURIENS (DOLICHOS PURIENS - MUCUNA)
DORYPHORA DECEMLINEATA (DORYPHORA)
DROSERA ROTUNDIFOLIA (DROSERA)
DUBOISIA MYOPOROIDES (DUBOISIA)
DULCAMARA
答え3
tr
改行除去(tr -d $'\n'
)と重複圧縮<space>
(tr -s ' '
)を使用すると、簡単に次のことができますgrep
。
curl 'http://www.homeoint.org/books/boericmm/d.htm' \
| tr -d $'\n' \
| tr -s ' ' \
| grep -Po '> *\K[^<]*'
出力:
DAMIANA (TURNERA)
DAPHNE INDICA
DIGITALIS PURPUREA (DIGITALIS)
DIOSCOREA VILLOSA
DIOSMA LINCARIS
DIPHTHERINUM
DOLICHOS PRURIENS (DOLICHOS PURIENS - MUCUNA)
DORYPHORA DECEMLINEATA (DORYPHORA)
DROSERA ROTUNDIFOLIA (DROSERA)
DUBOISIA MYOPOROIDES (DUBOISIA)
DULCAMARA
(grep
働くこともできますが、.*
欲があり、必要です.*?
。)
答え4
python
+を使用してWebサイトを解析できますBeautifulSoup
。
サイトのコードは次html
のようになるため、これはあまり良くありません。最も悪い練習が必要ですが効果があります。
ファイルに入れてくださいscript.py
。
#!/usr/bin/env python3
import requests
from bs4 import BeautifulSoup
import re
def parse(url):
html = requests.get(url).text
soup = BeautifulSoup(html, 'html.parser')
items=(re.findall('(?<=> )[^<]*', " ".join(str(soup.find_all("p")[4]).split())))
for i in items:
print (i)
parse('http://homeoint.org/books/boericmm/d.htm')
すべてのページを取得するには(私の考えはあなたがしたいこと...)最後の行を次に置き換えます:
import string
for c in list(string.ascii_lowercase):
parse('http://homeoint.org/books/boericmm/'+c+'.htm')
そして実行python script.py
するpython3 script.py
もちろん、依存関係(、、、bs4
)をインストールする必要があります。re
requests