我想获得此处显示的数据(行,目的地,时间和地点) subway schedule页。
我现在写的代码是:
#!/bin/bash
curl "http://mon.ruter.no/SisMonitor/Refresh?stopid=3010370&computerid=acba4167-b79f-4f8f-98a6-55340b1cddb3&isOnLeftSide=true&blocks=&rows=6&test=&stopPoint=">ruter.html
awk -F "</*td>|</*tr>" '/<\/*t[rd]>.*[A-Z][0-9]/ {print $3, $5, $8, $10 }' ruter.html
答案 0 :(得分:3)
Don't use regular expressions for this at all.从HTML转换为XML,并使用XPath - 一种处理文档语义的查询语言,而不仅仅是文本匹配:
url="http://mon.ruter.no/SisMonitor/Refresh?stopid=3010370&computerid=acba4167-b79f-4f8f-98a6-55340b1cddb3&isOnLeftSide=true&blocks=&rows=6&test=&stopPoint="
curl "$url" | \
tidy -asxml -n -c -b -q --show-warnings no | \
xmlstarlet sel -N h=http://www.w3.org/1999/xhtml \
-t -m '//h:tr[h:td]' \
-v ./h:td[1] -o $'\t' \
-v ./h:td[2] -o $'\t' \
-v ./h:td[4] -o $'\t' \
-v ./h:td[5] -n | \
column -s $'\t' -t
对于给定的输入HTML,截至今天,输出为:
5 Vestli via Majorstuen nå 1
4 Vestli via Storo 2 min 2
5 Ringen via Majorstuen 4 min 1
5 Sognsvann 7 min 2
4 Bergkrystallen via Majorstuen 10 min 1
5 Ringen via Storo 12 min 2
这里使用的工具是:
另请注意,$'\t'
语法要求使用的shell确实是bash (而不是/bin/sh
)。
答案 1 :(得分:3)
使用links
:
links -dump 'http://mon.ruter.no/SisMonitor/Refresh?stopid=3010370&computerid=acba4167-b79f-4f8f-98a6-55340b1cddb3&isOnLeftSide=true&blocks=&rows=6&test=&stopPoint='
输出:
Linje Destinasjon Tid Pos Line Destination Time Pos 4 Vestli via Storo 3 min 2 5 Vestli via Majorstuen 3 min 1 5 Ringen via Majorstuen 5 min 1 5 Sognsvann 11 min 2 4 Bergkrystallen via Majorstuen 12 min 1 5 Ringen via Storo 13 min 2