html
먼저 야생에서 이와 같은 것을 실행 해야 합니까 jsoup
? 인간의 의미에서 유효하게 만들지 않으면 아마 횡설수설로 바뀔 것입니다. 하지만 최소한 xmlstarlet
파일은 처리될 것입니다.
다음과 같이 설치하고 사용할 수 있는 CLI를 찾는 것이 좋습니다.
massage foo.html > bar.xhtml
아니면 적어도 그 라인에 따른 것.
사용 사례:
thufir@doge:~/.html$
thufir@doge:~/.html$ curl http://int.soccerway.com/ > soccer.html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 188k 0 188k 0 0 313k 0 --:--:-- --:--:-- --:--:-- 313k
thufir@doge:~/.html$
thufir@doge:~/.html$ xmlstarlet sel -t -v "/html/body/table/tr/td[1]" -n soccer.html
soccer.html:70.13: xmlParseEntityRef: no name
if (this.$ && this.$.fn && this.$.fn.jquery) {
^
soccer.html:70.14: xmlParseEntityRef: no name
if (this.$ && this.$.fn && this.$.fn.jquery) {
^
soccer.html:70.26: xmlParseEntityRef: no name
if (this.$ && this.$.fn && this.$.fn.jquery) {
^
soccer.html:70.27: xmlParseEntityRef: no name
if (this.$ && this.$.fn && this.$.fn.jquery) {
^
soccer.html:198.8: Opening and ending tag mismatch: link line 27 and head
</head>
^
soccer.html:209.45: EntityRef: expecting ';'
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
^
soccer.html:223.40: xmlParseEntityRef: no name
if (typeof(e.data) === 'string' && (e.data.indexOf('onEplayerVideoStarted'
^
이상적으로는 URL에 대해 직접 실행되지만 htmlstarlet
그러한 조항은 없는 것 같습니다.
거기예옵션fo
체재, 그러나 위와 다른 결과를 얻을 수는 없습니다.
답변1
테이블의 데이터 셀만 필요한 경우 xmlstarlet fo
trailing 을 사용할 수 있습니다 xmlstarlet sel
. 당신이 가진 주요 문제는 XPath에 있습니다. 몇 가지 "와일드카드" 요소( )를 추가하면 //
원하는 결과를 얻을 수 있습니다.
# fetch URL silently, following redirects, and send to standard out
curl -sL http://int.soccerway.com/ |
# interpret input as HTML (-H) and try to recover as much as possible (-R)
xmlstarlet fo -H -R 2> /dev/null |
# use the following XPath expression and return the value (-t -v),
# also add a newline after the result (-n)
xmlstarlet sel -t -v '//table//tr//h3/span' -n 2> /dev/null |
# only show the first 10 values
head -n10
산출:
World - Friendlies
Argentina - Prim B Nacional
Australia - National Premier Leagues
Australia - NPL Youth League
Bangladesh - Premier League
Belarus - Premier League
Benin - Championnat National
Brazil - Serie A
Brazil - Serie D
Brazil - Copa Paulista