Τετάρτη 21 Ιανουαρίου 2015

Απώλεια δεδομένων (Python)

Τώρα πρόσφατα δουλεύω σε ένα web spider σε Python με Tornado. Αρχικά για όσους δεν γνωρίζουν τι είναι μια αράχνη στο Διαδίκτυο , είναι ένα bot (robot) το οποίο επισκέπτεται μια ιστοσελίδα μαζεύει όλα τα δεδομένα που βρίσκει και στην συνέχεια εκτελεί την ίδια διαδικασία στα links που έχει βρει στην σελίδα κατά την συλλογή των δεδομένων .

Σε τι χρησιμεύει όμως αυτό ; Εταιρίες όπως η Google έχουν τις αράχνες τους με τις οποίες συλλέγουν δεδομένα τα οποία παρουσιάζουν στον χρήστη όταν αναζητεί κάτι .

Περισσότερες πληροφορίες μπορούν να βρεθούν εδώ : http://en.wikipedia.org/wiki/Web_crawler

Το πρόβλημα, όμως στον crawler που γράφω εγώ , είναι ότι άνοιγε συνέχεια links και πολλές ιστοσελίδες μετά από αρκετά requests έπαυαν να ανταποκρίνονται και μου έδιναν 404 και 503 status codes με αποτέλσμα κάποια δεδομένα να χάνονται .

Δοκιμάζοντας μερικές εντολές στo shell της mongodb
>db.lists.count() 
1626 
>db.urls.count() 
4055
όπου οι lists είναι η συλλογή (δεδομένων-ιστοσελίδας) ενω urls η συλλογή των συνδέσμων στους οποίους είχε δοκιμαστεί να γίνει crawling παρατηρόυμε ότι έχουμε μια τεράστια απώλεια (> 1/2) . Το πρόβλημα το αντιμετώπισα προσθέτωντας ένα exception:

except urllib2.HTTPError: 
    if not (len(queue_item) > 2): 
        self.queue.put((self.current_url, self.depth, 1)) 

το οποίο προσθέτει το url πάλι στην σειρά και αυτή την φορά θα περιμένει 1 δευτερόλεπτο πριν το ανοίξει .

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου