Webbteknik II - 1DV449 Inledning Bakgrund till problemet

Webbteknik II - 1DV449 Inledning Bakgrund till problemet Webbteknik II - 1DV449 Inledning Bakgrund till problemet

06.03.2015 Views

Webbteknik II - 1DV449 Laboration 1 Webbskrapning, XML, JSON, XSLT John Häggerud john.haggerud@lnu.se Johan Leitet johan.leitet@lnu.se November 2012 Inledning I denna första laboration i kursen är det meningen att du ska få arbeta med flertalet tekniker i en påhittad men verklighetsbaserad situation. Du ska skrapa en webbplats på information och spara denna i både XML- och JSON-format. Denna data ska du sedan kombinera med en annan XML-datakälla (en excelfil nedsparad i XML-format) och presentera i en HTML-vy via XSLT. Dessutom ska det skrivas en parameterstyrd XSLT-mall som presenterar antingen en XHTML eller SVG. Bakgrund till problemet Du har blivit kontaktad av en myndighetsperson som behöver hjälp med datainsamlandet av information om lokala matproducenter. Informationen finns i dagsläget samlad på lite olika ställen och i olika format och personen behöver nu din hjälp till att samla in och sammanställa informationen på ett bra sätt för att senare kunna jobba vidare med denna information på ett enklare sätt. I dagsläget finns informationen på två ställen. Dels i en statisk webbplats som “förra chefens son” skapat och dels i form av en excelfil. Informationen beskriver ett antal lokala matproducenter och deras uppgifter. I dagsläget är det inte så många producenter men det är viktigt att din lösning på problemet är generell då det i slutändan kommer rör sig om ett hundratals producenter (i detta arbetsmaterial får du bara ett fåtal att jobba med) 1

<strong>Webbteknik</strong> <strong>II</strong> - <strong>1DV449</strong><br />

Laboration 1<br />

Webbskrapning, XML, JSON, XSLT<br />

John Häggerud<br />

john.haggerud@lnu.se<br />

Johan Leitet<br />

johan.leitet@lnu.se<br />

November 2012<br />

<strong>Inledning</strong><br />

I denna första laboration i kursen är det meningen att du ska få arbeta med flertalet tekniker i en påhittad men<br />

verklighetsbaserad situation. Du ska skrapa en webbplats på information och spara denna i både XML- och JSON-format.<br />

Denna data ska du sedan kombinera med en annan XML-datakälla (en excelfil nedsparad i XML-format) och presentera i en<br />

HTML-vy via XSLT. Dessutom ska det skrivas en parameterstyrd XSLT-mall som presenterar antingen en XHTML eller<br />

SVG.<br />

<strong>Bakgrund</strong> <strong>till</strong> <strong>problemet</strong><br />

Du har blivit kontaktad av en myndighetsperson som behöver hjälp med datainsamlandet av information om lokala<br />

matproducenter. Informationen finns i dagsläget samlad på lite olika ställen och i olika format och personen behöver nu<br />

din hjälp <strong>till</strong> att samla in och sammanställa informationen på ett bra sätt för att senare kunna jobba vidare med denna<br />

information på ett enklare sätt.<br />

I dagsläget finns informationen på två ställen. Dels i en statisk webbplats som “förra chefens son” skapat och dels i form<br />

av en excelfil. Informationen beskriver ett antal lokala matproducenter och deras uppgifter. I dagsläget är det inte så många<br />

producenter men det är viktigt att din lösning på <strong>problemet</strong> är generell då det i slutändan kommer rör sig om ett hundratals<br />

producenter (i detta arbetsmaterial får du bara ett fåtal att jobba med)<br />

1


Uppgift 1 - Webbskrapning<br />

1.1 Uppgiften<br />

I denna första uppgift är det tänkt att du ska skrapa en befintlig webbplats med ett antal undersidor. Du hittar webbplatsen<br />

på: http://172.16.206.1/~thajo/<strong>1DV449</strong>/laboration01/ (OBS! Webbplatsen kräver att du är uppkopplad med vår VPN - Se<br />

kursen webbplats)<br />

Din uppgift blir helt enkelt att med lämplig teknik skrapa denna webbplats på följande information:<br />

- Namn<br />

- Adress<br />

- Postnummer<br />

- Ort<br />

- Webbplats-URL<br />

- URL <strong>till</strong> logobilder (placerade bakom vårt VPN)<br />

