Aggiunta la gestione delle redirezioni. Manca ancora la capacità

Leonardo Robol [2009-10-27 07:41]
Aggiunta la gestione delle redirezioni. Manca ancora la capacità
di gestire link che contengono ".."
Filename
spidy
diff --git a/spidy b/spidy
index f744550..048cf51 100755
--- a/spidy
+++ b/spidy
@@ -28,7 +28,8 @@ outfile = "connections.txt"
 def get_links(page):
     """Restituisce una lista con i link
     presenti nella pagina data, in forma canonica"""
-    content = get_page(page.url)
+    content, real_url = get_content(page.url)
+
     if(content == -1):
         return -1

@@ -37,7 +38,7 @@ def get_links(page):
     for link in links:
         # Espando il link in modo da (speriamo!)
         # garantire l'unicità
-        ret.append(expand_url(page.url, link))
+        ret.append(expand_url(real_url, link))

     return ret

@@ -73,7 +74,8 @@ def expand_url(parent, url):
         if re.search("\.[^/]*$", parent):
             parent = re.sub("[^/]*$", "", parent)
         else:
-            parent += "/"
+            if not parent.endswith("/"):
+                parent += "/"



@@ -84,15 +86,15 @@ def expand_url(parent, url):
         url = parent + url
     return url

-def get_page(url):
+def get_content(url):
     """Cerca di scaricare l'url dato e restituisce
     -1 se non ce la fa, il contenuto altrimenti"""
     try:
         req = urllib2.urlopen(url)
     except:
-        return -1
+        return (-1, None)

-    return req.read()
+    return (req.read(), req.geturl())

 class Page():
     """Una pagina web. Questa classe, quando viene istanziata,
@@ -268,12 +270,13 @@ if __name__ == "__main__":
     %d thread(s)\n\
     %d pages to analyze\n\
     %d max steps from the start page, %s\n\
-    " % (l.tm_hour,l.tm_min,l.tm_sec, concurrency, size, max_steps, default_page)
+    Writing on file %s\n\
+    " % (l.tm_hour,l.tm_min,l.tm_sec, concurrency, size, max_steps, default_page, outfile)


     threads = []
     for i in range(0, concurrency):
-        threads.append(Crawler())
+        threads.append(Crawler(default_page))
         threads[i].start()


@@ -293,7 +296,7 @@ if __name__ == "__main__":

     for page in url_dict:
         for link in url_dict[page].links:
-            out.write(str(url_dict[page].ID) + "\t" + str(link) + "\n")
+            out.write(page + "\t" + str(url_dict[page].ID) + "\t" + str(link) + "\n")

     l = time.localtime(time.time())
     print " => Work completed at %s:%s:%s " % (l.tm_hour,l.tm_min,l.tm_sec)
ViewGit