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
)을 설치해야 합니다.