Linux 명령줄 도구를 사용하여 웹 페이지에서 html 태그와 해당 속성을 가져오려고 합니다. 다음은 구체적인 경우입니다.
작업은 다음과 같습니다. 웹사이트 "clojurescript.net"의 모든 "script" 태그의 모든 "src" 속성을 가져옵니다. 이 작업은 가능한 최소한의 의식으로 수행되어야 하며 특정 텍스트 줄을 가져오기 위해 grep을 사용하는 것만큼 간단합니다.
curl -L clojurescript.net | [the toolchain in question "script @src"]
http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
http://kanaka.github.io/cljs-bootstrap/web/jqconsole.min.js
http://kanaka.github.io/cljs-bootstrap/web/jq_readline.js
[...further results]
내가 시도한 도구는 hxnormalize/hxselect, tidy, xmlstarlet입니다. 누구도 신뢰할 수 있는 결과를 얻을 수 없습니다. 여러 프로그래밍 언어용 라이브러리를 사용할 때 이 작업은 항상 쉽습니다.
- 그렇다면 CLI에서 이를 수행하기 위한 최신 기술은 무엇입니까?
- 트리를 보다 명확하게 표현하려면 먼저 HTML을 XML로 변환하는 것이 합리적이지 않습니까?
- 일반적으로 HTML은 많은 구문 오류로 작성됩니다. 이 느슨한 구조를 수정/정리하는 기본 방법(공용 라이브러리에서 사용됨)이 있습니까?
속성만 추출하는 추가 옵션과 함께 CSS 선택기를 사용하면 됩니다. 그러나 어쩌면 XPATH가 더 나은 구문 선택일 수도 있습니다.
답변1
그리고
curl "http://clojurescript.net/" | scrape -be '//body/script' | xml2json | jq '.html.body.script[].src
당신은
"http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"
"http://kanaka.github.io/cljs-bootstrap/web/jqconsole.min.js"
"http://kanaka.github.io/cljs-bootstrap/web/jq_readline.js"
"http://kanaka.github.io/cljs-bootstrap/web/repl-web.js"
"http://kanaka.github.io/cljs-bootstrap/web/repl-main.js"
이러한 도구는 다음과 같습니다.
- 대단한 JQhttps://stedolan.github.io/jq/;
- 깎다https://github.com/jeroenjanssens/data-science-at-the-command-line/blob/master/tools/scrape;
- xml2jsonhttps://github.com/Inist-CNRS/node-xml2json-command.
또는 다음을 사용하여:
curl "http://clojurescript.net/" | hxnormalize -x | hxselect -i 'body > script' | grep -oP '(http:.*?)(")' | sed 's/"//g'
당신은:
http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
http://kanaka.github.io/cljs-bootstrap/web/jqconsole.min.js
http://kanaka.github.io/cljs-bootstrap/web/jq_readline.js
http://kanaka.github.io/cljs-bootstrap/web/repl-web.js
http://kanaka.github.io/cljs-bootstrap/web/repl-main.js
답변2
나는 HTML을 구문 분석할 수 있는 독립 실행형 유틸리티를 모릅니다. XML을 위한 몇 가지 유틸리티가 있지만 사용하기 쉽지는 않을 것 같습니다.
많은 프로그래밍 언어에는 HTML 구문 분석을 위한 라이브러리가 있습니다. 대부분의 Unix 시스템에는 Perl 또는 Python이 있습니다. 파이썬을 사용하는 것이 좋습니다아름다운 수프아니면 Perl의HTML::트리빌더. 물론 원한다면 다른 언어를 사용할 수도 있습니다(노코기리루비 등)
다음은 다운로드와 구문 분석을 결합한 Python 한 줄입니다.
python2 -c 'import codecs, sys, urllib, BeautifulSoup; html = BeautifulSoup.BeautifulSoup(urllib.urlopen(sys.argv[1])); sys.stdout.writelines([e["src"] + "\n" for e in html.findAll("script")])' http://clojurescript.net/
또는 몇 가지 더 읽기 쉬운 코드 줄로:
python2 -c '
import codecs, sys, urllib, BeautifulSoup;
html = BeautifulSoup.BeautifulSoup(urllib.urlopen(sys.argv[1]));
scripts = html.findAll("script");
for e in scripts: print(e["src"])
' http://clojurescript.net/
답변3
노코체강력한 명령줄 기능이 있습니다:
curl -Ls http://clojurescript.net/ | nokogiri -e 'puts $_.css("script").map{|e|e.attr("src")}'
http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
http://kanaka.github.io/cljs-bootstrap/web/jqconsole.min.js
http://kanaka.github.io/cljs-bootstrap/web/jq_readline.js
http://kanaka.github.io/cljs-bootstrap/web/repl-web.js
http://kanaka.github.io/cljs-bootstrap/web/repl-main.js
원하는 단일 명령줄 도구의 단순성과 익숙한 프로그래밍 언어를 사용하는 단순성을 결합할 수 있습니다.