- id (finns i länkarna <strong>till</strong> de olika producenterna och kommer matchas mot andra datakällor i senare uppgifter)<br />

Din första uppgift blir att skriva ett script som skrapar webbplatsen och genererar dels ett välstrukturerat XML-dokument<br />

och dels ett välstrukturerat JSON-Dokument.<br />

1.2 Val av teknik<br />

Du är helt fri att välja teknik för att lösa <strong>problemet</strong> beroende på dina förkunskaper. Vi kan bidra med ett webbkonto med<br />

stöd för PHP (se kursens webbplats) men du är som sagt helt fri att välja teknik och arbetssätt så länge du löser problemen<br />

enligt de krav som finns.<br />

1.3 Krav för uppgift 1<br />

●<br />

●<br />

●<br />

●<br />

Du ska skriva ett generellt (ska fungera för 1000-tals liknande producentsidor) serverscript som skrapar<br />

webbplatsen på ovanstående information och samtidigt sparar ner detta <strong>till</strong> önskat format.<br />

Resultatet ska bli två stycken filer, en i XML- och en i JSON-format, som uppfyller de regler som finns<br />

respektive datautbytesformat.<br />

Båda filerna ska skapas på en och samma körning av scriptet.<br />

Scriptet ska vara körbart på en webbserver och triggas via ett HTTP-anrop (GET).<br />

● Du ska ha reflekterat kring frågorna under punkt 1.4<br />

2


1.4 Att reflektera kring<br />

●<br />

●<br />

●<br />

Vilka olika sätt finns att skrapa webbplatsen på informationen som efterfrågas? Varför valde du det sättet du har<br />

gjort det?<br />

Vilket format känns enklast att jobba med synvinkel på att strukturera upp information? Varför?<br />

Vad kan det finnas för risker med applikationer som innefattar automatiserad webbskrapning?<br />

1.5 Tips och studiematerial<br />

Webbskrapning:<br />

http://lnu.diva-portal.org/smash/record.jsf?pid=diva2:430665( Uppsats B-nivå, tekniker för skrapning i PHP)<br />

http://www.devblog.co/php-web-page-scraping-tutorial/ (webbskrapningstutorial)<br />

http://lmgtfy.com/?q=web+scraping<br />

XPath :<br />

http://dret.net/lectures/xml-fall11/xpath-chapter.pdf<br />

http://dret.net/lectures/xml-fall11/xpath-quickref.pdf<br />

