Crawler udvidelsen

Indledning

Denne udfordring handler om at skrive sin egen crawler der henter hjemmesider ned fra nettet. Man bør have et bassalt kendskab til html hvis man går i gang med denne udfordring.

Om at hente hjemmesider i Java

Filen DownloadHtml.java indeholder et eksempel på et Java program der henter en hjemmeside på en given URL og skriver den ud til skærmen. Man kan skrive en crawler ved at tage udgangspunkt i dette eksempel og så løbe de sider man henter igennem og udtrække ord og referencer til andre sider.

Parsing af hjemmesider med jtidy

En anden mulighed er at finde den logiske struktur af de hjemmesider man henter ned og først derefter trække referencer og ord ud. Den logiske struktur af en hjemmeside kan repræsenteres ved et træ. Betragt f.eks. hjemmesiden:

<html>
  <head>
    <title>
      Hjemmesidens tittel
    </title>
  </head>
  <body>
    Her står noget med
    <i>
      kursiv
    </i>
    og her er en
    <a href="http://www.it-c.dk">
      reference
    </a>
  </body>
</html>
hvis indhold man kan se her. Denne hjemmeside repræsenterer følgende træ:
                      <html>
                       / \
          /-----------/   \-------------\    
          |                             |
        <head>                        <body>
	  |                           / | | \
	  |           /--------------/  | |  \------------------\
          |           |                 | |                     |
          |           |            /----/ \--\                  |
	  |           |	           |         |                  |
	  | "Her står noget med"  <i>  "og her er en"  <a href="http://www.it-c.dk">
          |                        |                            |
          |	  	        "kursiv"                    "reference"
          |
       <title>
          |
"Hjemmesidens tittel"
Der findes et Java bibliotek jtidy som kan tage en hjemmeside og finde dette tilhørende træ. Denne process kaldes også at parse hjemmesiden. I tilfælde af fejl på hjemmesiden, en fejl kunne f.eks. bestå i at <i> blev afsluttet af </a>, forsøger dette bibliotek at gætte sig frem og ændre lidt sådan at man får et gyldigt træ i overensstemmelse med html standarden. Man kan se online dokumentation for jtidy og man kan hente filen Tidy.jar der er nødvendig for at køre og oversætte programmer der bruger jtidy. Man kan på hovedsiden for søgemaskineprojektet finde yderligere informationer om brug af jar filer.

Man kan hente eksemplet TidyExample.java som udskriver hvad der står direkte under body knuden på en hjemmeside på en given URL. Hvis den køres på hjemmesiden ovenfor får man udskrevet:
Text:Her står noget med 
Node:i
Text: og her er en 
Node:a
  Attr name:href
  Attr value:http://www.it-c.dk

Om at bruge flere tråde

Man kan evt programmere sin crawler så den bruger flere tråde. På den måde kan man crawle flere hjemmeside på samme tid. Dette kan være smart idet der tit kan være forholdsvis lang ventetid fra man beder om en hjemmeside til man får den. Dette skyldes at der skal sendes informationer frem og tilbage over et netværk til en server der måske står langt væk. Hvis man bruger flere tråde har man mulighed for at udnytte denne ventetid til at parse hjemmesider og til at hente andre hjemmesider.

Man bør være opmærksom på følgende hvis man skriver en flertrådet crawler.