Ciao,
sto simulando un crawler, ho dei problemi relativi al contatore Ris che ho inserito all interno della funzione ricorsiva.
Ho dichiarato come variabili globali Ris e MaxRis valorizzando ques ultima a 5.
Vorrei quindi che nel momento in cui ho 5 link si interrompesse invece ne restituisce sempre qlk d uno in più, come mai?

Il secondo problema è relativo al controllo dell attributo rel del tag a, mi da errore la seguente frase
codice:
IF System.DbNull.Value.Equals(node.Attributes("rel")) or node.Attributes("rel").Value <> "nofollow" Then
Cosa sbaglio?
Grazie mille

codice:
<html><head>
<title>Crawler</title>
</head>
<body>
<%@ Page Language="VB" Trace="false" Debug="true" aspcompat=true%>


<%@ Import Namespace="System.Net" %>
<%@ import Namespace="HtmlAgilityPack" %>
<%@ import Namespace="System.IO" %>


<script runat="server">


'Variabili per gestire i livelli di profondità della funzione ricorsiva
Dim Ris=0
Dim MaxRis=5


'Variabili per la connessione al DB
Dim connProxy
Dim strSQL
Dim rs


'Funzione ricorsiva
function ScanPage(URL)


	'Variabili relative alle varie elaborazioni che dovremmo affrontare
	Dim GstrPagina as String
	Dim GLink as String
	Dim RobotsTxt


  'Variabile per chiamare le pagine
  Dim wc As New WebClient()
  wc.Headers.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31")


  'Il file robots.txt è un semplicissimo file di testo che va inserito (qualora lo si voglia utilizzare) nella cartella di root del proprio sito Web e serve ad indicare agli spider dei motori di ricerca alcune semplici direttive circa l indicizzazione di determinati file o intere cartelle.
  'Apro il file robots.txt 
  'TRY
  'Oggettino che permette di aprire i link
  'Dim byteArray() As Byte = wc.DownloadData(URL+"/robots.txt")
  'RobotsTxt = Encoding.UTF8.GetString(byteArray)
  'response.write(RobotsTxt)
  'CATCH ex1 As Exception
  '  response.write("Errore: " + ex1.Message+"<br>")
  'END TRY


  'Oggettino che permette di aprire il link 
  Dim byteArray2() As Byte = wc.DownloadData(URL)
  GstrPagina = Encoding.UTF8.GetString(byteArray2)
 
  'Creo il path in cui andrò a salvare il file
  Dim strPaginaSaved As String = Server.MapPath("/public/") + "tmp.htm"


  'Salvo il file temporaneo della pagina HTML scaricata             
  Dim sw As New StreamWriter(strPaginaSaved, False, System.Text.Encoding.UTF8)
  sw.Write(GstrPagina)
  sw.Close()


  'Carico file HTML
  Dim doc As New HtmlDocument()
  doc.Load(strPaginaSaved)
  
  'Stampo a video l URL da cui stiamo estrapolando i link
  response.write("URL "+URL)
  response.write("<br>")
  
  'Ciclo sulla pagina per prendere i suoi link
  FOR Each node As HtmlNode In doc.DocumentNode.SelectNodes("//a")
  
    'Controllo che l attributo rel, relativo al tag trovato a, non sia valorizzato con nofollow (Viene valorizzato con nofollow quando non vuole essere indicizzato)
    'IF System.DbNull.Value.Equals(node.Attributes("rel")) or node.Attributes("rel").Value <> "nofollow" Then
      GLink = node.Attributes("href").Value
      
      'Evito eventuali link trovati non validi
      IF (INSTR(GLink,"javascript")<=0) AND (INSTR(GLink,"mailto")<=0) AND (INSTR(GLink,"#")<=0)
      
        'Controllo che il link sia composto da un path assoluto altrimenti lo rendo tale
        IF (INSTR(GLink,"http")<=0)
          GLink=URL+GLink
        END IF


      	' Esecuzione frase SQL
        strSQL = "SELECT * FROM PAGINA WHERE URL='"+GLink+"'" 
        rs.Open(strSQL,connProxy,1)   
		
        'Indicizzo la pagina
        'Controllo, se il link è già presente nel DB lo aggiorno altrimenti lo inserisco
        IF (NOT(rs.Fields("URL").Value() Is Nothing OrElse rs.Fields("URL").Value() Is DBNull.Value)) THEN
          ' Esecuzione frase SQL
          strSQL = "UPDATE INTO PAGINA (URL,STRPAGINA) VALUES ('"+GLink+"','"+GstrPagina+"')" 
          rs.Open(strSQL,connProxy,1) 
        ELSE
          ' Esecuzione frase SQL
          strSQL = "INSERT INTO PAGINA (URL,STRPAGINA) VALUES ('"+GLink+"','"+GstrPagina+"')" 
          connProxy.Execute(strSQL) 
        END IF
      
        'Incremento il contatore
        Ris=Ris+1
        
        'Stampo a video il risultato
        response.write(Ris)
        response.write(".) ")
        response.write(GLink)
        response.write("<br>")


        'Controllo il numero di link trovati, se non fossi arrivato al numero di link voluti chiamo la funzione ricorsiva 
        IF (Ris<MaxRis)
          ScanPage(GLink)
        ELSE
          EXIT FOR
        END IF
       
      END IF
      
    'END IF
    
  NEXT
  
end function
  
Public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


	'Creo connessione al db
  rs = Server.CreateObject("ADODB.Recordset")
	connProxy = Server.CreateObject("ADODB.Connection")
	connProxy.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/mdb-database/Crawler.mdb")	
   
	'Apro connessione al db
	connProxy.Open()
  
  'Leggo il file dove ci sono i link alle pagine
  Dim Line
  Dim sr As New StreamReader("c:\inetpub\wwwroot\public\link.txt")
  DO WHILE not(sr.EndOfStream)
  Line=sr.ReadLine()
  try
    ScanPage(Line)
  CATCH ex1 As Exception
    response.write("Errore: " + ex1.Message+"<br>")
  END TRY
  LOOP
  sr.Close()
  
  ' Chiusura connessione
  rs = Nothing
  connProxy.Close()
  connProxy = nothing
  
end sub	


</script>
</body>
</html>