我使用命令从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
+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
)。