/ / Pobieranie danych z html w skrypcie bash - regex, bash, awk

Wyodrębnianie danych z html ze skryptu bash - regex, bash, awk

Chcę, aby dane (linia, miejsce docelowe, czas i pozycja) były wyświetlane w tym miejscu rozkład metra strona.

Kod, który napisałem na razie to:

#!/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

Odpowiedzi:

3 dla odpowiedzi № 1

Z links:

links -dump "http://mon.ruter.no/SisMonitor/Refresh?stopid=3010370&computerid=acba4167-b79f-4f8f-98a6-55340b1cddb3&isOnLeftSide=true&blocks=&rows=6&test=&stopPoint="

Wydajność:

Linje Destinasjon TidPoz Linia Czas docelowy Poz 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 przez Majorstuen 12 min 1 5 Ringen przez Storo 13 min 2

3 dla odpowiedzi № 2

W ogóle nie używaj do tego wyrażeń regularnych. Konwertuj z HTML na XML i używaj XPath - języka zapytań, który działa z semantyką dokumentów, w przeciwieństwie do zwykłego dopasowywania tekstu:

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

Dla danego wejściowego kodu HTML na dzień dzisiejszy dane wyjściowe są następujące:

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

Użyte tutaj narzędzia to:

  • HTML Tidy (do konwersji niechlujnego HTML do zgodnego XHTML)
  • XMLStarlet (do wykonywania zapytań XPath)
  • kolumna (do formatowania wyniku w wyrównane kolumny)

Zauważ także, że $"t" składnia wymaga, aby używana była powłoka naprawdę się buj (nie /bin/sh).