Modificata qualche espressione regolare e introdotta

Leonardo Robol [2009-10-26 17:38]
Modificata qualche espressione regolare e introdotta
una forma canonica per gli URL
Filename
spidy.py
test/test_1.py
diff --git a/spidy.py b/spidy.py
index 62d04c4..2b8feab 100644
--- a/spidy.py
+++ b/spidy.py
@@ -1,18 +1,56 @@
+#
+# -*- coding: utf-8 -*-
+#
+
 import random
 import urllib2
 import mutex
 import threading
 import re

-default_page = "http://poisson.phc.unipi.it/"
+default_page = "http://poisson.phc.unipi.it"

 def get_links(url):
     content = get_page(url)
     if(content == -1):
         return -1

-    links = re.findall(r"<a href=\"(\S*)\">",content)
-    return links
+    links = re.findall(r"<a href=\"(\S*)\"[^>]*>",content)
+    ret = []
+    for link in links:
+        # Espando il link in modo da (speriamo!)
+        # garantire l'unicità
+        ret.append(expand_url(url, link))
+
+    return ret
+
+
+def expand_url(parent, url):
+    """Questa funzione prende l'url della pagina parent
+    e l'url del link e dà all'url del link una forma unica
+    e canonica, del tipo
+
+      http://www.example.com/pagina
+      http://www.example.com/pagina.html
+    """
+
+    ## Controllo che l'url non cominci con un punto
+    ## nel qual caso cerchiamo di rimediare subito
+    if url[0] == ".":
+        if len(url) == 1:
+            url = parent
+
+        else:
+            if(url[1] != "."):
+                url = url[1:]
+
+
+    ## Controlliamo prima di tutto se nell'url c'è un
+    ## protocollo
+    protocol = re.search(r"(\w+):", url)
+    if protocol == None:
+        url = parent + url
+    return url

 def get_page(url):
     try:
diff --git a/test/test_1.py b/test/test_1.py
index ca80316..238f68a 100644
--- a/test/test_1.py
+++ b/test/test_1.py
@@ -3,5 +3,5 @@ sys.path.append("../")
 import spidy

 print " => Provo ad ottenere i link di www.robol.it"
-print spidy.get_links("http://www.robol.it")
+print spidy.get_links("http://poisson.phc.unipi.it/~robol")
ViewGit