(Länkarna går <strong>till</strong> Erik Wild’s (http://dret.net/netdret/) sida där materialet är publicerat.)<br />

XSLT:<br />

W3C:s specifikation<br />

Uppgift 2 - XSLT<br />

2.1 Uppgiften<br />

I denna uppgift är tanken att du ska använda den XML-fil som du skapade i förra uppgiften och skriva ett serverscript<br />

som läser in den filen samt en XSLT-fil för att transformera fram en XHTML-sida. Tanken med XHTML-sidan är att<br />

vi ska kombinera dels den data du skrapat och dels den data som du hittar i filen “positions.xml”. Denna fil innehåller<br />

exporterad data i XML-format rörande samma producenter (positionsdata). Tack vare XSLT kan vi kombinera båda dessa<br />

datastrukturer och visa upp i en och samma “output” (se bild 2.1)<br />

BILD 2.1- Som du ser är det inget större krav på presentation men var noga med att det blir en korrekt utformad XHTMLsida<br />

och att den innehåller rätt information då du ska plocka denna data och trycka in i en databas i nästa laboration.<br />

3


2.2 Krav för uppgift 2<br />

●<br />

För att kombinera de båda dokumenten ska en, och endast en, XSLT-mall användas.<br />

●<br />

Inläsningen och transformeringen ska ske på serversidan och generera en XHTML-sida.<br />

● XHTML-sidans utseende ska vara liknande Bild 2.1<br />

● Reflektera kring frågorna i punkt 2.3<br />

2.3 Att reflektera kring<br />

●<br />

●<br />

På vilka andra sätt än XSLT kan man uppnå samma resultat? Fördelar, nackdelar?<br />

Måste resultatdokumentet av en XSLT-tranformeringing vara en XML-applikation?<br />

2.4 Tips och studiematerial<br />

Ett problem man ställs inför i denna uppgift är att man får problem med xml-namespace. De intressanta cellerna i XMLdokumentet<br />

som är exporterat från Excel har ett eget xml-namespace och prefix: xmlns:ss="urn:schemas-microsoftcom:office:spreadsheet"<br />

Detta måste vi även inkludera i XSLT-mallen för att kunna använda XPath-uttryck och hämta ut<br />

rätt data.<br />

För att kunna kombinera två XSLT-mallar kans man använda XPath-funktionen document(url) - som tar URL:en <strong>till</strong> det<br />

XML-dokument du vill läsa in. Du kan då spara detta i en XSLT-variabel: http://www.w3schools.com/xsl/el_variable.asp<br />

Uppgift 3 - XSLT och SVG<br />

4


3.1 Uppgiften<br />

I denna uppgift är det tänkt att du genom att använda de tekniker som finns inom XSLT och generera två olika resultat<br />

beroende på den parameter/querystring man skickar in <strong>till</strong> XSLT-mallen. I denna uppgift ska du generera antingen en<br />

XHTML-sida eller en svg-fil eller båda - helt beroende på HTTP-anropet.<br />

Till din hjälp får du en xml-fil som innehåller den data som din XSLT-mall ska använda sig av. Din uppgift blir att läsa in<br />

XML-filen <strong>till</strong>sammans med en XSLT-mall där din transformering ska ske. Detta ska göras vi ett serverscript. Anropar man<br />

scriptet med querystringen ”render=xhtml”, ska en XHTML-sida liknande skärmdumpen nedan (bild 3.1) presenteras.<br />

Bild 3.1 - XHTML<br />

Anropar man scriptet med querystringen ”render=svg”, ska en svg-sida liknande skärmdumpen nedan (Bild 3.2) presenteras<br />

(skärmdumpen är tagen när resultatet ses med webbläsaren Google Chrome).<br />

Bild 3.2 - Transformering <strong>till</strong> svg. Anropar man scriptet med querystringen render=xhtml_svg, ska en kombinerad sida ses<br />

där man först ser HTML-tabellen och där under ser svg-grafiken.<br />

3.2 Krav<br />

●<br />

Resultatat ska vara en webbsida som man kan styra med en querystring<br />

5


● Resultatet ska likna skärmdumparna ovan (Bild 3.1 och Bild 3.2)<br />

3.3 Tips och studiematerial<br />

http://www.w3schools.com/svg/default.asp<br />

I denna uppgift kan det vara bra att använda sig av ”xsl:variable” (http://www.w3schools.com/xsl/el_variable.asp) och<br />

XPath-funktionen ”position()” för att kunna rita upp rektanglarna/diagrammen på ett dynamiskt sätt under varandra.<br />

Här är kraven för godkänt på laborationen uppfyllt. Nedan finns en extrauppgift för er som siktar på högre betyg.<br />

Extrauppgift 4 - Webbskrapning <strong>II</strong><br />

3.1 - Uppgiften<br />

För er som siktar på högre betyg finns en extrauppgift som är en variant på första uppgiften men som kräver att man skrapar<br />

en webbplats med inloggning. Det är samma typ av data som i första uppgiften som ska skrapas men i denna variant<br />

ligger sidorna bakom ett inloggningsformulär och kräver att webbskrapningsskriptet man skriver hanterar dels att posta<br />

inloggningsuppgifter samt en sessions-cookie som används i varje anrop mot de inloggningsskyddade sidorna. I övrigt är<br />

uppgiften som första uppgiften.<br />

Inloggningsformuläret hittar du på adressen:<br />

http://172.16.206.1/~thajo/<strong>1DV449</strong>/laboration01/producenter/secure/<br />

Användarnamn: admin<br />

Lösenord: p@ssw0rd<br />

3.2 - Krav<br />

●<br />

●<br />

●<br />

Du ska skriva ett generellt (ska fungera för 1000-tals liknande producentsidor) serverscript som skrapar<br />

webbplatsen på ovanstående information och samtidigt sparar ner detta <strong>till</strong> önskat format.<br />

Resultatet ska bli två stycken filer, en i XML- och en i JSON-format, som uppfyller de regler som finns<br />

respektive datautbytesformat.<br />

Båda filerna ska skapas på en och samma körning av scriptet.<br />

3.3 - Tips<br />

● Kör du PHP är cURL något som kan förenkla skapandet av korrekta request (http://php.net/manual/en/<br />

book.curl.php)<br />

●<br />

Testa webbplatsen i webbläsaren och se hur HTTP-anropen bör ske.<br />

6

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!