CS Challenge 2, Web Scraping

Internettet indeholder mange fantastiske datakilder, flest som HTML-sider, der er henvendt til menneskelige læsere. Det kan dog være smart at skrive programmer, der automatisk bruger disse data - ofte mod udbydernes vilje. Denne teknik kaldes for Web Scraping.

Denne Challenge går ud på at implementere Web Scraping i en Unix Shell ved brug af script-sproget tcsh. Dette sprog er fra 1975 og har en gammeldags og skrøbelig syntaks, men jo mere man bruger det, jo mere virker det charmerende og praktisk, specielt når man benytter Unix pipes til at sammensætte de mange indbyggede kommandoer.

Et eksempel er scriptet:

#!/bin/tcsh
set tv2 = `wget -q -O - "http://vejret.tv2.dk/vejr/aarhus-2624652" | grep -m1 "degrees" | tr ">" "\n" | tail -2 | tr "<" "\n" | head -1`
echo "Der er" $tv2 "grader Celcius i Aarhus lige nu"
if ($tv2 < 18) then
  echo "Det er alt for koldt"
endif
if ($tv2 > 26) then
  echo "Det er alt for varmt"
endif
der udnytter TV2s vejrudsigt til at angive den aktuelle temperatur i Aarhus.

Spørgsmål A

Angiv ultrakort, hvordan Unix kommandoerne wget, cat, grep, cut, tr, head, tail og echo virker, samt hvordan de kan kombineres med Unix pipes.
Rent praktisk kan du udføre scripts på enhver Linux maskine. Du kan også benytte en PuTTY-client, til at forbinde dig til instituttets virtuelle Linux cluster på adressen fh.cs.au.dk. Du logger ind med dit NFIT userid og password. Du kan nu fx gemme ovenstående script i filen aarhus ved at afgive kommandoen:
cat > aarhus
og paste indholdet ind med højreklik på musen efterfulgt af CTRL-D. Filen gøres udførbar med kommandoen:
chmod a+x aarhus
og kan nu kaldes fra kommandolinjen.
Web scraping er naturligvis sårbart overfor ændringer i layout af Web-siderne, men man kan gøre sig umage med at benytte robuste søgekriterier. Scriptet aarhus har fungeret uden ændringer siden maj 2015.
Du skal udvikle et nyt script, sammenlign, der laver en sammenligning af to begreber med google.dk og dr.dk som datakilder. Fx kunne kaldet:
sammenlign "Anders And" Fedtmule
give resultatet:
Anders And har 527000 hits
Fedtmule har 86000 hits
Anders And er 6 gange så kendt som Fedtmule
Anders And og Fedtmule overlapper med 8%
Anders And var sidst i nyhederne 25. maj 2015
Fedtmule var sidst i nyhederne 29. okt 2013
Andre interessante sammenligninger kunne være:
sammenlign Obama Osama
sammenlign velfærd skattelettelser
sammenlign iphone android
Antallet af hits scrapes fra første side af svaret på en Google søgning på begrebet angivet i quotes. Overvej forskellen på at søge på Anders And (uden quotes) og på "Anders And" (med quotes).

Hvis G(A) angiver antallet af Google hits for begrebet A og G(A,B) antallet af Google hits for en simultan søgning for begreberne A og B, så defineres overlappet (i procent) af A og B som:

200*G(A,B)/(G(A)+G(B))

Overvej, at dette tal er fornuftigt og altid ligger mellem 0 og 100. Bemærk, at der findes begreber så G(A)=0 eller G(A)=1.

Nyhedsdatoerne scrapes fra DRs arkiv på dr.dk og henviser til den seneste nyhed, der omtaler begrebet.

Nogle Websites prøver at forhindre adgang fra wget, hvilket man ofte kan overvinde med den option, der hedder user-agent.


Spørgsmål B

Implementer og afprøv det omtalte tcsh script til at foretage sammenligninger.
Man kan afprøve vores udgave af scriptet. Denne løsning prøver at give pænt formulerede svar for mange specialtilfælde. Det er ikke et krav til din besvarelse: det vigtige er, at dine tal er rigtige.

"" ""


Scraping kan itereres vilkårligt. Scriptet larsmette udnytter, at man selvfølgelig også kan scrape Web-udgaven af sammenlign til i dette tilfælde at lave en grafisk sammenligning af Lars Løkke og Mette Frederiksen. Og, nej: du kan ikke benytte noget i denne stil til at løse Spørgsmål B.
Du deltager i vores Challenge ved senest den 20. september at sende en e-mail til mis@cs.au.dk med subject Challenge 2 og svaret på spørgsmål A (i plain text) samt et attachment med svaret på spørgsmål B i form af dit sammenlign script.