Ανάπτυξη μηχανισμού διάσχισης του διαδικτύου (Web Crawler) με βάση το προβαλλόμενο περιεχόμενο στους χρήστες



Σχετικά έγγραφα
ΕΠΛ 002: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Μηχανές αναζήτησης

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

2 Μάρκετινγκ µηχανών αναζήτησης (Search Engine Marketing).

Βασικές Έννοιες Web Εφαρμογών

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Μηχανές αναζήτησης

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΑ ΣΥΣΤΗΜΑΤΑ

E-commerce Networks & Applications. Η διαφήμιση στο Internet. Νίκος Κωνσταντίνου

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Μηχανές αναζήτησης

ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΜΑΡΚΕΤΙΝΓΚ

Η HTML 5 θα αλλάξει το Web?

A J A X AJAX Γιάννης Αρβανιτάκης

Δικτυακοί τόποι. Η σχεδίαση ενός δικτυακού τόπου. Δρ. Ματθαίος Α. Πατρινόπουλος

ΠΑΡΟΥΣΙΑΣΗ ΠΤΥΧΙΑΚΗΣ ΕΡΓΑΣΙΑΣ ΒΕΛΤΙΣΤΟΠΟΙΗΣΗ ΙΣΤΟΣΕΛΙΔΩΝ ΓΙΑ ΤΙΣ ΜΗΧΑΝΕΣ ΑΝΑΖΗΤΗΣΗΣ, ΠΟΙΟΤΙΚΗ ΕΡΕΥΝΑ ΣΕ ΕΙΔΙΚΟΥΣ SEO

Πώς λειτουργεί το Google?

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΕΡΓΑΛΕΙΑ ΓΙΑ ΤΟ ΔΙΑΔΙΚΤΥΟ

Σεμινάριο Wordpress CMS (Δημιουργία Δυναμικών Ιστοσελίδων)

Εργαλεία ανάπτυξης εφαρμογών internet Ι

Σύστημα Κεντρικής Υποστήριξης της Πρακτικής Άσκησης Φοιτητών Α.Ε.Ι.

Τα είδη των ιστοσελίδων. Web Sites E-commerce Sites CMS & Blog Sites CMS Flash Facebook Layouts Tumblr Themes

ΠΕΡΙΕΧΟΜΕΝΑ. Πρόλογος Κεφάλαιο 1 ο Αρχές Διαχείρισης πληροφορίας στον Παγκόσμιο Ιστό... 15

Speed-0 WMP: Web and Mobile Platform Software Requirements Specification

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

Μεταπτυχιακή Διατριβή

ΕΓΧΕΙΡΙΔΙΟ ΜΑΘΗΤΗ. της Πλατφόρμας Τηλεκατάρτισης

Περιεχόμενα. Δημιουργία σύνδεσης ΤΙ ΕΙΝΑΙ ΙΣΤΟΣΕΛΙΔΕΣ ΚΑΙ ΤΙ ΤΟΠΟΘΕΣΙΕΣ ΙΣΤΟΥ Γνωριμία με μια ιστοσελίδα:... 38

Πνευµατικά ικαιώµατα

Κωνσταντίνος Παρασκευόπουλος Καθηγητής Πληροφορικής (ΠΕ19 MSc) Ελληνικό Κολλέγιο Θεσσαλονίκης

ΑΣΚΗΣΗ. Συγκομιδή και δεικτοδότηση ιστοσελίδων

Εφαρμογή Ηλεκτρονικής Διαχείρισης Μετεγγραφών

Τεχνικές ταξινόµησης αποτελεσµάτων µηχανών αναζήτησης µε βάση την ιστορία του χρήστη

Internet Business Hellas

Υπηρεσία φωνητικής υποστήριξης των ιστοτόπων της ΕΡΤ Α.Ε.

ΥΠΗΡΕΣΙΕΣ ΔΙΑΔΙΚΤΟΥ Explorer & Outlook 2013

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

ΣΧΕΔΙΑΣΜΟΣ ΚΑΙ ΑΝΑΠΤΥΞΗ ΙΣΤΟΤΟΠΩΝ

Οικονομική Προσφορά Προώθηση ιστοσελίδας

Προγραμματισμός Διαδικτύου

Δημιουργία. Ιστολογίου (blog) 7/5/2015. Χρυσάνθη Γιομέλου ΚΔΒΜ ΝΙΚΑΙΑΣ

ΠΡΟΔΙΑΓΡΑΦΕΣ ΔΙΑΔΙΚΤΥΑΚΟΥ ΤΟΠΟΥ ΕΥΡΩΠΑΪΚΟΥ ΚΕΝΤΡΟΥ ΚΑΤΑΝΑΛΩΤΗ ΕΛΛΑΔΑΣ

ΤΙΤΛΟΣ ΙΠΛΩΜΑΤΙΚΗΣ ΕΡΓΑΣΙΑΣ: GoNToggle: ΕΞΥΠΝΗ ΜΗΧΑΝΗ ΑΝΑΖΗΤΗΣΗΣ ΜΕ ΧΡΗΣΗ ΟΝΤΟΛΟΓΙΩΝ ΠΕΡΙΟΧΗ ΕΡΕΥΝΑΣ: ΣΥΓΓΡΑΦΕΑΣ:

Περιεχόμενα. Τεχνικό εγχειρίδιο χρήσης IBNEWSLETTER

ΑΝΑΚΟΙΝΩΣΕΙΣ ΠΡΟΜΗΘΕΙΩΝ/ΕΡΓΑΣΙΩΝ ΜΕ ΛΗΨΗ ΠΡΟΣΦΟΡΏΝ 10/16

Σύστημα Κεντρικής Υποστήριξης της Πρακτικής Άσκησης Φοιτητών ΑΕΙ

ICOP - ΥΠΗΡΕΣΙΕΣ INTERNET-WEBSOLUTIONS ΠΡΟΤΑΣΗ-ΑΝΑΘΕΣΗ ΕΡΓΟΥ(760) Εταιρεία:.. Προς:. Tηλ.:.. Πωλητής:

1. ΕΙΣΑΓΩΓΗ 2. ΠΕΡΙΓΡΑΦΗ

Τεχνικός Εφαρμογών Πληροφορικής

Στρατηγική ανάπτυξη δικτυακού κόμβου

Παγκόσμιος ιστός και Internet συχνά θεωρούνται το ίδιο πράγμα. Η αντίληψη αυτή είναι λανθασμένη καθώς ο ιστός αποτελεί μία μόνο εφαρμογή του

Website review lalemou.com

Διαδίκτυο: Ιστορία, Δομή, Υπηρεσίες

Tales & Trails. apps4thessaloniki 2016

Άνοιγμα (και κλείσιμο) της εφαρμογής Εγγράφου Κειμένου

Συνοπτικός Οδηγός Χρήσης του Moodle για τον Καθηγητή

interactivecommunication Search Marketing White Paper Φεβρουάριος , Cybertechnics Ltd. All rights reserved.

Εισαγωγή στις ΤΠΕ ΙΙ Γιάννης Βρέλλης ΠΤΔΕ-Πανεπιστήμιο Ιωαννίνων. World Wide Web. Παγκόσμιος Ιστός

Fragmentation and Exclusion: Understanding and Overcoming the Multiple Impacts of the European Crisis (Fragmex)

ΑΝΑΚΟΙΝΩΣΗ ΔΙΑΔΙΚΑΣΙΑΣ ΑΠΕΥΘΕΙΑΣ ΑΝΑΘΕΣΗΣ. Αριθμ. Πρωτ.: /2017 Ο ΕΙΔΙΚΟΣ ΛΟΓΑΡΙΑΣΜΟΣ ΚΟΝΔΥΛΙΩΝ ΕΡΕΥΝΑΣ

Σελίδα 2

Vodafone Business Connect

ΤΕΧΝΟΛΟΓΙΕΣ ΣΧΕΔΙΑΣΗΣ ΔΙΑΔΙΚΤΥΑΚΟΥ ΤΟΠΟΥ (Web Site Design Technologies)

Πληροφορική Τμήμα Σχεδιασμού & Τεχνολογίας Ξύλου & Επίπλου Αντώνιος Καραγεώργος Ευανθία Τσιλιχρήστου. Μάθημα 5 ο Τεχνολογίες Διαδικτύου: HTML I

Blog στο Wordpress. Επιμέλεια: Δέγγλερη Σοφία

Ηλεκτρονικό εμπόριο. HE 8 Εξατομίκευση

ΤΕΛΙΚΕΣ ΔΙΠΛΩΜΑΤΙΚΕΣ ΕΡΓΑΣΙΕΣ (6 Μονάδες ECTS)- Ακαδημαϊκό Έτος

ΑΝΑΠΤΥΞΗ ΛΟΓΙΣΜΙΚΟΥ ΓΙΑ ΤΗ ΔΙΕΝΕΡΓΕΙΑ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΜΕΛΕΤΩΝ

Χαρακτηριστικά ιστοσελίδας

Δημιουργία μιας επιτυχημένης παρουσίας στο διαδίκτυο

Αναζήτηση στον Ιστό. Πληκτρολόγηση του URL: στο πλαίσιο αναζήτησης του Mozilla Firefox. Enter ή κλικ στο Αναζήτηση

Παρακολούθηση και βελτιστοποίηση της επισκεψιμότητας ενός δικτυακού τόπου

Αν Ναι, δείτε πως με το λογισμικό axes μπορείτε!

Ενότητες Γ3.1 - Γ3.2 - Γ3.3

Social Network : Programming on FACEBOOK

ΔΙΑΔΙΚΤΥΑΚΗ ΠΡΟΒΟΛΗ ΚΑΙ ΔΙΑΧΕΙΡΙΣΗ

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED σχεδιασμός ιστοσελίδας ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

Γαβαλάς Δαμιανός

φιλοξενία & διαχείριση ιστοσελίδων

Πανεπιστήµιο Πειραιώς Τµήµα Πληροφορικής

Το διαδίκτυο είναι ένα δίκτυο που αποτελείτε από πολλά μικρότερα δίκτυα υπολογιστών.

Δικτυακά Πολυμέσα ΙΙ Διάλεξη #7 η : Μηχανές αναζήτησης: λειτουργία, αξιολόγηση. Γαβαλάς Δαμιανός

1 Συστήματα Αυτοματισμού Βιβλιοθηκών

ΟΙΚΟΝΟΜΙΚΗ ΠΡΟΣΦΟΡΑ ΣΧΕ ΙΑΣΗΣ ΚΑΙ ΚΑΤΑΣΚΕΥΗΣ web εφαρµογής - ηλεκτρονικού κατατήµατος για έξυπνα κινητά

Ανάπτυξη ιστολογίου. Γνωστικό αντικείμενο: Ερευνητική Εργασία - Project. Δημιουργός: ΦΩΤΙΟΣ ΛΑΖΑΡΙΝΗΣ

ΑΣΚΗΣΗ. Δημιουργία Ευρετηρίων Συλλογής Κειμένων

Διαφορές single-processor αρχιτεκτονικών και SoCs

Πανεπιστήμιο Πειραιώς Τμήμα Πληροφορικής Πρόγραμμα Μεταπτυχιακών Σπουδών «Πληροφορική»

Οδηγός γρήγορης εκκίνησης

Περιεχόμενα. Πρόλογος... xiii

ΟΙΚΟΝΟΜΙΚΗ ΠΡΟΣΦΟΡΑ ΣΧΕ ΙΑΣΗΣ ΚΑΙ ΚΑΤΑΣΚΕΥΗΣ ΙΑ ΙΚΤΥΑΚΟΥ ΠΛΗΡΟΦΟΡΙΑΚΟΎ ΣΥΣΤΗΜΑΤΟΣ. Τρίτη, 7 Φεβρουαρίου 2012

TEC410 Ανάπτυξη Δικτυακών Τόπων (Δ εξάμηνο)

ΗΛΕΚΤΡΟΝΙΚΟ ΣΥΣΤΗΜΑ ΥΠΟΒΟΛΗΣ ΜΗΧΑΝΟΓΡΑΦΙΚΟΥ ΔΕΛΤΙΟΥ

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές

Ηλεκτρονικό Επιχειρείν & Νέες Τεχνολογίες για Επιχειρηματικότητα ΔΕΟ45

Οδηγίες Χρήσης Πλατφόρμας Ασύγχρονης Τηλεκπαίδευσης (Moodle) του Τμήματος ΔΕΤ

Οδηγός δημιουργίας καμπάνιας Pops / Interstitial Εισαγωγή:

Ανάπτυξη Δικτυακής Εφαρμογής Διάχυσης και Ανάλυσης Γεωχωρικών Δεδομένων και Πληροφοριών

Blog στο Wordpress. Επιμέλεια: Δέγγλερη Σοφία

Ημερομηνία Παράδοσης: 4/4/2013

Χαρακτηριστικά ιστοσελίδας

Σχεδίαση και Ανάπτυξη Ιστότοπων

Η βασική εργαλειοθήκη του διαδικτύου

Transcript:

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ Διαπανεπιστημιακό Διατμηματικό Πρόγραμμα Μεταπτυχιακών Σπουδών (Δ.Δ.Π.Μ.Σ) Προηγμένα Συστήματα Υπολογιστών και Επικοινωνιών Κατεύθυνση: Δικτυακή Υπολογιστική- Ηλεκτρονικό Εμπόριο ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Ανάπτυξη μηχανισμού διάσχισης του διαδικτύου (Web Crawler) με βάση το προβαλλόμενο Μεταπτυχιακή Διατριβή του Ναζέρ Νιντάλ Α.Ε.Μ. 235 υπό την επίβλεψη του λέκτορα κ. Ανδρέα Λ. Συμεωνίδη Θεσσαλονίκη, Μάρτιος 2012

2

Ευχαριστίες Μέσω αυτού του τμήματος επιθυμώ να ευχαριστήσω όλους όσους συμμετείχαν ενεργά ή όχι στην ολοκλήρωση αυτής της διπλωματικής Τον καθηγητή μου κ. Ανδρέα Συμεωνίδη, για την εμπιστοσύνη που μου έδειξε αναθέτοντάς μου αυτό το θέμα, αλλά και για την επιστημονική και ηθική στήριξη που μου παρείχε καθ όλη τη διάρκεια της χρονιάς. Οι παρεμβάσεις, συμβουλές του ήταν καθ όλα στοχευόμενες και χρήσιμες. Στον κ. Αλέξανδρο Μπάτζιο ο οποίος μας άνοιξε το δρόμο για το Headless Browsing. Στους γονείς μου, Μαρία και Άυμαν, γιατί είναι πάντα δίπλα μου και μου δίνουν δύναμη να επιτύχω τους στόχους μου. Σε όλους τους φίλους που μέσω της στήριξης τους μου έδωσαν δύναμη να συνεχίσω ακάθεκτος και να μην οπισθοχωρήσω σε όποια προβλήματα παρουσιάστηκαν. Στους συναδέλφους μου στη δουλειά που έδειξαν κατανόηση κατά τη διάρκεια εκπόνησης αυτής της διπλωματικής. 3

4

Ανάπτυξη μηχανισμού διάσχισης με βάση το προβαλλόμενο περιεχόμενο Περίληψη Το διαδίκτυο για τους χρήστες είναι στενά συνυφασμένο με τον όρο αναζήτηση. Η διαδικασία της αναζήτησης συνδέεται άρρηκτα με τις μηχανές αναζήτησης. Η κατασκευή και η συντήρηση αυτών όπως γνωρίζουμε στελεχώνεται από επιστημονικές ομάδες εφαρμόζοντας μοντέλα κοινωνικά, μαθηματικά, σημασιολογικά σε συνδυασμό με τις τεχνολογίες της πληροφορικής. Η διενέργεια ενός ερωτήματος σε μια μηχανή θα έχει ως αποτέλεσμα την εμφάνιση των κατάλληλων αποτελεσμάτων που πληρούν τα κριτήρια αναζήτησης που θέτουμε. Με την πάροδο του χρόνου και την αύξηση του ανταγωνισμού στο διαδικτυακό μάρκετινγκ αναπτύχθηκαν τεχνικές Search Engine Optimizationώστε να μπορέσουν ορισμένες ιστοσελίδες να αποκτήσουν ανταγωνιστικό πλεονέκτημα έναντι άλλων ώστε να μπορούν να εμφανίζονται σε υψηλότερη θέση κατάταξης για ορισμένα κριτήρια. Για να μπορέσει μια μηχανή αναζήτησης να γνωρίζει το περιεχόμενο μιας ιστοσελίδας χρησιμοποιεί τους crawlersοι οποίοι σαρώνουν μαζικά το διαδίκτυο. Επιπλέον, η εφαρμογή δυναμικών τεχνολογιών στο διαδίκτυο όπως η AJAX με σκοπό καλύτερη παρουσίαση του προβαλλόμενου περιεχομένου οδήγησε στην δημιουργία ενός χάσματος μεταξύ στο περιεχόμενο το οποίο βλέπει ένας χρήστης και σε αυτό που μια μηχανή αναζήτησης έχει ευρετηριοποιήσει για έναν ιστότοπο. Επιπλέον πολλές φορές είναι δυνατή η περιήγηση σε έναν ιστότοπο μετά από μια διαδικασία αναζήτησης ο οποίος δεν έχει νοηματική συσχέτιση με τα κριτήρια που θέσαμε στη μηχανή στο ερώτημα που κατασκευάσαμε. Οι ιστοσελίδες αυτές κυρίως είναι διαφημιστικού περιεχομένου και εμφανίζονται για να επέλθει πλασματική ανύψωση των κριτηρίων επισκεψιμότητας ενός ιστότοπου. Στο σημείο αυτό μπορούμε να πούμε ότι καθίσταται ωφέλιμη η δημιουργία ενός μηχανισμού ο οποίος μπορεί να εντοπίσει επακριβώς το προβαλλόμενο περιεχόμενο ενός ιστότοπου σε ένα χρήστη. Επαγωγικά η εντατική χρήση ενός τέτοιου μηχανισμού μπορεί να συμβάλει στην αποτελεσματικότερη και αποδοτικότερη αναζήτηση στο διαδίκτυο αν συνυπολογίσουμε το γεγονός ότι πλέον έχει δημιουργηθεί ένας ανθρωποκεντρικός μηχανισμός crawling του διαδικτύου. Ναζέρ Νιντάλ ΔΔΠΜΣ-ΤΗΜΜΥ nidal.nazer@gmail.com Μάρτιος 2012 5

A Web Crawling mechanism based on user projected content Abstract From a user perspective, the Internet is closely related to web searching, which is, in turn, inextricably linked to search engines. Research in design and maintenance of search engines is cutting edge, where social, mathematical and semantic models are coupled with software engineering primitives for the best possible outcome. In general, posting a query to a search engine should produce a result set that fulfills the search criteria as best as possible. Otherwise the search engine is considered ineffective, and its popularity starts to decrease. In order for a search engine to identify the content of a web site, it employs crawlers which massively scan throughout the internet. Optimal crawling and indexing follow specific methodologies that decide for the ranking of a web page based on its visitability, its content and the inbound/outgoing links from/to other web sites. Search Engine Optimization (SEO) techniques try to take advantage of these crawling process mechanisms for the benefit of specific web sites. Given that a web page ranks higher, it gains a competitive advantage over the other (similar) web pages. Additionally, since page visitability plays a substantial role in ranking, better presentation of the projected content is essential. This can be achieved by the use of dynamic technologies (e.g. AJAX), which also allow the diversification of the content a user sees from the content that a search engine indexes. Another way of ranking higher is to deceive a search engine and link a web page to concepts frequently accessed by the users. This technique, commonly used in advertisement-rich websites, increases visitability and consequently ranking. With the context of this thesis, a web crawling mechanism has been developed, which discovers user displayed content rather than search engine displayed content. Systematic use of this crawler can lead to more effective and efficient web searches and can reduce the inconsistency between the search engine queries and real content. It is, thus, acceptable to say that such a mechanism leads to an anthropocentric crawling of the web. Nazer Nidal nidal.nazer@gmail.com March 2012 6

7

Περιεχόμενα Ευχαριστίες... 3 Περίληψη... 5 Abstract... 6 1.Εισαγωγή... 18 1.1 Σκοπός της Διπλωματικής... 18 1.2 Στόχοι της Διπλωματικής... 18 1.3 Δομή της διπλωματικής... 19 2.Βελτιστοποίηση σε σχέση με τις Μηχανές Αναζήτησης (SEO)... 20 2.1 Ποιοί ιστότοποι χρειάζονται SEO;... 20 2.2 Η χρησιμότητα των Robots... 20 2.3 Οι πιο δημοφιλείς μηχανές αναζήτησης... 21 2.4 Ποιοί παράγοντες επηρεάζουν την κατάταξη... 22 2.4.1 Visible On Page factors... 23 2.4.2 Invisible On-page factors... 24 2.4.3 Time-based factors... 25 3. Η χρησιμότητα του Headless Browsing... 30 3.1 HtmlUnit... 30 3.2 JXBroswer... 31 3.3 Crowbar Simile... 33 3.4 PhantomJS... 33 3.5 Συγκεντρωτικά χαρακτηριστικά των Headless Browsers... 35 3.6 Επιλογή μηχανής για φόρτωση(rendering) ιστοσελίδων... 35 3.6.1 Δημιουργία περιπτώσεων ελέγχου... 35 3.6.2 Συμπεριφορά JXBroswer... 38 3.6.3 Συμπεριφορά PhantomJS... 39 3.6.4 Συμπεριφορά Crowbar... 40 3.6.5 Επιλογή Τεχνολογίας... 40 3.6.6 Αποτελέσματα πειραμάτων αξιολόγησης Headless Browsers... 40 4. Διάσχιση διαδικτύου (Web Crawling)... 43 4.1 Εισαγωγή στο Web Crawling... 43 4.1.1 Κατασκευάζοντας μία crawling υποδομή... 45 4.1.2 Frontier (λίστα μη-επισκεπτόμενων URLs)... 45 8

4.1.3 Ιστορικό και η αποθήκη σελίδων... 47 4.1.4 Φόρτωση σελίδων... 48 4.1.5 Parsing... 49 4.1.6 HTML tag tree... 51 4.1.7 Πολυνηματικοί Crawlers... 52 4.2 Ο WebSphinx crawler... 54 4.2.1 Crawler Workbench... 54 4.2.2 WebSphinx class library... 54 4.2.3 Εξερευνώντας τον WebSphinx... 54 4.3 Polite Crawling... 56 4.3.1 Η έννοια του Politeness... 56 4.3.2 Crawler identification(αναγνώριση)... 56 4.3.3 Το Robot Exclusion πρωτόκολλο... 57 4.3.4 Crawling χρήσιμου περιεχομένου... 57 4.3.5 Η περίπτωση των subdomains... 58 4.3.6 Δημιουργία μίας λίστα απαγόρευσης... 59 5.Προτεινόμενη μεθοδολογία... 61 5.1 Βασικές Πληροφορίες που χρειάζονται για μια σελίδα... 62 5.2 Η σχεδίαση της βάσης Δεδομένων... 62 5.3 Επεκτάσεις του μηχανισμού του WebSphinx - WebSphinxCrawler... 63 5.4 Η κατασκευή του extended WebSphinx με όνομα JxSPhinx... 65 5.4.1 Διαφορές στην υλοποίηση του WebSphinx Crawler σε σχέση με τον JxSPhinx Crawler... 65 5.4.2 Εξαγωγή συνδέσμων με τη χρήση του JXBroswer... 67 5.5 Σενάρια εκτέλεσης... 68 5.6 Πολυπλοκότητα του παραγόμενου λογισμικού... 74 5.7 Προβλήματα που προέκυψαν... 75 6. Πειράματα και τεκμηρίωση... 77 6.1 Κατασκευή Πειραμάτων... 77 6.2 Αποτελέσματα πειραμάτων... 79 6.3 Αξιολόγηση Αποτελεσμάτων ενδεικτικών πειραμάτων... 100 7. Συμπεράσματα-Μελλοντική εργασία... 102 7.1 Σύνοψη - Συμπεράσματα... 102 9

7.2 Μελλοντική εργασία... 102 8. Παράρτημα... 103 8.1 Polite Crawling για τον WebSphinx... 103 8.2 Λεπτομερής ανάλυση της Βάσης Δεδομένων... 105 Βιβλιογραφία... 111 10

Λίστα Πινάκων Πίνακας 1. Συγκεντρωτικά χαρακτηριστικά των Headless Browser... 35 Πίνακας 2 Χρόνοι εκτέλεσης των JXBroswer και PhantomJS... 41 Πίνακας 3 Σύγκριση JXBroswer και PhantomJS... 42 Πίνακας 4 Σύγκριση JXBroswer και PhantomJS... 42 Πίνακας 5 Χρόνοι εκτέλεσης των WebSphinx και JxSPhinx... 74 Πίνακας 6 Αποτελέσματα πειραμάτων για το sourceforge.net... 79 Πίνακας 7 Αποτελέσματα πειραμάτων για το sourceforge.net... 80 Πίνακας 8 Αποτελέσματα πειραμάτων για το sourceforge.net... 80 Πίνακας 9 Αποτελέσματα πειραμάτων για το uefa.com... 84 Πίνακας 10 Αποτελέσματα πειραμάτων για το uefa.com... 84 Πίνακας 11 Αποτελέσματα πειραμάτων για το uefa.com... 85 Πίνακας 12 Αποτελέσματα πειραμάτων για το skroutz.gr... 88 Πίνακας 13 Αποτελέσματα πειραμάτων για το skroutz.gr... 88 Πίνακας 14 Αποτελέσματα πειραμάτων για το skroutz.gr... 89 Πίνακας 15 Αποτελέσματα πειραμάτων για sport-fm.gr... 93 Πίνακας 16 Αποτελέσματα πειραμάτων για sport-fm.gr... 93 Πίνακας 17 Αποτελέσματα πειραμάτων για sport-fm.gr... 94 Πίνακας 18 Αποτελέσματα πειραμάτων για nooz.gr... Error! Bookmark not defined. Πίνακας 19 Αποτελέσματα πειραμάτων για nooz.gr... 97 Πίνακας 20 Αποτελέσματα πειραμάτων για nooz.gr... 97 Πίνακας 21 Κώδικας Σχήματος Βάσης Δεδομένων εφαρμογής... 108 11

Λίστα Εικόνων Εικόνα 1. Συγκεντρωτικά χαρακτηριστικά των δημοφιλέστερων μηχανών αναζήτησης... 21 Εικόνα 2. Παράδειγμα μεταδεδομένου description... 24 Εικόνα 3. Παράδειγμα μεταδεδομένου λέξεις κλειδιά... 25 Εικόνα 4. Παράδειγμα alt title ιδιότητας... 25 Εικόνα 5. Παράδειγμα alt title ιδιότητας... 25 Εικόνα 6. Διάκριση block level elements... 25 Εικόνα 7. Παράδειγμα ανακατεύθυνσης συνδέσμου... 36 Εικόνα 8. Παράδειγμα προβολής περιεχομένου ιστοσελίδας από iframe... 37 Εικόνα 9. Παράδειγμα εμφωλευμένων iframes... 37 Εικόνα 10. Παράδειγμα εμφωλευμένων iframes... 38 Εικόνα 11. ScreenShot από την εκτέλεση του JXBroswer... 39 Εικόνα 12. Σχηματική αναπαράσταση βρόγχου εκτέλεσης Crawler... 46 Εικόνα 13. Σχηματική αναπαράσταση του Html δέντρου... 52 Εικόνα 14. Αναπαράσταση εκτέλεσης βρόγχου crawler με πολλά νήματα... 53 Εικόνα 15. Εξαγωγή γράφου επίσκεψης από τον WebSphinx... 55 Εικόνα 16. Αποθήκευση σελίδων μέσω του WebSphinx... 55 Εικόνα 17. Συνένωση σελίδων μέσω του WebPShinx... 55 Εικόνα 18. Εξαγωγή εικόνων μέσω του WebSphinx... 56 Εικόνα 19. Επεκτάσεις αρχείων που πρέπει να ελέγχονται από τον crawler... 59 Εικόνα 20 Σχηματική αναπαράσταση του JxSPhinx... 61 Εικόνα 21. Διαφορά περιεχομένου των WebSphinx και JxSPhinx... 62 Εικόνα 22. Οι πίνακες της βάσης δεδομένων... 63 Εικόνα 23. Δημιουργία καινούριων κλάσεων και ενσωμάτωσή τους στο υπάρχον σύστημα 64 Εικόνα 24. Η μέθοδος visit των WebSphinx και JxSPhinx... 66 Εικόνα 25. Οι νέες κλάσεις του JxSPhinx... 67 Εικόνα 26. ScreenShot από την διαδικασία Rendering μιας σελίδας... 68 Εικόνα 27. Σενάριο Εκτέλεσης (Ανακατεύθυνση Συνδέσμου)... 69 Εικόνα 28. Σενάριο Εκτέλεσης (Ανακατεύθυνση Συνδέσμου)... 69 Εικόνα 29. Σενάριο Εκτέλεσης (Ανακατεύθυνση Συνδέσμου)... 69 Εικόνα 30. Σενάριο Εκτέλεσης (Ανακατεύθυνση Συνδέσμου)... 70 Εικόνα 31. Σενάριο Εκτέλεσης(Iframe προβάλει περιεχόμενο ιστοσελίδας)... 70 Εικόνα 32. Σενάριο Εκτέλεσης(Iframe προβάλει περιεχόμενο ιστοσελίδας)... 71 Εικόνα 33. Σενάριο Εκτέλεσης(Iframe προβάλει περιεχόμενο ιστοσελίδας)... 71 Εικόνα 34. Σενάριο Εκτέλεσης(Iframe προβάλει περιεχόμενο ιστοσελίδας)... 71 Εικόνα 35. Σενάριο Εκτέλεσης(Εμφωλευμένα iframes προβάλλουν περιεχόμενα σελίδας). 72 Εικόνα 36. Σενάριο Εκτέλεσης(Εμφωλευμένα iframes προβάλλουν περιεχόμενα σελίδας). 72 Εικόνα 37. Σενάριο Εκτέλεσης(Εμφωλευμένα iframes προβάλλουν περιεχόμενα σελίδας). 72 Εικόνα 38. Σενάριο Εκτέλεσης(Εμφωλευμένα iframes προβάλλουν περιεχόμενα σελίδας). 73 Εικόνα 39. Αρχιτεκτονική Polite Crawling... 103 Εικόνα 40. Ο πίνακας JxSPhinx_page... 105 12

Εικόνα 41. O πίνακας JxSPhinx_page_links... 106 Εικόνα 42. Ο πίνακας JxSPhinx_tags... 106 Εικόνα 43. Ο πίνακας WebSphinx_page... 107 Εικόνα 44. Ο πίνακας WebSphinx_page_links... 107 Εικόνα 45. Ο πίνακας WebSphinx_tags... 108 13

Λίστα Διαγραμμάτων Διάγραμμα 1 Χρόνοι Εκτέλεσης Rendering ιστοσελίδων για τον JXBroswer και PhantomJS. 41 Διάγραμμα 2 Πολυπλοκότητα των WebSphinx και JxSPhinx... 75 Διάγραμμα 3 Αριθμός συνδέσμων των WebSphinx και JxSPhinx για το www.sourceforge.net συνάρτηση των επισκεπτόμενων σελίδων... 81 Διάγραμμα 4 Ομοιότητα του συνόλου συνδέσμων για τον www.sourceforge.net συνάρτηση των επισκεπτόμενων σελίδων... 82 Διάγραμμα 5 Διαφορά του αριθμού συνδέσμων των δυο crawler συνάρτηση των επισκεπτόμενων σελίδων για το sourceforge.net... 82 Διάγραμμα 6 Ποσοτικά χαρακτηριστικά μεταδεδομένων συνάρτηση των επισκεπτόμενων σελίδων για το www.sourceforge.net... 83 Διάγραμμα 7 Αριθμός ανόμοιων συνδέσμων των συνάρτηση των επισκεπτόμενων σελίδων για το www.sourceforge.net... 83 Διάγραμμα 8 Αριθμός συνδέσμων των WebSphinx και JxSPhinx για το www.uefa.com συνάρτηση των επισκεπτόμενων σελίδων... 86 Διάγραμμα 9 Ομοιότητα του συνόλου συνδέσμων για τον www.uefa.com συνάρτηση των επισκεπτόμενων σελίδων... 86 Διάγραμμα 10 Διαφορά του αριθμού συνδέσμων των δυο crawler συνάρτηση των επισκεπτόμενων σελίδων για το www.uefa.com... 87 Διάγραμμα 11 Αριθμός σελίδων που έχουν Javascript και το μεταδεδομένο Robot συνάρτηση των επισκεπτόμενων σελίδων για το www.uefa.com... 87 Διάγραμμα 12 Αριθμός συνδέσμων των WebSphinx και JxSPhinx για το www.skroutz.gr... 90 Διάγραμμα 13 Ομοιότητα του συνόλου συνδέσμων για τον www.skroutz.gr συνάρτηση των επισκεπτόμενων σελίδων... 90 Διάγραμμα 14 Διαφορά του αριθμού συνδέσμων των δυο crawler συνάρτηση των επισκεπτόμενων σελίδων για το www.skroutz.gr... 91 Διάγραμμα 15 Αριθμός σελίδων που διαθέτουν javascript για το www.skroutz.gr συνάρτηση των επισκεπτόμενων σελίδων... 91 Διάγραμμα 16 Αριθμός σελίδων που διαθέτουν το μεταδεδομένο keywords για το www.skroutz.gr συνάρτηση των επισκεπτόμενων σελίδων... 92 Διάγραμμα 17 Αριθμός ανόμοιων συνδέσμων των συνάρτηση των επισκεπτόμενων σελίδων για το www.skroutz.gr... 92 Διάγραμμα 18 Αριθμός συνδέσμων των WebSphinx και JxSPhinx για το www.sport-fm.gr.. 95 Διάγραμμα 19 Ομοιότητα του συνόλου συνδέσμων για τον www.sport-fm.gr συνάρτηση των επισκεπτόμενων σελίδων... 95 Διάγραμμα 20 Διαφορά του αριθμού συνδέσμων των δυο crawler συνάρτηση των επισκεπτόμενων σελίδων για το www.sport-fm.gr... 96 Διάγραμμα 21 Ποσοτικά χαρακτηριστικά μεταδεδομένων συνάρτηση των επισκεπτόμενων σελίδων για το www.sport-fm.gr... 96 Διάγραμμα 22 Αριθμός συνδέσμων των WebSphinx και JxSPhinx για το www.nooz.gr... 98 14

Διάγραμμα 23 Ομοιότητα του συνόλου συνδέσμων για τον www.nooz.gr συνάρτηση των επισκεπτόμενων σελίδων... 98 Διάγραμμα 24 Διαφορά του αριθμού συνδέσμων των δυο crawler συνάρτηση των επισκεπτόμενων σελίδων για το www.nooz.gr... 99 Διάγραμμα 25 Αριθμός ανόμοιων συνδέσμων των συνάρτηση των επισκεπτόμενων σελίδων για το www.nooz.gr... 99 Διάγραμμα 26 Αριθμός των σελίδων που κάνουν χρήση Javascript συνάρτηση των επισκεπτόμενων σελίδων για το www.nooz.gr... 100 15

Πίνακας Λεξιλογίου Headless Browser Crawler Spider Site Domain name Spamming Anchor text Link Browser Web Scraping Server Dataset Render Nested inline frames Preferential Heuristic Frontier Repository Parsing Tag tree Subdomain Worm On page factors tag Φυλλομετρητής χωρίς διεπαφή χρήστη Μηχανισμός διάσχυσης Μηχανισμός ανίχνευσης του διαδικτύου Ιστότοπος Όνομα κυριότητας Μαζική αποστολή πληροφοριών από λογισμικό Ορατό κείμενο υπερσυνδέσμου Σύνδεσμος Φυλλομετρητής Εξαγωγή περιεχομένου από ιστότοπο Εξυπηρετητής Σύνολο δεδομένων Φόρτωση περιεχομένου ιστοσελίδας Εμφωλευμένα πλαίσια στην html Επιλεκτικός Ευρετικός Λίστα επισκεπτόμενων συνδέσμων Αποθήκη Ανάλυση Δέντρο με τις ετικέτες της html Υποπεριοχή ενός subdomain Νήμα Ορατοί παράγοντες ιστοσελίδων Ετικέτα 16

Πίνακας Συντομογραφιών SEO CTR API XML DOM JSON JDOM IDE JDBC AJAX FIFO Search Engine Optimization Click through rate Application Programming Interface Extensible Markup language Document Object Model JavaScript Object Notation Java Document Object Model Integrated development environment Java Database Connectivity Asynchronous JavaScript XML First In First Out 17

1.Εισαγωγή 1.1 Σκοπός της Διπλωματικής Ο σκοπός της παρούσας μεταπτυχιακής διπλωματικής εργασίας αποτελεί η μελέτη της διαδικασίας διάσχισης του διαδικτύου (web crawling) κάνοντας χρήση τεχνικών εύρεσης προβαλλόμενου στο χρήστη περιεχομένου (Headless Browsing). Για το σκοπό αυτό αναπτύχθηκε ο JxSPhinx ένας crawler που εκμεταλλεύεται τις τεχνικές αυτές κατά την διαδικασία διάσχισης του διαδικτύου. Η δυνατότητα ανάλυσης και ανίχνευσης του προβαλλόμενου περιεχομένου μιας ιστοσελίδας στο χρήστη δίνει την δυνατότητα μιας πιο ανθρωποκεντρικής προσέγγισης της διαδικασίας του crawling. Μια τέτοια διαδικασία μπορεί να συμβάλει σε μια αποτελεσματικότερη αναζήτηση και προβολή αποτελεσμάτων από τις μηχανές αναζήτησης, καθώς δεν είναι λίγες οι φορές που ο χρήστης βρίσκεται σε μια ιστοσελίδα που δεν έχει καμία σχέση το περιεχόμενο της με το θεματικό περιεχόμενο των κριτηρίων αναζήτησης που κατασκεύασε. 1.2 Στόχοι της Διπλωματικής Βασικός στόχος της διπλωματικής αποτέλεσε η σχεδίαση και ανάπτυξη ενός crawler o οποίος μπορεί να εξάγει επακριβώς την πληροφορία που βλέπει και ένας απλός χρήστης που περιηγείται σε μια ιστοσελίδα. Για τον λόγο αυτό γίνεται χρήση ενός Headless Browser, ο οποίος παρέχει τη δυνατότητα εξολοκλήρου θεματικής και τεχνολογικής ανάλυσης μιας ιστοσελίδας. Ο Headless Browser που χρησιμοποιήθηκε ήταν ο JXBroswer για λόγους που θα παρουσιαστούν στη συνέχεια. Το λογισμικό που αναπτύχτηκε αποτελεί επέκταση του WebSphinx crawler, ο οποίος παρέχει βιβλιοθήκες τόσο για την ανάλυση των ιστοσελίδων, όσο και για την οπτικοποίηση των αποτελεσμάτων του σε γράφο κατά την διάρκεια εκτέλεσης. Ο JxSPhinx χρησιμοποιεί τον ίδιο μηχανισμό για το crawling με τον WebSphinx, με τη διαφορά ότι έχει τροποποιηθεί η διαδικασία εξαγωγής των συνδέσμων των ιστοσελίδων κάνοντας χρήση του JXBroswer. Αν αναλογιστούμε ότι οι περισσότεροι crawlers δεν έχουν την δυνατότητα ανάλυσης δυναμικού περιεχομένου όπως AJAX, Jquery, ανακατευθύνσεις συνδέσμων και προβολής περιεχομένου μέσα σε εμφωλευμένα iframes, δημιουργείται η ανάγκη ενός λογισμικού το οποίο μπορεί να ανιχνεύει το προβαλλόμενο περιεχόμενο σε ένα χρηστή. Ο JxSPhinx δέχεται όρισμα ένα domain (όπως και ένας απλός crawler) και ξεκινάει τη διαδικασία ανάλυσης των ιστοσελίδων αποθηκεύοντας το περιεχόμενο που μας ενδιαφέρει. 18

Για να μπορέσουμε να τεκμηριώσουμε την αρχική μας υπόθεση, ότι δηλαδή το προβαλλόμενο περιεχόμενο μιας ιστοσελίδας είναι διαφορετικό απo αυτό που χαρτογραφούν οι σύγχρονοι crawlers, κατασκευάσαμε μια βάση δεδομένων και για τον ίδιο αριθμό ιστοσελίδων αναλύσαμε το περιεχόμενο που ανιχνεύει ο WebSphinx και ο JxSPhinx, αντίστοιχα. 1.3 Δομή της διπλωματικής Στο πρώτο κεφάλαιο γίνεται μια εισαγωγή στο αντικείμενο της διπλωματικής εργασίας κάνοντας γνωστούς τον σκοπό και τους στόχους της. Στο δεύτερο κεφάλαιο γίνεται μια προσέγγισή των μηχανών αναζήτησης, αλλά και του Search Engine Optimization. Στο τρίτο κεφάλαιο αναλύουμε τις βασικές αρχές του Headless Browsing παρουσιάζοντας τα σημαντικότερα εργαλεία που επιτελούν μια τέτοια διαδικασία. Στο τέλος γίνεται η επιλογή του εργαλείου που ταιριάζει καλύτερα στο πρόβλημά και μπορεί να προσαρμοστεί στις απαιτήσεις της παρούσας εργασίας. Για τις βασικές αρχές του crawling αλλά και του WebSphinx γίνεται αναφορά στο τέταρτο κεφάλαιο, ενώ στο πέμπτο κεφάλαιο γίνεται ανάλυση του μοντέλου που υιοθετήθηκε, αλλά και της μεθοδολογίας ανάπτυξης του JxSPhinx, επεξηγώντας βηματικά τη διαδικασία ενοποίησης του crawler με τον Headless Browser. Στο έκτο κεφάλαιο συζητούμε την πειραματική διαδικασία που ακολουθήσαμε, παρουσιάζοντας αναλυτικά αποτελέσματα. Τέλος, στο έβδομο κεφάλαιο παρουσιάζονται τα συμπεράσματα της παρούσας εργασίας, σε συνδυασμό τους μελλοντικούς τομείς επέκτασης της διπλωματικής. 19

2.Βελτιστοποίηση σε σχέση με τις Μηχανές Αναζήτησης (SEO) Το SEO αποτελεί συντομογραφία των λέξεων Search Engine Optimization και έχει ως στόχο να βελτιωθεί η κατάταξη ενός ιστότοπου, όπως αυτός παρουσιάζεται από τις μηχανές αναζήτησης. Ο όρος SEO περιγράφει ένα σύνολο από δραστηριότητες που έχουν ως στόχο να αυξήσουν την κίνηση από όλες τις μηχανές αναζήτησης προς τον εκάστοτε ιστόχωρο [1]. Αυτό περιλαμβάνει ενέργειες όπως αλλαγή στον HTML κώδικα ή αλλαγή στο περιεχόμενο μιας σελίδας. Οι μηχανές αναζήτησης, όπως θα αναλυθεί και αργότερα, σαρώνουν το περιεχόμενο των σελίδων και το αξιολογούν με βάση το περιεχόμενο, αλλά και κάποια κριτήρια τα οποία οι ίδιες θέτουν. 2.1 Ποιοί ιστότοποι χρειάζονται SEO; Σε γενικές γραμμές όλοι χρειάζονται το Search Engine Optimization. Εάν για τον ιστότοπο τον οποίο μελετάμε ισχύει ένα από τα παρακάτω, δεν προκύπτει η ανάγκη εφαρμογής του SEO [1]: είναι ένα website το οποίο δεν απαιτείται να εμφανίζεται στις πρώτες θέσεις των μηχανών αναζήτησης (π.χ. κάποιο εκπαιδευτικό εργαλείο για τους υπαλλήλους μιας εταιρείας) ο ιστότοπος κατέχει μια καλή θέση στις μηχανές αναζήτησης. ο ιστότοπος αναμένεται να σχεδιαστεί από την αρχή τους επόμενους μήνες, οπότε τεχνικές SEO θα εφαρμοστούν στον καινούριο ιστότοπο. 2.2 Η χρησιμότητα των Robots Μια σημαντική οντότητα των μηχανών αναζήτησης είναι τα λεγόμενα robots ή spiders. Είναι οντότητες οι οποίες σαρώνουν το κείμενο των ιστοτόπων και το επιστρέφουν ώστε να αναλυθεί από την ισχυρή και κεντρική μηχανή αναζήτησης. Αυτή η διαδικασία αποτελεί το επονομαζόμενο crawling ή spidering [2]. Υπάρχουν πολλές μεταφορές ώστε να εξηγήσουμε πως δουλεύει ένα robot, αλλά αν το παρομοιάσουμε με ένα μυρμήγκι πιστεύουμε ότι περιγράφει το ρόλο του καλύτερα. Στην περίπτωση αυτή ο HTML κώδικας είναι το "φαγητό" του και προσπαθεί να αποκομίσει όσο το δυνατόν περισσότερο με το λιγότερο κόπο και ταξιδεύοντας πιο εύκολα χωρίς εμπόδια μέσα από τα διάφορα μονοπάτια. Τα μονοπάτια αντιστοιχούν στους HTML συνδέσμους. Ακολουθώντας αυτά τα μονοπάτια το μυρμήγκι (robot) συλλέγει το φαγητό του (κείμενο) και το αποθηκεύει στη φωλιά του (βάση δεδομένων που διαθέτει η μηχανή αναζήτησης). Εκατομμύρια robots εξερευνούν και συλλέγουν πληροφορίες ταυτόχρονα σε όλο το παγκόσμιο δίκτυο. Εάν ένα μονοπάτι είναι αποκομμένο ή μπλοκαρισμένο, το μυρμήγκι φεύγει και συνεχίζει στο επόμενο. Εάν δεν υπάρχει φαγητό το μυρμήγκι δεν επιστρέφει πίσω τίποτα. 20

Στην περίπτωση των μηχανών αναζήτησης χρησιμοποιούνται βάσεις δεδομένων στις οποίες αποθηκεύονται τμήματα κειμένων που έχουν συλλεχθεί από εκατομμύρια sites σε όλο το δίκτυο. 2.3 Οι πιο δημοφιλείς μηχανές αναζήτησης Google: Είναι η πιο δημοφιλής μηχανή αναζήτησης κατακτώντας σύμφωνα με επίσημα στατιστικά το μέγιστο μερίδιο της αγοράς εδώ και αρκετά χρόνια. Στον χώρο της είναι η μόνη που προσφέρει καταχώρηση στο λεξικό και σε συνδυασμό με τις άλλες υπηρεσίες τις οποίες προσφέρει (Gmail, Google maps, feed readers, web master tools, web analytics) ξεχωρίζει από τους ανταγωνιστές της [3]. Η αναζήτηση στη μηχανή της Google περιλαμβάνει μια μεγάλη ποικιλία φίλτρων όπως είναι βίντεο, εικόνα, πρόσφατα νέα, blogs κτλ. Είναι αυτή που καθορίζει τις εξελίξεις στον τομέα της αναζήτησης. Πρώτη καθόρισε τo Link Popularity ως σημαντικό παράγοντα για μια αναζήτηση, όπως και την ηλικία ενός ιστότοπου. AOL: Χρησιμοποιεί τη βάση δεδομένων της Google για την εμφάνιση των αποτελεσμάτων και δεν αποτελεί κάτι ιδιαίτερο στον τομέα του SEO, παρόλο που έχει το 1.6% της συνολικής κίνησης των αναζητήσεων [4]. Yahoo: Είναι μια από τις πιο παλιές και πιο γνωστές μηχανές αναζήτησης. Αρχικά αποτέλεσε δικτυακό κατάλογο άλλων ιστοσελίδων. Το 1990 μετατράπηκε σε ένα portal με σκοπό την αναζήτηση [3]. Αρχικά η Yahoo έκανε μόνη της το crawling, spidering, την αποθήκευση και ανάκτηση των δεδομένων. Τώρα πλέον η Yahoo υποστηρίζεται από την Bing. Εικόνα 1. Συγκεντρωτικά χαρακτηριστικά των δημοφιλέστερων μηχανών αναζήτησης 21

Bing: Είναι η μηχανή αναζήτησης της Microsoft η οποία αρχικά ξεκίνησε ως μια "μηχανή αποφάσεων" [3]. Η επίσημη λειτουργία της ξεκίνησε το 2009. Η Google έχει κατηγορήσει τη Microsoft ότι η Bing αντιγράφει τα αποτελέσματά της (https://searchengineland.com/ google-bing-is-cheating-copying-our-search-results-62914). ASK: Η μηχανή αναζήτησης αυτή εστιάζει τόσο στην κατασκευή φιλικών διεπαφών χρήστη, όσο και στην ανάδειξη καινοτόμων λύσεων στο περιεχόμενό τους [1]. Το χαρακτηριστικό το οποίο την έκανε ευρέως γνωστή είναι η παρουσίαση των αποτελεσμάτων της σε 3 στήλες προσπαθώντας να ελαχιστοποιήσει το scrolling, αλλά και η πλήρης αφομοίωση των νέων επιλογών στα αποτελέσματα. Τέλος με το ASK Eraser έδωσε τη δυνατότητα στους χρήστες να σβήνουν τα δεδομένα αναζήτησης από την βάση δεδομένων της ASK. 2.4 Ποιοί παράγοντες επηρεάζουν την κατάταξη Οι αλγόριθμοι οι οποίοι χρησιμοποιούνται από τις μηχανές αναζήτησης για να υπολογίσουν τα αποτελέσματα αναζήτησης μπορούν να τροποποιηθούν ανά πάσα χρονική στιγμή. Ιστορικά, οι υπεύθυνοι του τμήματος μάρκετινγκ των μηχανών αναζήτησης δημιουργούν βελτιστοποιημένες σελίδες για την κάθε μηχανή αναζήτησης ξεχωριστά, παρόλο που πολλές φορές αυτό μπορεί να οδηγήσει σε αναδίπλωση και επανάληψη περιεχομένου [4]. Η κατάταξη πρέπει να κατακτάται μέσα από μια διαδικασία η οποία είναι κοινή για όλες τις σελίδες. Υπολογισμοί όπως αυτοί της βέλτιστης πυκνότητας λέξεων και του βέλτιστου μέγεθος περιεχομένου σελίδας είναι σημαντικοί για την πλειοψηφία των μηχανών αναζήτησης, παρόλα αυτά οδηγούν σε μια υπεραπλούστευση των σύγχρονων αλγορίθμων ανάκτησης πληροφορίας που χρησιμοποιούνται. Για αυτό το λόγο αναφέρουμε τους πιο σημαντικούς παράγοντες κατάταξης που πρέπει να γνωρίζουν όλοι οι σχεδιαστές δικτυακών τόπων. Οι παράγοντες αυτοί μπορούν να ταξινομηθούν σε τέσσερις κατηγορίες: Visible on-page factors, Invisible on-page factors, Time-based factors, και External factors. Ορατοί παράγοντες Ιστοσελίδων (On - page factors) Είναι παράγοντες οι οποίοι υπαγορεύονται από το περιεχόμενο της σελίδας. Παίζουν σημαντικό ρόλο για την εκστρατεία μάρκετινγκ των μηχανών αναζήτησης καθώς είναι εύκολο να τους ελέγξουν [1]. Επειδή είναι ολοφάνερο κίνητρο για τους spammers, οι μηχανές αναζήτησης άρχισαν να δίνουν βαρύτητα όσο μπορούν και σε νέους παράγοντες. Παρόλα αυτά σε καμία περίπτωση δεν μπορούμε να πούμε ότι οι on-page factors δεν είναι σημαντικοί. Χωρίζουμε τους on-page factors σε 2 κατηγορίες: αυτούς που είναι ορατοί (visible) και αυτούς οι οποίοι δεν είναι ορατοί (invisible) [1]. Οι πρώτοι είναι πολύ πιο σημαντικοί από τους δεύτερους. Μάλιστα, κάποιοι θεωρούν ότι οι αόρατοι παράγοντες είναι ανάξιοι χρήσης. Αυτό συμβαίνει γιατί είναι εύκολο να τροποποιηθούν χωρίς να αλλάξει το προβαλλόμενο περιεχόμενο της σελίδας. 22

2.4.1 Visible On Page factors Οι ορατοί παράγοντες είναι οι εξής: Τίτλος σελίδας (page title) Κεφαλίδα σελίδας (page headings) Περιεχόμενο σελίδας (page copy) Εξερχόμενοι σύνδεσμοι (outbound links) Λέξεις κλειδιά στα URL και στο domain name (keywords in URLS and domain name) Επικαιρότητα σελίδας (site topicality) Τίτλος Σελίδας Είναι μια ακολουθία χαρακτήρων η οποία καθορίζεται από τα περιεχόμενα του <title> στοιχείου στην <head> περιοχή του HTML εγγράφου. Ο τίτλος είναι ορατός, τόσο στην γραμμή τίτλου στον περιηγητή, όσο και στην επικεφαλίδα των αποτελεσμάτων αναζήτησης [6]. Είναι ευλόγως ένας από τους σημαντικότερους στο SEO, επειδή είναι σημαντικός και για την κατάταξη στις μηχανές αναζήτησης, αλλά και για να μπορέσει να βελτιωθεί ο CTR (click through rate) [5]. Κάθε σελίδα πρέπει να έχει μια περιγραφική ετικέτα τίτλου και μια κεφαλίδα. Εάν αυτές παραμένουν ίδιες για όλες τις σελίδες του δικτυακού τόπου τότε δεν αναδύεται η χρησιμότητά τους. Στην περίπτωση αυτή το καλύτερο που μπορεί να συμβεί είναι να ευρετηριοποιηθεί η σελίδα ανεπαρκώς. Στη χειρότερη περίπτωση, μπορεί στον χώρο να επιβληθεί μια ποινή λόγω πανομοιότυπου περιεχομένου. Όλες οι σελίδες σε ένα δυναμικό site πρέπει να έχουν μοναδικούς και σχετικούς με το περιεχόμενο της σελίδας τίτλους. Κεφαλίδα Σελίδας Οι κεφαλίδες της σελίδας είναι τμήματα κειμένου τα οποία προέρχονται από το αντίγραφο της σελίδας για να υποδείξουν το γενικότερο πλαίσιο σημασία του ιστότοπου [7]. Μια κεφαλίδα δημιουργείται χρησιμοποιώντας την <Hx> ετικέτα της HTML, όπου x είναι ένας αριθμός μεταξύ 1 και 6. Αποτελεί έναν παράγοντα που βοηθάει τον χρήστη να περιηγηθεί σε μια σελίδα. Περιεχόμενο σελίδας(page Copy) Είναι ξεκάθαρο ότι εάν μια σελίδα περιέχει τις λέξεις κλειδιά για τις οποίες ο χρήστης ψάχνει, τότε αποτελεί ιδανική περίπτωση για το ερώτημα αναζήτησης που θέτει [6]. Οι αλγόριθμοι των μηχανών αναζήτησης λαμβάνουν υπόψη τους αυτό το γεγονός. Αναφέροντας τις λέξεις κλειδιά σε διαφορετικές κλίσεις (ενικός, πληθυντικός, παρόν, παρελθόν) είναι εξίσου χρήσιμο. Το SEO copy writing έχει ως στόχο να παράγει περιεχόμενο σε ένα δικτυακό τόπο με τέτοιο τρόπο ώστε να είναι ευανάγνωστο από τον χρήστη, αλλά ωστόσο στοχεύει σε συγκεκριμένους όρους αναζήτησης στις μηχανές. Είναι μια διαδικασία η οποία, νόμιμα, χωρίς να κάνει χρήση spamming τεχνικών επιδιώκει να επιτύχει υψηλές βαθμολογίες κατάταξης από τις μηχανές αναζήτησης. Δεν υπάρχει κάποια λύση η οποία να μπορεί να δημιουργεί ένα αντίγραφο εύκολα και το οποίο να είναι πειστικό, περιέχοντας 23

τις κατάλληλες λέξεις αρκετές φορές. Υπάρχουν, ωστόσο, κάποια τεχνάσματα που βοηθούν, όπως το να γίνεται χρήση του τέλους και της αρχής μιας πρότασης για να μπορέσουμε να επαναλάβουμε μια λέξη κλειδί ακριβώς. Για παράδειγμα: Ξενοδοχεία Μαϊάμι: Πρέπει να δοκιμάσετε ένα από τα ωραία μας ξενοδοχεία στο Μαϊάμι. Η ξενοδοχειακή διαμονή στο Make believe ξενοδοχείο θα υπερβεί όλες σας τις προσδοκίες [1]. Εξερχόμενοι Σύνδεσμοι Ο μηχανές αναζήτησης αξιολογούν τους συνδέσμους που περιέχει ένα έγγραφο. Ένας σχετικός σύνδεσμος σε μια ιστοσελίδα είναι πολύτιμο περιεχόμενο και ως τέτοιο αντιμετωπίζεται και από τις μηχανές αναζήτησης. Ωστόσο σύνδεσμοι σε άσχετο περιεχόμενο ή σε spam περιεχόμενο μπορούν δυνητικά να βλάψουν την βαθμολογία της σελίδας [1]. Λέξεις κλειδιά στο URL και στο Domain Name Είναι πιθανό οι λέξεις κλειδιά που περιέχονται από ένα URL τόσο στο domain name ή και στο όνομα του αρχείου να έχουν θετική επιρροή στη βαθμολογία της σελίδας. Έχουν επίσης πιθανή επιρροή και στο CTR, καθώς οι λέξεις κλειδιά στο URL μπορεί να αυξήσουν την πιθανότητα ένας χρήστης να κάνει κλικ λόγω της αύξησης της συνάφειας. Επικαιρότητα σελίδας Ο παράγοντας αυτός συσχετίζει μια σελίδα με κάποιες άλλες μέσω ενός ιστότοπου. Αυτό έχει ως αποτέλεσμα να ενισχύεται σημαντικά η βαθμολογία του συγκεκριμένου ιστότοπου. Αυτό σημαίνει ότι άλλες σχετικές σελίδες που συνδέονται με τον ιστότοπο οδηγούσαν στην γενική αύξηση της βαθμολογίας του ιστότοπου. 2.4.2 Invisible On-page factors Είναι παράγοντες όπως μπορούμε να καταλάβουμε εύκολα οι οποίο δεν είναι ορατοί σε μια σελίδα από έναν ανθρώπινο αναγνώστη. Μπορούν να διαβαστούν από μια μηχανή αναζήτησης όταν αυτή κάνει ανάλυση τη σελίδα. Οι παράγοντες που αναφέραμε χωρίζονται στις εξής κατηγορίες: μέτα περιγραφή (meta description), μέτα λέξεις-κλειδιά (meta keywords), Alt title ιδιότητας, και δομή σελίδας (page structure considerations). Μέτα περιγραφή Η μέτα περιγραφή μπορεί να βελτιώσει το CTR [3] και έχει μια μικρή επιρροή στην βαθμολογία στις μηχανές αναζήτησης. Στην συνέχεια ακολουθεί ένα παράδειγμα: Εικόνα 2. Παράδειγμα μεταδεδομένου description 24

Μέτα λέξεις κλειδιά Αυτό το κριτήριο θεωρείται ασήμαντο, επειδή είναι πλήρως αόρατο και υποκειμενικό στο χειρισμό. Παρόλα αυτά, είναι καλό να τοποθετούνται κάποιες σημαντικές λέξεις κλειδιά στα meta keywords tags. Στην συνέχεια ακολουθεί ένα παράδειγμα: Εικόνα 3. Παράδειγμα μεταδεδομένου λέξεις κλειδιά Alt-title ιδιότητας Οι ετικέτες είναι αόρατες, οπότε δεν είναι και τόσο σημαντικοί παράγοντες στη βαθμολογία μιας σελίδας. Είναι σημαντικές κυρίως για αναγνώστες οθόνης (screen readers) και για φυλλομετρητές βασισμένους σε κείμενο (text based) και ενισχύουν την χρηστικότητα και την προσβασιμότητα των σελίδων. Τα alt-tags μπορούν να χρησιμοποιηθούν κυρίως για την περιγραφή εικόνων όπου οι ιδιότητες τίτλου μπορούν να χρησιμοποιηθούν στις περισσότερες ετικέτες. Ακολουθεί ένα παράδειγμα της alt ιδιότητας σε μια εικόνα: Και η ιδιότητα τίτλου σε ένα σύνδεσμο: Εικόνα 4. Παράδειγμα alt title ιδιότητας Εικόνα 5. Παράδειγμα alt title ιδιότητας Δομή Σελίδας Οι μηχανές αναζήτησης κάνουν χρήση στοιχείων επιπέδου block (block level elements), για παράδειγμα <div>,<p>ή <table> στοιχεία για την ομαδοποίηση σχετικού κειμένου. Η χρήση στοιχείων επιπέδου block χωρίς κάποια ιεραρχική δομή ή διάκριση όπως αυτή που ακολουθεί μπορεί να είναι επιβλαβής. Εικόνα 6. Διάκριση block level elements 2.4.3 Time-based factors Οι παράγοντες αυτοί είναι αναλλοίωτοι, καθώς ο χρόνος είναι ο μόνος παράγοντας ο οποίος δεν μπορεί να επηρεαστεί με κανέναν τρόπο. Ένα παλιό site το οποίο αυξάνει με αργό ρυθμό των αριθμό των συνδέσμων του με το χρόνο είναι αυτό που εννοούμε το 25

«παλιό καλό κρασί» [1]. Οι μηχανές αναζήτησης έχουν την τάση να επιβραβεύουν αυτές τις σελίδες. Ένας μεγάλος αριθμός χρηστών χρησιμοποιούσε expired domain names που φιλοξενούσαν δημοφιλείς ιστότοπους με σκοπό να παραπλανήσουν τις μηχανές αναζήτησης και να θεωρήσουν τον καινούριο ιστόχωρο ως παλιό. Πλέον, οι μηχανές αναζήτησης δεν ακολουθούν αυτήν την τακτική και μηδενίζουν την προστιθέμενη αξία κάποιου site με domain name που έχει λήξει. Ωστόσο, υπάρχουν πλεονεκτήματα από την αγορά domains names απευθείας από χρήστες με υπάρχοντες ιστότοπους. Οι παράγοντες βασισμένοι στον χρόνο είναι η ηλικία του site και της σελίδας, αλλά και η ηλικία των συνδέσμων που αναφέρονται σε αυτήν. Ηλικία ιστότοπου και σελίδας Ένας ιστότοπος ο οποίος υφίσταται για πολλά χρόνια είναι πιθανόν να βαθμολογηθεί καλύτερα από έναν καινούριο, ενώ όλοι οι άλλοι παράγοντες να παραμένουν σταθεροί. Με την πάροδο του χρόνου όταν ένα site προσθέτει αξιόλογο περιεχόμενο γίνεται αξιόπιστο. Αυτό προσομοιάζει κυρίως την ανθρώπινη συμπεριφορά, καθώς ένας καταναλωτής είναι πιο πιθανόν να ψωνίσει από ένα κατάστημα το οποίο υπάρχει για πολλά χρόνια και παρέχει καλή ποιότητα υπηρεσιών, από το να ψωνίσει από ένα κατάστημα καινούριο για το οποίο δεν υπάρχει καθόλου φήμη. Επομένως ένας ιστότοπος ο οποίος υφίσταται για μεγάλο χρονικό διάστημα βαθμολογείται καλύτερα, τόσο γιατί διαθέτει συνδέσμους επί σειρά ετών, όσο και γιατί η ηλικία στο επίπεδο της σελίδας θεωρείται θετική. Επιπλέον, θεωρείται θετική η αλλαγή και η ανανέωση του περιεχομένου της σελίδας, αφού υποδεικνύει ότι η σελίδα είναι ενεργή. Ηλικία συνδέσμου Σύνδεσμοι παρόντες και σε άλλους ιστότοπους προσδίδουν περισσότερη αξία σε έναν χώρο. Με την πάροδο του χρόνου ένας σύνδεσμος εκτιμάται σε αξία. Μέγεθος domain name Οι μηχανές αναζήτησης θεωρούν ότι η καταχώρηση ενός μεγάλου domain name υποδεικνύει ότι ο ιστότοπος δεν διατίθεται για spamming. Αντίθετα, μικρά domain names χρησιμοποιούνται για spamming [1]. Ένας Spammer δεν καταχωρεί το domain name για παραπάνω από ένα χρόνο, και αυτό το γνωρίζουν οι μηχανές αναζήτησης. Εξωτερικοί παράγοντες Υπάρχουν αρκετοί εξωτερικοί παράγοντες οι οποίοι μπορούν να καθορίσουν την βαθμολογία ενός ιστότοπου. Οι αυτοί οι παράγοντες είναι: Ποιότητα, ποσότητα και σχετικότητα των εισερχόμενων συνδέσμων Link churn Ρυθμός απόκτησης συνδέσμων(link acquisition rate) Αμοιβαίοι σύνδεσμοι 26

Αριθμός συνδέσμων στην σελίδα Σχετικότητα των συνδέσμων στην σελίδα IPδιευθύνσεις των αμφίδρομα συνδεδεμένων ιστοτόπων Το TLD ενός domain name για ένα σύνδεσμο Τοποθεσία συνδέσμου Web standards compliance Ποσότητα εισερχόμενων συνδέσμων Ένας ιστότοπος με πολλούς εισερχόμενους συνδέσμους είναι πιθανόν να είναι κατάλληλος καθώς πολλοί άνθρωποι τον ψηφίζουν μέσω της τοποθέτησης συνδέσμων στους ιστότοπους τους [6]. Εδώ βέβαια υπάρχουν κάποιες αντενδείξεις σχετικά με το γεγονός ότι μερικές φορές αυτοί οι σύνδεσμοι είναι μέρος ενός τεχνητού σχήματος συνδέσμων. Ποιότητα εισερχόμενων συνδέσμων Ένα δημοφιλές site το οποίο συνδέεται με κάποιον ιστότοπο προφανώς διαθέτει αρκετούς εισερχόμενους συνδέσμους, και μια καλή φήμη σημαίνει πολύ περισσότερα σε σχέση με ένα σύνδεσμο από μια τυχαία σελίδα από έναν ασήμαντο ιστότοπο με λίγους συνδέσμους [7]. Δεν υπάρχει ακριβής ορισμός για το τι αποτελεί ποιότητα. Οι μηχανές αναζήτησης χρησιμοποιούν πολύ περίπλοκους αλγορίθμους ώστε να μπορέσουν να υλοποιήσουν μια πιο ανθρώπινη προσέγγιση. Η σχέση των εισερχόμενων συνδέσμων Μια μηχανή αναζήτησης είναι πιθανόν να βλέπει ένα σύνδεσμο από σημαντική σχετική σελίδα ή ένα ιστότοπο πιο αξιόλογο σε σχέση με μια τυχαία και μη σχετική σελίδα. Συνήθως μια σειρά από συνδέσμους με πολύ όμοιο anchor text από άσχετες πηγές είναι μια υπόδειξη ότι πρόκειται για ένα τεχνητό σχήμα συνδέσμων και πλέον αυτοί οι σύνδεσμοι χάνουν την αξία τους. Πολλοί σύνδεσμοι από πηγές οι οποίες δεν είναι κατάλληλες μπορεί να οδηγήσουν σε ποινή. Link churn Σύνδεσμοι οι οποίοι εμφανίζονται και εξαφανίζονται σε σελίδες είναι μέρος ενός σχήματος συνδέσμων. Ο ρυθμός με τον οποίο αυτοί οι σύνδεσμοι εμφανίζονται και εξαφανίζονται ονομάζεται Link churn. Εάν αυτό συμβαίνει συχνά, τότε αξιολογείται ως spam. Αυτοί οι σύνδεσμοι θα χάσουν την αξία τους ή στην χειρότερη περίπτωση ο ιστότοπος θα χαρακτηριστεί ως spam και θα τιμωρηθεί. Ρυθμός απόκτησης συνδέσμων Ένας αλγόριθμος μπορεί να δει την απόκτηση χιλιάδων συνδέσμων από έναν καινούριο ιστότοπο ύποπτη, σε αντίθετη περίπτωση συνοδεύεται από υψηλά βαθμολογημένα site. Συνήθως αυτό είναι μια υπόδειξη για ύπαρξη σχήματος συνδέσμων. Για περισσότερες 27

λεπτομέρειες υπάρχει σχετικός σύνδεσμος στο www.mattcuts.com/blog/more-seoanswers-on-video. Αμοιβαίοι σύνδεσμοι Παλιότερα, οι ειδικοί συνήθιζαν να συνάπτουν εμπορικούς δεσμούς για να επιτύχουν ριζικές βελτιώσεις στις βαθμολογίες. Αυτό δημιούργησε ένα τεχνητό αριθμό από αυτοεξυπηρετούμενες ψήφους. Με την πάροδο του χρόνου οι μηχανές αναζήτησης έγιναν πιο έξυπνες και πλέον υποτιμούν τους αμοιβαίους συνδέσμους. Σε απάντηση, οι υπεύθυνοι SEO δημιούργησαν σχήματα ανταλλαγής συνδέσμων με πολλαπλά μέρη για να αποφεύγουν την ανίχνευση. Οι σύγχρονες μηχανές αναζήτησης μπορούν να ανιχνεύσουν αυτές τις απλές υπεκφυγές αρκετά εύκολα. Αυτό δε σημαίνει ότι οι αμοιβαίοι σύνδεσμοι είναι κακοί, αλλά θα πρέπει να αντισταθμίζονται από αρκετούς συνδέσμους μιας κατεύθυνσης. Ο συνδυασμός και των δύο μεθόδων φαντάζει πιο φυσικός και έχει ως αποτέλεσμα υψηλότερες βαθμολογίες. Αριθμός συνδέσμων σε μια σελίδα Ένας σύνδεσμος σε μια σελίδα με λίγους εξερχόμενους συνδέσμους αξιολογείται περισσότερο από ένα σύνδεσμο με πολλούς εξερχόμενους συνδέσμους. Σημασιολογικές σχέσεις μεταξύ των συνδέσμων σε μια σελίδα Μια μηχανή αναζήτησης μπορεί να θεωρήσει ότι μια σελίδα με πολλούς συνδέσμους σε άλλες σελίδες χωρίς να είναι σημασιολογικά σχετικές μπορεί να είναι μια σελίδα που περιέχει μόνο συνδέσμους ή κάποιο είδος σελίδας που έχει σχεδιαστεί για να χειραγωγήσει βαθμολογίες ή να συνάψει εμπορικούς δεσμούς. Επίσης θεωρείται ακόμα και η ονομασία μιας σελίδας με την λέξη links όπως links.php μπορεί να υποτιμήσει πραγματικά συνδέσμους που περιέχονται συγκεκριμένα σε μια σελίδα. IP διευθύνσεις από αμφισυνδεδεμένους ιστότοπους Οι IP διευθύνσεις οι οποίες βρίσκονται στην ίδια C κλάση (έχουν τις πρώτες τρείς οκτάδες ίδιες) είναι πολύ πιθανό να βρίσκονται κοντά ίσως ακόμη και στον ίδιο Server. Όταν οι ιστότοποι είναι αλληλένδετοι με πολλούς συνδέσμους και έρχονται από παρόμοιες IP διευθύνσεις, θεωρούνται ύποπτες και αυτοί οι σύνδεσμοι υποτιμούνται. Για παράδειγμα, ένας σύνδεσμος από ένα domain Α 100.100.1.1 σε ένα domain B 100.100.1.2 είναι μια σύνδεση από δύο αλληλένδετες διευθύνσεις. Αυτό μπορεί να είναι ένας δείκτης τεχνητών σχημάτων συνδέσμων που έχουν ως στόχο να επηρεάσουν την κατάταξη αυτών των ιστοτόπων. Το TLD ενός domain name για ένα σύνδεσμο Είναι ευρέως γνωστό ότι τα domain.edu και.gov είναι λιγότερο ευάλωτα και έχουν μεγαλύτερη βαρύτητα. Ωστόσο, αυτό αμφισβητείται από κάποιους υπεύθυνους SEO, οι οποίοι θεωρούν ότι το ίδιο αποτέλεσμα πρέπει να επιφέρει και η ηλικία ενός ιστότοπου, αλλά και ο αριθμός των συνδέσμων που έχουν αποκτήσει με την πάροδο του χρόνου. 28

Τοποθεσία συνδέσμου Σύνδεσμοι που εμφανίζονται σε περίοπτη θέση στο περιεχόμενο της σελίδας όπως είναι στο κέντρο της θεωρούνται από τις μηχανές αναζήτησης πιο σημαντικοί. Σύνδεσμοι οι οποίοι είναι ενσωματωμένοι στο περιεχόμενο στο κάτω μέρος της σελίδας είναι συνήθως λιγότερο σημαντικοί. Επίσης, εξωτερικοί σύνδεσμοι στο κάτω μέρος της σελίδας σε σημασιολογικά άσχετους ιστότοπους μπορεί να είναι ένα κριτήριο για ανίχνευση spam. Η φυσική τοποθεσία μέσα σε ένα έγγραφο είναι ιστορικά σημαντική. Ιδανικά, το πρωτεύον περιεχόμενο μιας σελίδας τοποθετείται νωρίς στον html κώδικα της σελίδας, καθώς και σε περίοπτη θέση στο κέντρο της σελίδας. Πρότυπα συμμόρφωσης διαδικτύου Τα πρότυπα συμμόρφωσης και η ευδιάκριτη παρουσίαση του κώδικα είναι ιστορικά ασήμαντα, αλλά η πρόσφατη δουλειά προσβασιμότητας συνέβαλε στο να αποτελέσουν ένα μικρό παράγοντα κατάταξης. 29

3. Η χρησιμότητα του Headless Browsing Ένας Headless browser είναι ένας φυλλομετρητής χωρίς γραφική διεπαφή (GUI). Δηλαδή, είναι ένας browser που αποκτά πρόσβαση σε σελίδες, αλλά δεν τις προβάλλει. Συνήθως χρησιμοποιείται για να ενημερώσει για το περιεχόμενο των ιστοσελίδων σε άλλα προγράμματα [9]. Για παράδειγμα, ένας headless browser μπορεί να χρησιμοποιηθεί από ένα πρόγραμμα για να αποκτήσει πρόσβαση σε μια ιστοσελίδα και να καθορίσει το πλάτος αυτής της σελίδας ή κάποιο άλλο στοιχείo σε αυτήν που φαίνεται είναι προεπιλεγμένο από το χρήστη. επίσης, μπορεί να εξάγει πληροφορίες για το χρώμα του κειμένου ενός στοιχείου, το είδος της γραμματοσειράς που χρησιμοποιείται ή και τις συντεταγμένες ενός αντικειμένου. Αυτά τα δεδομένα συχνά χρησιμοποιούνται για να ελέγξουν μαζικά ιστοσελίδες για τον έλεγχο της ποιότητάς τους ή για την εξαγωγή δεδομένων [8]. Ο headless browser είναι σημαντικός γιατί αντιλαμβάνεται τις ιστοσελίδες όπως ένας browser, με την επιφύλαξη ότι τα προγράμματα περιήγησης συμπεριφέρονται λίγο διαφορετικά. Πρέπει να είναι σε θέση να αναλύουν javascript περιεχόμενο, όπως και να κατεβάσουν περιεχόμενο όταν γίνεται κλικ σε κάποιον σύνδεσμο. Η Google πρότεινε ότι οι Headless Browsers πρέπει να συνεργάζονται και να βοηθούν τις μηχανές αναζήτησης όσον αναφορά σελίδες AJAX. Το σενάριο της Google υποστηρίζει ότι είναι ευθύνη του διαχειριστή της ιστοσελίδας το να εγκαταστήσει τον headless browser στον web server του, ώστε να πάσα στιγμή οι μηχανές αναζήτησης να έχουν πρόσβαση στον AJAX κώδικα της σελίδας [12]. Στην ουσία η Google προτείνει ότι είναι προτιμότερο η Javascript ανάλυση της ιστοσελίδας να γίνεται από τον Headless browser ή από τον webmaster, παρά από την μηχανή αναζήτησης. Η πρόταση της Google είναι ένα σύνολο URL πρωτοκόλλων τα οποία ελέγχουν πότε η μηχανή αναζήτησης γνωρίζει ότι πρέπει να ζητήσει πληροφορίες από τον headless browser και ποιο URL να δείξει στους ανθρώπινους χρήστες. Το κίνητρο στη συγκεκριμένη περίπτωση είναι ότι οι χρήστες μπορούν να ελέγξουν τι ακριβώς δείχνει στην πραγματικότητα ο spider της Google. Στην συνέχεια ακολουθεί μια ανάλυση των πιο γνωστών Headless Browsers που κυκλοφορούν στην αγορά παρουσιάζοντας τα πλεονεκτήματα και τα μειονεκτήματα τους. 3.1 HtmlUnit Ο HtmlUnit είναι ένας headless browser γραμμένος σε Java από τον οποίο απουσιάζει το γραφικό περιεχόμενο. Επιτρέπει υψηλού επιπέδου χειρισμό των δικτυακών τόπων από άλλο κώδικα java περιλαμβάνοντας συμπλήρωση και υποβολής φορμών και κάνοντας κλικ 30

σε υπερσυνδέσμους. Επίσης, παρέχει πρόσβαση στη δομή και στις λεπτομέρειες για το εσωτερικό των λαμβανομένων σελίδων [13]. Ο HtmlUnit εξομοιώνει τμήματα της συμπεριφοράς περιηγητών συμπεριλαμβανομένου και των πτυχών του χαμηλότερου επιπέδου του TCP/IP και HTTP. Μια ακολουθία όπως getpage(url), getlinkwith( click here ), click(), επιτρέπουν ένα χρήστη να πλοηγηθεί μέσα στο υπερκείμενο και να λάβει τις σελίδες που περιέχουν HTML, Javascript, AJAX, Cookies. Ο HtmlUnit περιλαμβάνει επίσης HTTPS security, βασική Http αυθεντικοποίηση, αυτόματη ανακατεύθυνση σελίδων και άλλες Http κεφαλίδες. Επιτρέπει, επίσης, ελέγχους κώδικα Java για να μπορέσει να εξετάσει τις επιστρεφόμενες σελίδες είτε ως κείμενο, είτε ως XML DOM ή σαν μια συλλογή φορμών, πινάκων και συνδέσμων. Η πιο κοινή χρήση του HtmlUnit είναι η αυτοματοποιημένη δοκιμή των ιστοσελίδων, αλλά μερικές φορές μπορεί να χρησιμοποιηθεί για εξαγωγή πληροφοριών από ιστοσελίδες (web scraping), ή για την αποθήκευση του περιεχόμενου της ιστοσελίδας [15]. Γενικά, μπορούμε να πούμε ότι δεν αποτελεί μια γενική πλατφόρμα ελέγχου. Είναι ένας τρόπος να προσομοιώσουμε έναν περιηγητή για σκοπούς ελέγχου και συνήθως χρησιμοποιείται με άλλα frameworks όπως JUnit ή TestNG. Τα βασικά χαρακτηριστικά του HtmlUnit είναι: Υποστήριξη HTTP και HTTPS πρωτοκόλλων Υποστήριξη cookies Ικανότητα να καθορίζει πότε οι λανθασμένες αποκρίσεις από τον Serverβγάζουν εξαίρεση ή επιστρεφόμενες σελίδες κατάλληλου τύπου Χρήση POST και GET Προσαρμογή των κεφαλίδων αιτήσεων που στέλνονται στον περιηγητή Υποστήριξη όλων των HTML responses o εύκολη πρόσβαση σε όλες τις πληροφορίες που περιλαμβάνονται σε μια σελίδα o Υποβολή φορμών o Κλικ συνδέσμων Proxy server NTLM αυθεντικοποίηση Εξαιρετική υποστήριξη Javascript 3.2 JXBroswer Όλοι οι Java προγραμματιστές που έχουν αναπτύξει ένα εργαλείο ελέγχου ιστοσελίδων ή μια desktop εφαρμογή με έναν HTML viewer χρειάστηκαν μια βιβλιοθήκη η οποία θα έπρεπε να φορτώνει, εμφανίζει ένα HTML έγγραφο και να έχει πρόσβαση σε αυτό. Δεν πρέπει να ξεχνάμε ότι η υλοποίηση μιας τέτοιας εφαρμογής απαιτεί μεγάλη προσπάθεια. Έτσι, η προτιμότερη λύση είναι η ενοποίηση με έναν έτοιμο περιηγητή [11]. O JXBroswer είναι ένας περιηγητής ο οποίος προσφέρει τη δυνατότητα ενσωμάτωσης ενός σημαντικού εργαλείου που υποστηρίζει τεχνολογίες διαδικτύου και πρότυπα στις desktop 31

εφαρμογές java που βασίζουν τα γραφικά τους στις βιβλιοθήκες της swing. Έτσι, τα έγγραφα του διαδικτύου μέσα στις εφαρμογές μοιάζουν ακριβώς όπως σε έναν συνηθισμένο περιηγητή για τον οποίο είναι σχεδιασμένα. επίσης, ο JXBrowser εμφανίζει ενοποίηση όσο αφορά κάποιες εφαρμογές και interfaces των Internet Explorer και Mozilla Firefox των windows, του Safari της Apple και του Mozilla Firefox των Linux και Mac Os. Ξεκινώντας από την έκδοση 2.0, η βιβλιοθήκη επιτρέπει την ενοποίηση με τις προαναφερθείσες εφαρμογές με σκοπό να γίνεται rendering των HTML σελίδων εξασφαλίζοντας συμμόρφωση με πολλά πρότυπα του Internet (HTML 4, CSS, XML, JavaScript, Adobe Flash, και άλλα). Μπορούμε να προσθέσουμε ένα component στον JXBroswer βασισμένο στον Mozilla Gecko, ή στον Internet Explorer της ή στο Apple Safari. Κάνοντας χρήση του JXBroswer μπορούμε να καθορίσουμε ποιον περιηγητή θα χρησιμοποιήσει η Java εφαρμογή για κάθε λειτουργικό σύστημα. Παρέχεται η δυνατότητα εναλλαγής μεταξύ των περιηγητών και δουλεύοντας απλά μέσω των ίδιων API. Ο JXBroswer παρέχει ένα ολοκληρωμένο API, επιτρέποντας: Αποθήκευση HTML σελίδων και αρχείων Πλοήγηση εμπρός και πίσω στο ιστορικό των σελίδων Προετοιμασία σελίδας για εκτύπωση και προεπισκόπηση εκτύπωσης στο κατάλληλο πλαίσιο διαλόγου Απόκτηση πρόσβασης στις εξειδικευμένες επιλογές όπως η δυνατότητα εκτέλεσης Javascript Set και get HTML περιεχομένου Εκτέλεση JavaScript κώδικα Προσαρμογή του μενού περιβάλλοντος Πλοήγηση σε URL Πλοήγηση σε URL και POST δεδομένων Χρήση Browser Events Διαχείριση pop-up παραθύρων Χρήση πλαισίων διαλόγου Διαχείριση cookies Παρέχει ένα DOM java API για διαχείριση στοιχείων σε ένα έγγραφο, τροποποίηση ιδιοτήτων στοιχειών, και χειρισμό δεδομένων σε HTMLφόρμες. Είναι δυνατή η εκτέλεση Javascript κώδικα ή Javascript κώδικα που φορτώνεται με την HTML σελίδα και χειρισμός των Javascript λαθών που εμφανίζονται κατά την εκτέλεση του κώδικα. Τα Javascript αποτελέσματα εκτέλεσης επιστρέφοντα πίσω στην Java με την μορφή αλφαριθμητικών αντικειμένων. Χρησιμοποιώντας ακροατές γεγονότων μέσω του JΧBrowser API μπορούμε να χειριστούμε Javascript λάθη και ποικίλες καταστάσεις του browser όπως έναρξη πλοήγησης ή παρακολούθηση της προόδου αποθήκευσης ενός αρχείου. Επίσης, μπορούμε να προσθέσουμε εξαιρέσεις ή να απενεργοποιήσουμε την πλοήγηση των διαδικτυακών πόρων με μη έγκυρα ή αυτοϋπογραφούμενα (self-signed) πιστοποιητικά. Τέλος, μπορούμε να διαμορφώσουμε τις proxy ρυθμίσεις για μια τρέχουσα διαδικασία 32

χωρίς να επηρεάζουμε τις ρυθμίσεις δημόσιας εμβέλειας. Ο JΧBrowser υποστηρίζει τους ακόλουθους τύπους proxy: ftp, http, https, gopher και sock. 3.3 Crowbar Simile Πολλές λύσεις που βασίζονται στο χώρο της σύνταξης ( syntax space ) για scraping εξάγουν την πληροφορία ως μια HTTP απόκριση και για αυτό το λόγο πρέπει να συνεργάζονται με όλες τους διαφορετικούς τρόπους πού κάποια δεδομένα μπορούν να σειριοποιηθούν. Επιπλέον όμως, πρέπει να έχουν ως αποτέλεσμα το ίδιο οπτικό περιεχόμενο σε έναν browser. Όταν αυτές οι λύσεις είναι εύκολο να γραφτούν τείνουν να απαιτούν αρκετή συντήρηση ώστε να παραμένουν συντακτικά όμοιες και να μην έχουν διαφορετικό αποτέλεσμα κατά το renderingτης σελίδας στο χρήστη. To scarping στο χώρο του μοντέλου ( model space ) είναι πιο ενδεδειγμένη λύση επειδή επιτρέπει τον scarper να λειτουργεί απευθείας στο σύνολο των πληροφοριών και αυτό είναι που χρησιμοποιείται από τον browser για να κάνει την σελίδα ανάλυση. Αυτό σημαίνει ότι είναι πολύ πιο εύκολο να δουλεύεις στο μοντέλο των δεδομένων που παράγεται από το HTML parsing και στη συνέχεια να επεμβαίνεις στο DOM που παράγεται μέσω κατάλληλων μηχανισμών όπως Xpath. Επιπλέον είναι πολύ πιο εύκολο να γράφει κανείς έναν scraper που να διενεργεί σε ένα DOM παρά σε έναν πίνακα χαρακτήρων. Δυστυχώς, το να γράψεις έναν HTML αναλυτή και έναν μετατροπέα DOM που να μπορεί να συνεργαστεί με τον πραγματικό κόσμο δεν είναι εύκολη διαδικασία. Για αυτό τον λόγο ο Crowbar βασίζεται στον κώδικα του Firefox για να κάνει parsing το HTML και να δημιουργήσει τo DOM. Αποτελεί ένα περιβάλλον εξαγωγής δεδομένων από το διαδίκτυο βασισμένο στη χρήση ενός headless browser από την πλευρά του εξυπηρετητή (server side). Σκοπός του είναι να επιτρέπει εκτέλεση javascript κώδικα που θα κάνει εξαγωγή περιεχομένου (scrapers) μέσω DOM, ώστε να αυτοματοποιήσει τις διαδικασίες [16]. Γίνεται εισαγωγή του URL της σελίδας και του URL του κώδικα Javascript και επιστρέφεται ένα RDF/XML έγγραφο. Είναι προσαρμοσμένος να εκτελείται σε περιβάλλοντα Windows, Mac OS, Linux. O Crowbar είναι κατασκευασμένος ώστε να λειτουργεί σε ένα περιβάλλον όσο το δυνατόν πιο κοντινό με ένα πρόγραμμα περιήγησης για να μπορούν να αποφεύγονται τα προβλήματα που προκύπτουν κατά το parsing λόγω των διαφορών στην DOM/Xpath υλοποίηση. Απαιτείται η χρήση του XULRunner για την εκτέλεση του Crowbar. 3.4 PhantomJS Είναι ένα headless webkit με javascript API. Έχει γρήγορη υποστήριξη για πολλά πρότυπα όπως χειρισμός DOM, CSS, JSON, Canvas, SVG [16]. Αποτελεί μια βέλτιστη επιλογή για έλεγχο διαδικτυακών εφαρμογών, scraping ιστοτόπων, παρακολούθηση σελίδων, SVG (Scalable Vector Graphics), απεικόνιση ιστοσελίδων, PDF μετατροπή και για πολλές άλλες χρήσεις. Είναι συμβατό με Linux, Windows, MAC OSX και Free BSD. Είναι γραμμένο σε 33

JavaScript ή CoffeeScript. Ο PhantomJS μπορεί να συνεργαστεί με διάφορες υπηρεσίες και API όπως JSONP, YQL, Jasmine Driver, τα οποία συζητούνται παρακάτω: - To Javascript Object Notation είναι ένα ελαφρύ ανοιχτό πρότυπο που βασίζεται στο κείμενο σχεδιασμένο για ανθρώπινη ανταλλαγή δεδομένων. Προέρχεται από την Javascript για αναπαράσταση απλών τύπων δεδομένων και συσχετισμένων πινάκων που ονομάζονται αντικείμενα. Παρόλη την εξάρτηση με την Javascript, έχει parsers για πολλές γλώσσες [21]. - H Yahoo Query Language είναι μια εντυπωσιακή SQL εκδοχή που επιτρέπει την διενέργεια ερωτημάτων, φιλτράρισμα και συνένωση δεδομένων μέσω Web Services. Με την YQL οι εφαρμογές τρέχουν γρηγορότερα και σε λιγότερες γραμμές κώδικα. Η Yahoo και άλλοι ιστότοποι κάνουν τα δομημένα δεδομένα τους διαθέσιμα σε αυτούς που αναπτύσσουν λογισμικό μέσω web services [22]. Για να αποκτήσουν πρόσβαση και να θέσουν ερωτήματα σε αυτές τις υπηρεσίες οι προγραμματιστές υπομένουν τις δυσκολίες ώστε να εντοπίσουν τα κατάλληλα URL και την απαραίτητη τεκμηρίωση αυτών των web services. - Το Jasmine είναι ένα behavior driven development περιβάλλον για έλεγχο JavaScript κώδικα. Δεν εξαρτάται από άλλα περιβάλλοντα Javascript, δεν απαιτεί DOM και έχει ξεκάθαρη σύνταξη για την διενέργεια των ελέγχων. Μπορεί να εκτελεστεί σε όποιο περιβάλλον υποστηρίζει JavaScript: στατική σελίδα, server side περιβάλλοντα όπως το Node.js. 34

3.5 Συγκεντρωτικά χαρακτηριστικά των Headless Browsers Headless Browser Πίνακας 1. Συγκεντρωτικά χαρακτηριστικά των Headless Browser Πλευρά εκτέλεσης Απαιτείται ή Συνεργάζεται με Λειτουργικό Εκτέλεσης Γλώσσα Υλοποίησης Επιστρέφει Crawbar Simile Server side XULRunner Windows, Linux, Mac OS Java RDF/XML HtmlUnit Client side JUnitή TestNG Windows, Linux, Mac OS Java Κείμενο ή XML DOM ή μια συλλογή φορμών, πινάκων και συνδέσμων JXBroswer Client side Internet Explorer, Mozilla Windows, Linux, Mac OS Java Το περιεχόμενο ενός browser με την μορφή XML DOM Phantom JS Client Side WebKit, JSONP, QUnit, Jasmine Driver Linux, Windows, MAC OS X και FreeBSD JavaScript, CoffeeScript XML DOM 3.6 Επιλογή μηχανής για φόρτωση(rendering) ιστοσελίδων 3.6.1 Δημιουργία περιπτώσεων ελέγχου Για την επιλογή της κατάλληλης μηχανής Headless Browsing έγιναν μια σειρά από ελέγχους και ελέγχθηκαν οι 3 πιο δημοφιλείς μηχανές (JXBroswer, Crowbar, PhantomJS). Δημιουργήθηκαν 3 ιστοσελίδες ελέγχου, ώστε να μπορέσουν να αναδυθούν κάποια πλεονεκτήματα όπως και τα μειονεκτήματα της χρήσης αυτών των μηχανών. Οι ιστοσελίδες θα έπρεπε να γίνουν render και από τις τρεις μηχανές. Οι 3 αυτές ιστοσελίδες είχαν η καθεμία από μία ιδιαιτερότητα. Η πρώτη περιείχε μια ανακατεύθυνση σε έναν άλλο ιστόχωρο, η δεύτερη περιείχε ένα iframe στο οποίο υπήρχε ένα nested iframe το οποίο με την σειρά του μπορεί να δείχνει σε έναν άλλο ιστότοπο ή σε κάποια διαφήμιση. Τέλος, η τρίτη ιστοσελίδα που χρησιμοποιήθηκε για τον έλεγχο των μηχανών ήταν μια AJAX ιστοσελίδα. 35

3.6.1.1 Περίπτωση 1 simpleredirection.html Εικόνα 7. Παράδειγμα ανακατεύθυνσης συνδέσμου 36

3.6.1.2 Περίπτωση 2 ifrm.html Περιλαμβάνει τρία html αρχεία με όνομα ifrm.html, basics_demo.html, basics_demo2.html. To ifrm.html περιέχει ένα iframe το οποίο καλεί το basics_demo.html το οποίο περιέχει ένα iframe το οποίο καλεί το simpleredirection.html που μπορεί να περιέχει ανακατεύθυνση σε άλλο ιστότοπο ή σε κάποια διαφήμιση. Με τη σειρά που αναφέρθηκαν ο html κώδικας ακολουθεί στη συνέχεια. Εικόνα 8. Παράδειγμα προβολής περιεχομένου ιστοσελίδας από iframe Εικόνα 9. Παράδειγμα εμφωλευμένων iframes 37

Εικόνα 10. Παράδειγμα εμφωλευμένων iframes 3.6.1.3 Περίπτωση 3 testpage3 Είναι μια AJAX ιστοσελίδα που βρίσκεται στη διεύθυνση http://www.ajaxrain.com 3.6.2 Συμπεριφορά JXBroswer JXBroswer Για την εκτέλεση των πειραμάτων απαιτούνται IDE, Java, Wamp server, xamp server ή οποιοσδήποτε άλλος και οι βιβλιοθήκες που δίνει η ομάδα ανάπτυξης του JXBroswer μαζί με την άδεια εκτέλεσης του κώδικα. Για να απεικονιστούν οι σελίδες μέσω του JXBroswer σε localhost απαιτείται αρχικά η τοποθέτηση των σελίδων στο www και η εκκίνηση του wamp. Για τις απαιτήσεις των δοκιμασιών δημιουργήθηκε μια εφαρμογή στην οποία εισάγεται από τη χρήστη το url που πρέπει να γίνει render στο κατάλληλο πλαίσιο κειμένου κάτω δεξιά όπως φαίνεται στην εικόνα και πατώντας το κουμπί η σελίδα γίνεται render και εμφανίζεται όπως σε έναν κανονικό περιηγητή. Όταν θέλουμε να εισαχθεί σελίδα από το localhost η διεύθυνση εισάγεται ως εξής: localhost/pagename.html. 38

Click for rendering Πλαίσιο κειμένου Εικόνα 11. ScreenShot από την εκτέλεση του JXBroswer Κάνοντας χρήση του JXBroswer η σελίδα που είχε ένα απλό Link για ανακατεύθυνση έγινε κανονικά render. Αντίθετα, η σελίδα με τα nested iframes παρουσίασε κάποιο σφάλμα στο δεύτερο iframe. Τέλος, η AJAX ιστοσελίδα έγινε render με κάποια μικρή καθυστέρηση. 3.6.3 Συμπεριφορά PhantomJS Για την εκτέλεση πειραμάτων στον PhantomJS απαιτείται η λήψη των DLL αρχείων που είναι διαθέσιμα μαζί με το εκτελέσιμο αρχείο PhantomJS.exe. Η εκτέλεση γίνεται μέσω κονσόλας κάνοντας κλήση javascript αρχεία τα οποία εκτελούν κάποια λειτουργία στις σελίδες που του δίνουμε ως όρισμα. Όσο αναφορά το test set που χτίσαμε την simpleredirection την κάνει κανονικά render, ενώ εμφανίζει πρόβλημα στην ifrm και δεν μπορεί να κάνει parse το δεύτερο iframe που είναι εμφωλευμένο. Τέλος, μπορεί να κάνει render την AJAX σελίδα με καθυστέρηση μεγαλύτερη από αυτή του JXBroswer. Φαίνεται πολύ υποσχόμενος αν αναλογιστούμε ότι σε συνδυασμό με την JSON παρέχεται ένας μεγάλος αριθμός εργαλείων ώστε να μπορέσουμε να χειριστούμε με διάφορους τρόπους το υλικό των σελίδων. 39

3.6.4 Συμπεριφορά Crowbar O crowbar τρέχει με την παρουσία του XULRunner και για να γίνει η εκτέλεση του πρέπει να εγκατασταθεί το ακόλουθο project από την http://simile.mit.edu/repository/crowbar/trunk/. Όσο αναφορά το testset που κατασκευάσαμε, η simpleredirection γίνεται κανονικά render ενώ εμφανίζει πρόβλημα στην ifrm και δεν μπορεί να κάνει parse το δεύτερο iframe που είναι εμφωλευμένο. Τέλος, μπορεί να κάνει render την ajax σελίδα με καθυστέρηση μεγαλύτερη από αυτή των JXBroswer και PhantomJS. Μπορούμε να πούμε ότι είναι λίγο δυσκίνητος ώστε να μπορέσουμε να παρέμβουμε κάνοντας κάτι δικό μας ή βελτιώνοντας κάποιο πρόβλημα. Τέλος, δεν πρέπει να ξεχάσουμε ότι είναι πάρα πολύ αργός ακόμα και για μικρές σελίδες με ελάχιστο κώδικα. 3.6.5 Επιλογή Τεχνολογίας Για να μπορέσει να γίνει η επιλογή της τεχνολογίας που θα χρησιμοποιηθεί για τον σκοπό αυτής της διπλωματικής πρέπει να κάνουμε αναφορά σε 3 τεχνικούς άξονες που διαφοροποιούν ο καθένας για δικό του λόγο την μια μηχανή από τις υπόλοιπες. Χειρισμός nested inline frames(κάποιες μηχανές που κάνουν headless browsing) παρουσιάζουν σφάλμα στο rendering όταν υπάρχουν εμφωλευμένα nested iframes. Απόδοση της κάθε μηχανής. Για τις απαιτήσεις του προβλήματος αναζητούμε μια μηχανή η οποία μπορεί να κάνει renderένα τεράστιο αριθμό σελίδων που θα προέρχονται από crawling σε ένα εύλογο χρονικό διάστημα. Αποθήκευση του DOM περιεχομένου που προέρχεται από το render της html σελίδας. Στην προκειμένη περίπτωση χρειάζεται να μπορούμε να αποθηκεύουμε σε μια βάση το xml περιεχόμενο της κάθε σελίδας ώστε να μπορούμε να το αξιολογήσουμε στην συνέχεια. 3.6.6 Αποτελέσματα πειραμάτων αξιολόγησης Headless Browsers Χειρισμός nested inline frames: Έχοντας έλθει σε επικοινωνία με την ομάδα teamdev που ηγείται του project JXBroswer μας διαβεβαίωσε ότι υποστηρίζει nested iframes ο JXBroswer. Απόδοση της κάθε μηχανής: Αξιολογήσαμε τον χρόνο που κάνει η κάθε μηχανή για να κάνει render έναν αριθμό ιστοσελίδων αυξάνοντας τον αριθμό των επαναλήψεων εκτέλεσης του αλγορίθμου. Αυτό εξυπηρετεί ώστε να μπορέσουμε να βρούμε την καθυστέρηση που συσσωρεύεται από τις πολλές επαναλήψεις και να αναγνωρίσουμε ποια μηχανή υστερεί σε ταχύτητα. Τα αποτελέσματα είναι εμφανή στην συνέχεια. 40

Πίνακας 2 Χρόνοι εκτέλεσης των JXBroswer και PhantomJS Χρόνοι Εκτέλεσης (secs) Αριθμός Επαναλήψεων JXBroswer PhantomJS 5000 10000 15000 20000 25000 30000 35000 40000 45000 50000 55000 60000 65000 70000 75000 30 41 72 83 92 101 111 121 130 138 148 161 169 176 186 38 104 226 397 600 824 1084 1377 1703 2038 2371 2733 3115 3527 3952 Διάγραμμα 1 Χρόνοι Εκτέλεσης Rendering ιστοσελίδων για τον JXBroswer και PhantomJS Αποθήκευση του DOM περιεχομένου: Μέσω του JXBroswer μπορούμε να χειριστούμε το XML Dom μέσω του JDOM API και να αποκτήσουμε μέσω JDBC ικανότητα πρόσβασης σε μια βάση δεδομένων. Σε αντίθεση με το παραπάνω ο PhantomJS δεν δίνει τη δυνατότητα να αποθηκεύσουμε το DOM περιεχόμενο απευθείας σε μια βάση δεδομένων παρά μόνο κάνοντας το αποθήκευση σε μια άλλη ιστοσελίδα και από εκεί μετά να το εισάγουμε στη βάση. Στον παρακάτω πίνακα υπάρχει μια συνοπτική περιγραφή των όσο αναφέραμε παραπάνω. 41

Πίνακας 3 Σύγκριση JXBroswer και PhantomJS JXBroswer PhantomJS Nested iframes Ναι Όχι Performance Γραμμική αύξηση του χρόνου εκτέλεσης Εκθετική αύξηση του χρόνου εκτέλεσης DOM handling JDOM Αδύνατο κάνοντας χρήση μόνο JavaScript Πίνακας 4 Σύγκριση JXBroswer και PhantomJS 42

4. Διάσχιση διαδικτύου (Web Crawling) 4.1 Εισαγωγή στο Web Crawling Οι Web crawlers είναι προγράμματα που εκμεταλλεύονται τη δομή γράφου του διαδικτύου για να μετακινούνται από σελίδα σε σελίδα. Όταν πρωτοεμφανίστηκαν αυτού του είδους τα προγράμματα ονομάζονταν επίσης wanderers, robots, spiders, fishes και worms. Μπορεί να παρατηρηθεί πως η λέξη crawler (ερπετό) δεν είναι ενδεικτική της ταχύτητας αυτών των προγραμμάτων, αφού μπορούν να είναι αρκετά γρήγορα [25]. Από τη δική μας εμπειρία, μπορέσαμε να κάνουμε crawl σε δεκάδες χιλιάδες σελίδες μέσα σε λίγα λεπτά. Εξ αρχής, ένα βασικό κίνητρο στη σχεδίαση web crawlers ήταν η ανάκτηση ιστοσελίδων και η προσθήκη αυτών ή των απεικονίσεών τους σε ένα τοπικό repository. Ένα τέτοιο repository μπορεί στη συνέχεια να εξυπηρετήσει συγκεκριμένες ανάγκες εφαρμογών όπως αυτών των διαδικτυακών μηχανών αναζήτησης. Στην απλούστερή του μορφή ένας crawler αρχίζει από μία γονική σελίδα και έπειτα χρησιμοποιεί τις εξωτερικές συνδέσεις (links) που αυτή περιέχει για να μεταβεί σε άλλες σελίδες [26]. Η διαδικασία επαναλαμβάνεται με τις νέες σελίδες να προσφέρουν περισσότερες εξωτερικές συνδέσεις για μετάβαση, μέχρι ένας ικανοποιητικός αριθμός σελίδων να αναγνωριστεί ή ένας στόχος υψηλότερου επιπέδου να επιτευχθεί. Πίσω από αυτή την απλή περιγραφή κρύβεται μια σειρά από ζητήματα που σχετίζονται με τις συνδέσεις δικτύου, spider traps, κανονικοποίηση URLs, parsing σελίδων HTML και η ηθική της ενασχόλησης με απομακρυσμένους web servers. Για την ακρίβεια, ένας σύγχρονος crawler μπορεί να αποτελεί ένα από τα πιο σύνθετα μεν, ευαίσθητα δε, τμήματα της εφαρμογής στην οποία ενσωματώνεται. Αν το διαδίκτυο ήταν μια στατική συλλογή σελίδων, θα είχε μικρή μακροχρόνια χρήση του crawling. Από τη στιγμή που όλες οι σελίδες θα είχαν φορτωθεί σε ένα repository (όπως η βάση δεδομένων μιας μηχανής αναζήτησης), δε θα υπήρχε πλέον ανάγκη για crawling. Ωστόσο, το διαδίκτυο είναι μια δυναμική οντότητα με υποχώρους που εξελίσσονται σε διαφορετικούς και συχνά ραγδαίους ρυθμούς. Επομένως, υπάρχει μια συνεχής ανάγκη για crawlers προκειμένου να βοηθούν τις εφαρμογές να παραμένουν ενημερωμένες όσο νέες σελίδες προστίθενται και παλιές διαγράφονται, μετακινούνται ή τροποποιούνται. Μηχανές αναζήτησης γενικού σκοπού που εξυπηρετούν σημεία εισόδου σε ιστοσελίδες παλεύουν να επιτύχουν όσο το δυνατό ευρύτερη κάλυψη. Χρησιμοποιούνται web crawlers για τη συντήρηση των ευρετηρίων των βάσεων δεδομένων τους μειώνοντας το κόστος του crawling και της ευρετηρίασης από τα εκατομμύρια των ερωτημάτων που λαμβάνουν. Αυτοί οι crawlers είναι τυφλοί και εξαντλητικοί στην προσέγγισή τους, με βασικό τους στόχο την πλήρη κάλυψη [26]. Σε αντίθεση, οι crawlers μπορεί να είναι επιλεκτικοί όσον αφορά τις σελίδες που φορτώνουν και γι αυτό είναι γνωστοί ως preferential ή heuristicbased crawlers. Αυτοί μπορούν να χρησιμοποιηθούν για την κατασκευή στοχευόμενων 43

repositories, την αυτοματοποίηση ανακάλυψης πηγών και τη διευκόλυνση πρακτόρων λογισμικού. Οι επιλεκτικοί crawlers οι οποίοι έχουν φτιαχτεί για την ανάκτηση σελίδων που αφορούν ένα συγκεκριμένο θέμα ονομάζονται τοπικοί ή στοχευόμενοι crawlers. Η συνέργεια μεταξύ μηχανών αναζήτησης και τοπικών crawlers είναι φυσικά πιθανή με τους δεύτερους να αναλαμβάνουν την ειδική ευθύνη της αναγνώρισης περιοχών σχετικών με συγκεκριμένες κοινότητες χρηστών. Τεχνικές για preferential crawling που επικεντρώνονται στη βελτίωση της ανανέωσης ( φρεσκάδας ) μιας μηχανής αναζήτησης έχουν επίσης προταθεί [3]. Παρόλο που ένα σημαντικό μέρος αυτού του κεφαλαίου έχει αφιερωθεί στην περιγραφή των crawlers σε γενικό επίπεδο, περισσότερη βαρύτητα, ειδικά στα τελευταία μέρη, δίνεται κυρίως στους τοπικούς crawlers. Υπάρχουν διάφοροι παράγοντες που καθιστούν τους τοπικούς crawlers ένα ενδιαφέρον αντικείμενο μελέτης. Μία βασική ερώτηση που υποκίνησε πολλή έρευνα είναι «πώς επιτυγχάνεται η επιλεκτικότητα ενός crawler;» Συμφραζόμενα, όπως οι στόχοι της γονικής εφαρμογής, λεξιλογικά σήματα μέσα στις ιστοσελίδες και επίσης, χαρακτηριστικά του γράφου που κατασκευάστηκε από τις σελίδες που είναι ήδη γνωστές, όλα αυτά είναι λογικά στοιχεία για εκμετάλλευση. Επιπλέον, οι crawlers μπορούν, και συχνά το κάνουν, να διαφέρουν όσον αφορά τους μηχανισμούς με τους οποίους χρησιμοποιούν τα στοιχεία που έχουν στη διάθεσή τους. Μία δεύτερη σημαντική παράμετρος που είναι σημαντικό να ληφθεί υπόψη όταν μελετάμε τους crawlers, και ειδικά τους τοπικούς crawlers, είναι η φύση της εργασίας του crawling. Χαρακτηριστικά του crawl όπως ερωτήματα και/ή λέξεις-κλειδιά που παρέχονται σαν κριτήρια εισόδου στον crawler, προφίλ χρηστών και επιθυμητές ιδιότητες των σελίδων που θα φορτωθούν (παρόμοιες σελίδες, δημοφιλείς σελίδες, επίσημες σελίδες κ.τ.λ.) μπορούν να οδηγήσουν σε σημαντικές διαφορές στη σχεδίαση και την υλοποίηση των crawlers. Η διαδικασία μπορεί να περιορίζεται από παραμέτρους όπως ο μέγιστος αριθμός σελίδων που θα φορτωθούν ή η διαθέσιμη μνήμη. Επομένως, μια εργασία διάσχυσης μπορεί να θεωρηθεί σαν ένα πρόβλημα αναζήτησης με περιορισμούς και πολλούς σκοπούς. Ωστόσο, η μεγάλη ποικιλία των αντικειμενικών συναρτήσεων, σε συνδυασμό με την έλλειψη των κατάλληλων γνώσεων που αφορούν το χώρο αναζήτησης, καθιστούν το πρόβλημα δύσκολο. Επιπλέον, ένας crawler μπορεί να έχει να αντιμετωπίσει θέματα βελτιστοποίησης όπως τα τοπικά και τα ολικά βέλτιστα. Η τελευταία βασική παράμετρος αφορά τις στρατηγικές αξιολόγησης των crawlers που είναι απαραίτητες για να γίνουν συγκρίσεις και να καθοριστούν οι συνθήκες κάτω από τις οποίες ο ένας ή ο άλλος crawler θα δουλέψει καλύτερα. Οι συγκρίσεις πρέπει να είναι δίκαιες και να γίνονται αντλώντας στατιστικά σημαντικές διαφορές. Αυτό απαιτεί όχι μόνο έναν επαρκή αριθμό από crawl runs, αλλά επίσης μεθοδολογίες που λαμβάνουν υπόψη τη χρονική φύση των αποτελεσμάτων των crawlers. Σημαντικές προκλήσεις στην αξιολόγηση περιλαμβάνουν τη γενική μη-διαθεσιμότητα σχετικών σετ για συγκεκριμένα θέματα ή ερωτήματα. Επομένως, η αξιολόγηση τυπικά βασίζεται στον ορισμό κριτηρίων για την εκτίμηση της σημαντικότητας των σελίδων. 44

4.1.1 Κατασκευάζοντας μία crawling υποδομή Ο crawler διατηρεί μια λίστα από URLs που δεν έχει επισκεφτεί η οποία ονομάζεται σύνορο (frontier). Η λίστα αρχικοποιείται με γονικά URLs τα οποία μπορεί να παρέχονται από ένα χρήστη ή από ένα άλλο πρόγραμμα. Κάθε επανάληψη διάσχισης περιλαμβάνει την επιλογή του επόμενου URL για διάσχιση από τη λίστα (frontier), τη φόρτωση της σελίδας που αντιστοιχεί στο URL μέσω HTTP, το parsing της ανακτημένης σελίδας για να εξαχθούν τα URLs και οι ειδικές πληροφορίες της εφαρμογής και τέλος, η προσθήκη των μηεπισκεπτόμενων URLs στη λίστα. Πριν μπουν τα URLs στη λίστα ενδεχομένως να τους ανατεθεί ένα σκορ (μια τιμή) που αντιπροσωπεύει το εκτιμώμενο όφελος από την επίσκεψη της σελίδας στην οποία αντιστοιχεί το URL. Η διαδικασία του crawling μπορεί να τερματιστεί όταν έχει γίνει crawl σε ένα συγκεκριμένο αριθμό σελίδων. Αν ο crawler είναι έτοιμος να κάνει crawl μια άλλη σελίδα και η λίστα είναι άδεια, η κατάσταση σηματοδοτεί ένα αδιέξοδο για τον crawler. Ο crawler δεν έχει άλλη σελίδα να φορτώσει και επομένως σταματά. Το crawling μπορεί να θεωρηθεί ως ένα πρόβλημα αναζήτησης σε γράφο. Το διαδίκτυο θεωρείται ένας μεγάλος γράφος με σελίδες για κόμβους και υπερσυνδέσμους για ακμές. Ένας crawler ξεκινά από μερικούς από τους κόμβους και έπειτα ακολουθεί τις ακμές για να φτάσει σε άλλους κόμβους. Η διαδικασία φόρτωσης μιας σελίδας και η εξαγωγή των συνδέσμων που περιέχει είναι ανάλογη της εξάπλωσης ενός κόμβου στην αναζήτηση γράφου. Ένας τοπικός crawler προσπαθεί να ακολουθεί ακμές που αναμένεται να οδηγήσουν σε τμήματα του γράφου που είναι σχετικά με το θέμα. 4.1.2 Frontier (λίστα μη-επισκεπτόμενων URLs) Frontier είναι η λίστα ενός crawler που περιέχει τα URLs με τις μη-επισκεπτόμενες σελίδες. Στην ορολογία της αναζήτησης γράφου frontier είναι η ανοιχτή λίστα (open list) των κόμβων που δεν έχουν επεκταθεί (επισκεφτεί). Παρόλο που μπορεί να είναι απαραίτητο η λίστα αυτή να αποθηκευτεί στο δίσκο για crawlers μεγάλης κλίμακας, μπορεί να αναπαρασταθεί η λίστα αυτή σαν μία δομή δεδομένων που υπάρχει στη μνήμη για απλότητα. Βασισμένος στη διαθέσιμη μνήμη, μπορεί κάποιος να καθορίσει το μέγιστο μέγεθος της λίστας [27]. Λόγω του μεγάλου μεγέθους μνήμης που είναι διαθέσιμο στους σημερινούς υπολογιστές, ένα μέγεθος λίστας (frontier) της τάξης των 100000 URLs ή και μεγαλύτερο δεν είναι εξαιρετικό. Δοσμένου ενός μέγιστου μεγέθους της λίστας frontier είναι χρήσιμος ένας μηχανισμός ώστε να αποφασιστούν ποια URLs πρέπει να αγνοηθούν όταν φτάσει η λίστα κάποιο όριο. Ας σημειωθεί πως η λίστα μπορεί να συμπληρωθεί γρήγορα καθώς γίνεται crawl στις σελίδες. Κάποιος μπορεί να περιμένει περίπου 60000 URLs στη λίστα με ένα crawl των 10000 σελίδων, υποθέτοντας κατά μέσο όρο 7 συνδέσμους ανά σελίδα. 45

Εικόνα 12. Σχηματική αναπαράσταση βρόγχου εκτέλεσης Crawler Η λίστα μπορεί να υλοποιηθεί σαν FIFO ουρά οπότε έχουμε έναν crawler πρώτα κατά πλάτος ο οποίος μπορεί να χρησιμοποιηθεί για να κάνει τυφλό crawl στο διαδίκτυο. Το επόμενο URL στο οποίο θα γίνει crawl προέρχεται από την κορυφή της ουράς και τα καινούρια URLs προστίθενται στο τέλος της ουράς. Εξαιτίας του περιορισμένου μεγέθους της λίστας με τις μη-επισκεπτόμενες σελίδες, χρειάζεται να επιβεβαιωθεί το γεγονός πως δεν προστίθενται διπλότυπα URLs στη λίστα. Μία γραμμική αναζήτηση για να διαπιστώσουμε αν ένα νέο URL που έχει εξαχθεί υπάρχει ήδη στη λίστα κοστίζει υπολογιστικά. Μία λύση είναι η δέσμευση μερικής διαθέσιμης μνήμης για τη διατήρηση ενός ξεχωριστού πίνακα κατακερματισμού (με το URLσαν κλειδί) για να αποθηκεύουμε κάθε URL της λίστας για γρήγορο ψάξιμο. Ο πίνακας κατακερματισμού πρέπει να διατηρείται συγχρονισμένος με την πραγματική λίστα. Μία πιο χρονοβόρα εναλλακτική είναι η διατήρηση της ίδιας της λίστας σαν πίνακα κατακερματισμού (πάλι με το URLσαν κλειδί). Αυτό θα μας παρείχε γρήγορο ψάξιμο για την αποφυγή διπλότυπων URLs. Ωστόσο, κάθε φορά που ο crawler χρειάζεται ένα URLγια να κάνει crawl, θα έπρεπε να ψάξει και να επιλέξει το URL με το νωρίτερο time-stamp (ο χρόνος στον οποίο ένα URL προστέθηκε στη λίστα). Αν η μνήμη δεν παίζει σημαντικό ρόλο όσο η ταχύτητα, η πρώτη λύση είναι προτιμώμενη. Όταν η λίστα φτάσει στο μέγιστο μέγεθος, ο πρώτα κατά πλάτος crawler 46

μπορεί να προσθέσει ένα μόνο μη-επισκεπτόμενο URL από τη νέα σελίδα στην οποία έχει γίνει crawl. Αν η λίστα υλοποιηθεί σαν μία ουρά προτεραιότητας δημιουργείται ένας preferential crawler ο οποίος είναι επίσης γνωστός σαν best-first crawler. Η ουρά προτεραιότητας μπορεί να είναι ένας δυναμικός πίνακας ο οποίος κρατείται συνέχεια ταξινομημένος σύμφωνα με το εκτιμώμενο σκορ των μη-επισκεπτόμενων URLs. Σε κάθε βήμα, το καλύτερο URL επιλέγεται από την κορυφή της ουράς. Όταν η αντίστοιχη σελίδα φορτωθεί, τα URLs εξάγονται από αυτήν και μαρκάρονται με ένα σκορ βάσει κάποιας ευρετικής μεθόδου. Έπειτα προστίθενται στη λίστα με τέτοιο τρόπο ώστε η σειρά προτεραιότητας στην ουρά να διατηρείται. Μπορεί να αποφευχθεί η διπλοτυπία URLs στη λίστα κρατώντας ξεχωριστό πίνακα κατακερματισμού για ψάξιμο. Μόλις το μέγιστο μέγεθος της λίστας (ΜΑΧ) ξεπεραστεί, μόνο τα καλύτερα ΜΑΧ URLsκρατιούνται στη λίστα. Αν ο crawler βρει τη λίστα άδεια όταν χρειαστεί το επόμενο URL για να κάνει crawl, η διαδικασία του crawling σταματά. Με μία μεγάλη τιμή του ΜΑΧ και διάφορα γονικά URLs η λίστα σπάνια θα βρεθεί σε κενή κατάσταση. Μερικές φορές, ένας crawler μπορεί να αντιμετωπίσει μια spider trap που τον οδηγεί σε έναν μεγάλο αριθμό διαφορετικών URLs που παραπέμπουν στην ίδια σελίδα. Ένας τρόπος να αντιμετωπιστεί αυτό το πρόβλημα είναι ο περιορισμός του αριθμού των σελίδων από ένα δοσμένο domainστις οποίες μπορεί ο crawler να έχει πρόσβαση. Ο κώδικας που σχετίζεται με τη λίστα μη-επισκεπτόμενων URLs μπορεί να επιβεβαιώνει πως κάθε συνεχόμενη αλληλουχία από k (π.χ. 100) URLs που επιλέγονται από τον crawler περιέχει μόνο ένα URL από ένα πλήρως κατάλληλο hostname (π.χ. www.cnn.com). Σαν παρενέργεια, ο crawler είναι ευγενικός (polite) αφού δεν επισκέπτεται την ίδια ιστοσελίδα συχνά και οι σελίδες στις οποίες γίνεται crawlτείνουν να είναι διαφορετικού είδους. 4.1.3 Ιστορικό και η αποθήκη σελίδων Το ιστορικό του crawl είναι μία time-stamped λίστα από URLs που φορτώθηκαν από τον crawler. Ουσιαστικά, δείχνει το μονοπάτι του crawler μέσα στο διαδίκτυο ξεκινώντας από τις γονικές σελίδες. Καταχώρηση URL γίνεται μέσα στο ιστορικό μόνο αφού φορτωθεί η αντίστοιχη σελίδα. Αυτό το ιστορικό μπορεί να χρησιμοποιηθεί για μετά το crawl ανάλυση και αξιολόγηση. Για παράδειγμα, μπορούμε να συσχετίσουμε μία τιμή με κάθε σελίδα στο crawlμονοπάτι και να αναγνωρίσουμε σημαντικά γεγονότα (όπως την ανακάλυψη μιας εξαιρετικής πηγής). Ενώ το ιστορικό μπορεί να αποθηκεύεται περιστασιακά στο δίσκο, διατηρείται επίσης σαν δομή δεδομένων στη μνήμη. Αυτό καθιστά δυνατό ένα γρήγορο ψάξιμο για να ελέγξουμε αν σε μία σελίδα έχει γίνει crawlή όχι. Αυτός ο έλεγχος είναι σημαντικός προκειμένου να αποφευχθεί η επαναλαμβανόμενη επίσκεψη σελίδων και επίσης για να αποφύγουμε την προσθήκη των URLs των σελίδων στις οποίες έχει γίνει crawl στη λίστα περιορισμένου μεγέθους των μη-επισκεπτόμενων URLs. Για τους ίδιους λόγους είναι σημαντικό να κανονικοποιούμε τα URLsπριν τα προσθέσουμε στο ιστορικό. Μόλις μια σελίδα φορτωθεί, μπορεί να αποθηκευτεί/δεικτοδοτηθεί για την κύρια εφαρμογή (όπως μία μηχανή αναζήτησης). Στην απλούστερή της μορφή, μία αποθήκη 47

σελίδων (page repository) μπορεί να αποθηκεύσει τις σελίδες στις οποίες έχει γίνει crawlσαν ξεχωριστά αρχεία. Σε αυτή την περίπτωση, κάθε σελίδα πρέπει να αντιστοιχίζεται με ένα ξεχωριστό όνομα αρχείου. Ένας τρόπος να γίνει αυτό είναι να απεικονίσουμε το URL κάθε σελίδας με ένα συμπαγές αλφαριθμητικό χρησιμοποιώντας κάποιας μορφής συνάρτηση κατακερματισμού με χαμηλή πιθανότητα συγκρούσεων (για τη μοναδικότητα των ονομάτων των αρχείων). Η προκύπτουσα τιμή κατακερματισμού χρησιμοποιείται σαν όνομα του αρχείου. Χρησιμοποιώντας την MD5 one-way συνάρτηση κατακερματισμού που παρέχει έναν 128-bit κώδικα κατακερματισμού για κάθε URL. Υλοποιήσεις του MD5 και άλλων αλγόριθμων κατακερματισμού υπάρχουν διαθέσιμες σε διάφορες γλώσσες προγραμματισμού. Η 128-bit τιμή κατακερματισμού έπειτα μετατρέπεται σε ένα δεκαεξαδικό ισοδύναμο 32 χαρακτήρων για να πάρουμε το όνομα του αρχείου. Για παράδειγμα, το περιεχόμενο του http://www.uiowa.edu/ αποθηκεύεται σε ένα αρχείο με το όνομα 160766577426e1d01fcb7735091ec584. Με αυτό τον τρόπο έχουμε ονόματα αρχείων σταθερού μεγέθους για URLs αυθαίρετου μεγέθους. (Φυσικά, αν η εφαρμογή χρειάζεται να κάνει cacheμόνο μερικές χιλιάδες σελίδες, τότε κάποιος θα μπορούσε να χρησιμοποιήσει έναν απλούστερο μηχανισμό κατακερματισμού.) Η αποθήκη σελίδων (page repository) μπορεί επίσης να χρησιμοποιηθεί για να ελέγξουμε αν έχει ήδη γίνει crawlσε ένα URL μετατρέποντας το στο 32 χαρακτήρων όνομα του αρχείου του και ελέγχοντας για την ύπαρξη αυτού του αρχείου στην αποθήκη. Σε μερικές περιπτώσεις αυτό μπορεί να καταστήσει μη-απαραίτητη τη χρήση μιας δομής δεδομένων του ιστορικού στη μνήμη. 4.1.4 Φόρτωση σελίδων Προκειμένου να φορτώθει μία ιστοσελίδα, χρειαζόμαστε έναν HTTP client ο οποίος στέλνει ένα HTTP αίτημα για μία σελίδα και διαβάζει την απόκριση. Ο client πρέπει να κάνει διαλείμματα για να διασφαλίσει το γεγονός πως δεν σπαταλιέται χρόνος σε αργούς servers ή στο διάβασμα μεγάλων σελίδων. Στην πραγματικότητα, μπορούμε να περιορίσουμε τον client ώστε να κατεβάζει μόνο τα πρώτα 10-20 ΚΒ κάθε σελίδας. Ο client πρέπει να αναλύσει τις επικεφαλίδες (headers) της απόκρισης για κώδικες κατάστασης και ανακατευθύνσεις. Επίσης, μπορεί να χρειάζεται ανάλυση και αποθήκευση της επικεφαλίδας που τροποποιήθηκε τελευταία προκειμένου να καθορίσουμε την ηλικία του εγγράφου [26]. Ο έλεγχος λαθών και η αντιμετώπιση εξαιρέσεων είναι σημαντικά κατά τη διάρκεια της διαδικασίας φόρτωσης σελίδων καθώς πρέπει να αντιμετωπιστούν εκατομμύρια απομακρυσμένων servers χρησιμοποιώντας τον ίδιο κώδικα. Επιπροσθέτως, θα ήταν καλό να γίνει συλλογή στατιστικών στα διαλείμματα και τους κώδικες καταστάσεις για την αναγνώριση προβλημάτων ή την αυτόματη αλλαγή των τιμών στα διαλείμματα. Σύγχρονες γλώσσες προγραμματισμού όπως η Java και η Perl παρέχουν πολύ απλές και συχνά πολλαπλές προγραμματιστικές διεπαφές για την φόρτωση ιστοσελίδων. Ωστόσο, πρέπει να είμαστε προσεκτικοί στη χρησιμοποίηση διεπαφών υψηλού επιπέδου καθώς μπορεί να είναι δυσκολότερη η εύρεση προβλημάτων χαμηλότερου επιπέδου. Για παράδειγμα, στη Java κάποιος μπορεί να θέλει να χρησιμοποιήσει την κλάση java.net.socket για να στείλει HTTP αιτήματα αντί για την πιο αυτοματοποιημένη java.net.httpurlconnection κλάση. 48

Καμία συζήτηση για το crawling σελίδων από το διαδίκτυο δεν μπορεί να είναι πλήρης χωρίς να γίνει αναφορά στο πρωτόκολλο Robot Exclusion. Το πρωτόκολλο αυτό παρέχει ένα μηχανισμό για τους διαχειριστές των web servers ώστε να καθορίζουν τις πολιτικές πρόσβασης στα αρχεία τους. Πιο συγκεκριμένα, να αναγνωρίζουν αρχεία στα οποία ενδεχομένως να μην είχε πρόσβαση κάποιος crawler. Αυτό γίνεται κρατώντας ένα αρχείο με το όνομα robots.txt κάτω από το root κατάλογο του εξυπηρετητή διαδικτύου (όπως π.χ. http://www.biz.uiowa.edu/robots.txt). Αυτό το αρχείο παρέχει πολιτικές πρόσβασης για διαφορετικούς χρήστες-πράκτορες (robots ή crawlers). Μία τιμή χρήστη-πράκτορα με * υποδηλώνει μία εξ ορισμού πολιτική για οποιονδήποτε crawler που δε ταιριάζει με άλλες τιμές χρηστών-πρακτόρων στο αρχείο. Ένας αριθμός μη-επιτρεπόντων καταχωρήσεων μπορεί να παρέχεται για ένα χρήστη-πράκτορα. Οποιοδήποτε URL ξεκινά με την τιμή του πεδίου μη-επιτρεπτό δεν πρέπει να ανακτάται από έναν crawlerπου ταιριάζει με το χρήστηπράκτορα. Όταν ένας crawler θέλει να ανακτήσει μία σελίδα από έναν web server, πρέπει πρώτα να φορτώσει το κατάλληλο robots.txt αρχείο και να επιβεβαιώσει πως το URL που πρόκειται να φορτωθεί δεν είναι μη-επιτρεπτό. Περισσότερες πληροφορίες γι αυτό το πρωτόκολλο μπορούν να βρεθούν στο http://www.robotstxt.org/wc/norobots.html. Είναι αποτελεσματικό να γίνεται cache των πολιτικών πρόσβασης ενός αριθμού servers που επισκέφτηκε πρόσφατα ο crawler. Αυτό θα οδηγούσε στην αποφυγή της πρόσβασης σε ένα robots.txt αρχείου κάθε φορά που θέλουμε να φορτωθεί σε ένα URL. Ωστόσο, πρέπει να διασφαλιστεί το γεγονός πως οι καταχωρήσεις στην κρυφή μνήμη(cache) παραμένουν επαρκώς ενημερωμένες. 4.1.5 Parsing Μόλις μία σελίδα φορτωθεί, πρέπει να αναλυθεί το περιεχόμενό της για να εξαχθεί πληροφορίες που θα τροφοδοτήσουν και ενδεχομένως θα κατευθύνουν το μελλοντικό μονοπάτι του crawler. Η ανάλυση αυτή (parsing) μπορεί απλά να περιλαμβάνει την εξαγωγή των υπερσυνδέσμων ή μπορεί να περιλαμβάνει την πιο πολύπλοκη διαδικασία του συμμαζέματος του HTML περιεχομένου προκειμένου να αναλύσουμε το HTML tag tree. Η ανάλυση μπορεί επίσης να περιλαμβάνει βήματα για τη μετατροπή των URL που έχουν εξαχθεί σε μία κανονική μορφή, την αφαίρεση stop words και το ψαλίδισμα των υπόλοιπων λέξεων. Αυτά τα κομμάτια της ανάλυσης περιγράφονται στη συνέχεια. Εξαγωγή URL και κανονικοποίηση HTML αναλυτές υπάρχουν ελεύθερα διαθέσιμοι για πολλές γλώσσες προγραμματισμού. Παρέχουν τη λειτουργικότητα της εύκολη αναγνώρισης HTML ετικετών (tags) και σχετικών ζευγαριών ιδιότητας-τιμής σε ένα δοσμένο έγγραφο HTML. Προκειμένου να εξαχθούν υπερσυνδέσμους από μία ιστοσελίδα, είναι εύκολο να χρησιμοποιήσουμε αυτούς τους αναλυτές για τη εύρεση anchor ετικετών και να συλλεχθούν τιμές που σχετίζονται με τις href ιδιότητες. Ωστόσο, δε χρειάζεται να μετατραπεί κανένα σχετικό URL σε απόλυτο URL χρησιμοποιώντας το βασικό URL της σελίδας από την οποία ανακτήθηκαν. 49

Διαφορετικά URL που αντιστοιχούν στην ίδια ιστοσελίδα μπορούν να απεικονιστούν με την ίδια κανονική μορφή. Αυτό είναι σημαντικό προκειμένου να αποφύγουμε τη φόρτωση της ίδιας σελίδας πολλές φορές. Παρακάτω δίνονται μερικά από τα βήματα που χρησιμοποιούνται σε τυπικές διαδικασίες κανονικοποίησης URL: Μετατροπή του πρωτοκόλλου και του hostname σε πεζά γράμματα. Για παράδειγμα, το HTTP://www.UIOWA.edu μετατρέπεται σε http://www.uiowa.edu. Αφαίρεση της αγκύρωσης (anchor part) ή του τμήματος αναφοράς (referencepart) του URL. Επομένως, το http://myspiders.biz.uiowa.edu/faq.html#what γίνεται http://myspiders.biz.uiowa.edu/faq.html. Πραγματοποίηση URLκωδικοποίησης για κάποιους συχνά χρησιμοποιούμενους χαρακτήρες όπως ο ~. Αυτό θα αποτρέψει τον crawlerαπό το να θεωρήσει το http://dollar.biz.uiowa.edu/~pant διαφορετικό URL από το http://dollar.biz.uiowa. edu/ %7Epant/. Σε κάποια URLs, γίνεται προσθήκη στο τέλος του χαρακτήρα /. Το http://dollar.biz.uiowa.eduκαι το http://dollar.biz.uiowa.edu/ πρέπει να αντιστοιχούν στην ίδια κανονική μορφή. Η απόφαση για την προσθήκη στο τέλος ενός χαρακτήρα / ενδεχομένως να απαιτήσει τη χρήση ευριστικώνμεθόδων σε κάποιες περιπτώσεις. Χρήση ευριστικώνμεθόδων για την αναγνώριση προκαθορισμένων ιστοσελίδων. Ονόματα αρχείων όπως index.html ή index.htm θα μπορούν να αφαιρούνται από το URLμε την υπόθεση πως είναι τα προκαθορισμένα αρχεία. Αν αυτό είναι αλήθεια, θα ανακτηθούν χρησιμοποιώντας απλά το βασικό URL. Αφαίρεση των.. και του γονικού τους καταλόγου από το μονοπάτι του URL. Επομένως, το URLμονοπάτι /%7Epant/BizIntel/Seeds/../ODPSeeds.dat θα γίνει /%7Epant/BizIntel/ODPSeeds.dat. Διατήρηση των αριθμλων των θυρών ως έχουν στο URL, εκτός αν πρόκειται για τη θύρα 80. Εναλλακτικά, αφήνουμε τους αριθμούς των θυρών ως έχουν και προσθέτουμε τη θύρα 80 όταν δεν καθορίζεται αριθμός θύρας. Είναι σημαντική η συνεπείς όταν εφαρμόζονται κανόνες κανονικοποίησης. Είναι πιθανό δύο φαινομενικά αντίθετοι κανόνες να δουλεύουν εξίσου καλά (όπως, π.χ. αυτοί για τους αριθμούς των θυρών) όσο τους εφαρμόζουμε συνεπώς στα URLs. Άλλοι κανόνες κανονικοποίησης μπορούν να εφαρμοστούν ανάλογα με την εφαρμογή και την προηγούμενη γνώση που υπάρχει για μερικές σελίδες. Όπως αναφέρθηκε και νωρίτερα οι spider traps προκαλούν σοβαρά προβλήματα σε έναν crawler. Τα ψεύτικα URLsπου δημιουργούνται από τις spider traps συχνά γίνονται αισθητά μεγαλύτερα σε μέγεθος. Ένας τρόπος να αντιμετωπιστούν αυτές οι παγίδες είναι ο περιορισμός του μεγέθους των URLσελίδων, για παράδειγμα, σε 128 ή 256 χαρακτήρες. 50

Stop listing and Stemming Όταν αναλύουμε μία ιστοσελίδα για να εξαγάγουμε πληροφορίες περιεχομένου ή προκειμένου να βάλουμε σκορ σε καινούρια URLs που προτείνονται από τη σελίδα, είναι πολλές φορές χρήσιμο να αφαιρούμε λέξεις που χρησιμοποιούνται συχνά ή stop words όπως το it και το can. Η διαδικασία αυτή κατά την οποία αφαιρούνται τα stop words από ένα κείμενο ονομάζεται stop listing. Ας σημειώσουμε πως το σύστημα Dialog (http://www.dialog.com) αναγνωρίζει μόλις 9 λέξεις (τις an, and, by, for, from, of, the, to, with ) σαν stop words. Εκτός από το stop listing, κάποιος μπορεί επίσης να ψαλιδίσει τις λέξεις που υπάρχουν στη σελίδα. Η διαδικασία ψαλιδίσματος κανονικοποιεί τις λέξεις συγχωνεύοντας έναν αριθμό μορφολογικά όμοιων λέξεων σε μία μόνο μορφή ρίζας. Για παράδειγμα, οι λέξεις connect, connected, connection γίνονται όλες connect. Υλοποιήσεις του συχνά χρησιμοποιούμενου αλγόριθμου ψαλιδίσματος του Porterβρίσκονται εύκολα διαθέσιμες σε πολλές γλώσσες προγραμματισμού. Ένας από τους συγγραφείς έχει δει περιπτώσεις στο πεδίο της βίο-ιατρικής όπου το ψαλίδισμα οδήγησε σε μείωση της ακρίβειας των αποτελεσμάτων του crawling. 4.1.6 HTML tag tree Οι crawlers μπορούν να εκτιμήσουν την αξία ενός URL ή μιας λέξης του περιεχομένου εξετάζοντας την HTML ετικέτα περιεχομένου στην οποία ανήκει. Για αυτό, ένας crawler μπορεί να χρειαστεί να αξιοποιήσει το tag tree ή τη DOM δομή της HTML σελίδας. Η εικόνας 2 δείχνει ένα tag treeπου αντιστοιχεί σε μία HTMLπηγή. Η <html> ετικέτα σχηματίζει τη ρίζα του δέντρου και διάφορες ετικέτες και κείμενο σχηματίζουν τους κόμβους του δέντρου. Δυστυχώς, πολλές ιστοσελίδες περιέχουν κακογραμμένο HTML κώδικα. Για παράδειγμα, ένα start tag μπορεί να μην έχει ένα end tag (μπορεί να μην απαιτείται από τις HTML προδιαγραφές) ή οι ετικέτες μπορεί να μην είναι κατάλληλα φωλιασμένες. Σε πολλές περιπτώσεις, η <html> ετικέτα ή η <body> ετικέτα λείπουν από την HTML σελίδα. Επομένως, κριτήρια που βασίζονται στη δομή συχνά απαιτούν ένα προηγούμενο βήμα μετατροπής του βρώμικου HTML εγγράφου σε ένα σωστά μορφοποιημένο, διαδικασία που ονομάζεται συμμάζεμα (tidying) μιας HTML σελίδας. Αυτή περιλαμβάνει τόσο προσθήκη ετικετών που λείπουν όσο και αναδιάταξη των ετικετών στη σελίδα [26]. Το συμμάζεμα μιας ΗΤΜL σελίδας είναι απαραίτητο για την απεικόνιση του περιεχομένου της σελίδας σε μία δενδρική δομή με ακεραιότητα, όπου κάθε κόμβος έχει ένα μόνο γονιό. Επομένως, είναι ένας σημαντικός πρόδρομος για την ανάλυση μιας HTML σελίδας σαν ένα tag tree. Να σημειωθεί πως η ανάλυση της DOM δομής είναι απαραίτητη μόνο αν ο τοπικός crawler σκοπεύει να χρησιμοποιήσει τη δομή του HTML εγγράφου με ένα μη-συνηθισμένο τρόπο. Για παράδειγμα, αν ο crawler χρειάζεται μόνο τους συνδέσμους που υπάρχουν μέσα σε μια σελίδα, και το κείμενο ή τμήματα του κειμένου της σελίδας, μπορούν να χρησιμοποιηθούν πιο απλοί HTML αναλυτές (parsers). Τέτοιοι αναλυτές υπάρχουν επίσης διαθέσιμοι σε πολλές γλώσσες προγραμματισμού. 51

Εικόνα 13. Σχηματική αναπαράσταση του Html δέντρου 4.1.7 Πολυνηματικοί Crawlers Μία σειριακή επανάληψη διάσχισης ξοδεύει πολύ χρόνο κατά τον οποίο είτε η CPU είναι αδρανής (κατά τη διάρκεια πρόσβασης σε δίκτυο ή δίσκο) είτε η διεπαφή δικτύου είναι αδρανής (κατά τη διάρκεια των λειτουργιών της CPU). Η χρήση πολλών νημάτων, όπου κάθε νήμα ακολουθεί μία crawling επανάληψη, μπορεί να οδηγήσει σε αξιόλογη αύξηση της ταχύτητας και σε αποτελεσματικότερη χρήση του διαθέσιμου εύρους ζώνης. Ας σημειωθεί πως κάθε νήμα ξεκινά κλειδώνοντας τη λίστα με τα μη-επισκεπτόμενα URL προκειμένου να επιλέξει το επόμενο URL στο οποίο θα γίνει διάσχιση. Εφόσον επιλέξει URL ξεκλειδώνει τη λίστα επιτρέποντας σε άλλα νήματα να έχουν πρόσβαση σε αυτή. Η λίστα κλειδώνει ξανά όταν νέα URLs προστίθενται σε αυτή. Τα βήματα κλειδώματος είναι απαραίτητα προκειμένου να συγχρονιστεί η χρήση της λίστας η οποία τώρα διαμοιράζεται σε πολλές επαναλήψεις διάσχισης (νήματα) [26]. Το μοντέλο του πολυνηματικού crawler ακολουθεί ένα τυπικό παράλληλο υπολογιστικό μοντέλο. Να σημειωθεί πως ένας τυπικός crawler θα διατηρούσε επίσης μια διαμοιραζόμενη δομή δεδομένων ιστορικού για γρήγορο ψάξιμο URLs στα οποία έχει ήδη γίνει crawl. Επομένως, μαζί με τη λίστα μηεπισκεπτόμενων URL θα έπρεπε επίσης να συγχρονίζει την πρόσβαση στο ιστορικό. 52

Εικόνα 14. Αναπαράσταση εκτέλεσης βρόγχου crawler με πολλά νήματα Το μοντέλο πολυνηματικού crawler πρέπει να αντιμετωπίζει μία άδεια λίστα μηεπισκεπτόμενων URLs όπως ακριβώς και ένας σειριακός crawler. Ωστόσο, το ζήτημα είναι λιγότερο απλό τώρα. Αν ένα νήμα βρει τη λίστα άδεια, δεν σημαίνει πως ο crawler σαν σύνολο έχει φτάσει σε αδιέξοδο. Είναι πιθανό άλλα νήματα να φορτώνουν σελίδες και μπορεί να προσθέσουν καινούρια URLsστο κοντινό μέλλον. Ένας τρόπος να αντιμετωπίσουμε την κατάσταση είναι να στείλουμε ένα νήμα σε κατάσταση sleepόταν βρίσκει άδεια τη λίστα. Όταν το νήμα επανέλθει, ελέγχει ξανά για URLs. Ένας καθολικός ελεγκτής κρατά τον αριθμό των νημάτων που βρίσκονται σε κατάσταση sleep. Μόνο όταν όλα τα νήματα βρεθούν σε κατάσταση sleep σταματά η διαδικασία του crawling. Περισσότερες βελτιστοποιήσεις μπορούν να γίνουν στο μοντέλο πολυνηματικού crawler που περιγράφεται εδώ, όπως για παράδειγμα η μείωση του ανταγωνισμού μεταξύ των νημάτων και η οργάνωση της πρόσβασης δικτύου. Στο κεφάλαιο αυτό περιγράψαμε τα βασικά συστατικά ενός crawler. Η κοινή υποδομή υποστηρίζει από τη μία πλευρά έναν πολύ απλό πρώτα κατά πλάτος crawler και από την άλλη crawler αλγόριθμους οι οποίοι μπορεί να περικλείουν πολύ σύνθετους μηχανισμούς επιλογής URL. Παράγοντες όπως το μέγεθος της λίστας μη-επισκεπτόμενων κόμβων, η στρατηγική ανάλυσης της σελίδας, το ιστορικό του crawler και η αποθήκη σελίδων σημειώθηκαν ως ενδιαφέρουσες και σημαντικές παράμετροι στους ορισμούς που αφορούν τους crawlers. 53

4.2 Ο WebSphinx crawler O WebSphinx ( Website-Specific Processors for HTML Information extraction) είναι μια βιβλιοθήκη σε JAVA και ένα διαδραστικό περιβάλλον για web crawlers. Ο WebSphinx αποτελείται από δύο μέρη: τον Crawler Workbench και την WebSphinx class library. 4.2.1 Crawler Workbench Η Crawler Workbench αποτελεί μια γραφική διεπαφή χρήστη (GUI) η οποία επιτρέπει να προσαρμόσουμε και να ελέγξουμε έναν προσαρμόσιμο web crawler. Παρέχει τις παρακάτω δυνατότητες: Οπτικοποίηση μιας συλλογής από σελίδες σε έναν γράφο. Αποθήκευση σελίδων στον τοπικό δίσκο για offline περιήγηση και επεξεργασία. Συνένωση σελίδων για προβολή και εκτύπωση σαν ένα ενιαίο έγγραφο. Εξαγωγή όλου του κειμένου το οποίο ακολουθεί κάποιο πρότυπο για μια συλλογή σελίδων. Ανάπτυξη ενός crawler σε javaή Javascript ο οποίος μπορεί να επεξεργαστεί τις σελίδες όπως επιθυμούμε. 4.2.2 WebSphinx class library Η WebSphinx class library παρέχει υποστήριξη για υλοποίηση web crawler σε Java. To πακέτο αυτό παρέχει έναν μεγάλο αριθμό χαρακτηριστικών: Παράλληλη ανάκτηση ιστοσελίδων σε επίπεδο εφαρμογής Ένα αντικειμενικό μοντέλο παρουσίασης σελίδων και συνδέσμων Υποστήριξη για επαναχρησιμοποίηση ταξινομητών(classifiers) σελίδων Αποδοτικό Html Parsing Υποστήριξη του προτύπου robot exclusion Pattern Matching μέσω χρήσης κανονικών εκφράσεων, Unix shell wildcards, HTML tag εκφράσεων. Οι κανονικές εκφράσεις παρέχονται από την Apache Jakarta - regexp regular expression βιβλιοθήκη. Κοινοί HTML μετασχηματισμοί όπως συνένωση ιστοσελίδων, αποθήκευση στο δίσκο και μετονομασία συνδέσμων. 4.2.3 Εξερευνώντας τον WebSphinx Στην συνέχεια παρουσιάζονται κάποιες ενέργειες που μπορούν να εκτελεστούν στο Workbench: 54

Οπτικοποίηση του διαδικτύου μέσω γράφου Έχει την δυνατότητα να ανακτά τις σελίδες που επισκέφτηκε και να τις κάνει render σαν ένα γράφο αποτελούμενο από σελίδες και από συνδέσμους. Αποθήκευση σελίδων στο δίσκο Εικόνα 15. Εξαγωγή γράφου επίσκεψης από τον WebSphinx Στο συγκεκριμένο παράδειγμα ανακτά τις 30 σελίδες που βρίσκονται στον ιστότοπο SCSTechnicalReportsindex και τις αποθηκεύει στον τοπικό δίσκο. Συνένωση σελίδων για εκτύπωση Εικόνα 16. Αποθήκευση σελίδων μέσω του WebSphinx Ο WebSphinx παρέχει την δυνατότητα συνένωσης όλων των σελίδων στο BobHarper's IntroductiontoSML σε μια σελίδα κατάλληλη για εκτύπωση. Εικόνα 17. Συνένωση σελίδων μέσω του WebPShinx 55

Εξαγωγή εικόνων από ένα σύνολο σελίδων Τέλος, παρέχει την δυνατότητα εξαγωγής όλων των εικόνων από ένα σύνολο σελίδων και την δημιουργία μιας σελίδας η οποία θα εμπεριέχει όλα τα λογότυπα τα οποία βρέθηκαν. Εικόνα 18. Εξαγωγή εικόνων μέσω του WebSphinx 4.3 Polite Crawling 4.3.1 Η έννοια του Politeness Η έννοια Politeness σχετίζεται με τη διασφάλιση πως ο Web Crawler λειτουργεί μέσα στα γενικά αποδεκτά πρότυπα και σέβεται τους πόρους και τις δημοσιευμένες επιθυμίες των ιδιοκτητών των ιστοσελίδων στις οποίες κάνει crawl. Η έννοια του politeness είναι το πιο σημαντικό θέμα που πρέπει να λάβει κανείς υπόψη κατά τη δημιουργία και τη χρήση ενός Web Crawler [30]. Αν ο crawler δεν λαμβάνει υπόψη του την έννοια του politeness: πηγαίνει εκεί που δεν τον θέλουν, φορτώνει υπερβολικά έναν server, οι διαχειριστές των ιστοσελίδων θα μπλοκάρουν την IP διεύθυνση και το αλφαριθμητικό αναγνώρισης του crawler. Επίσης, θα αναρτήσουν πληροφορίες για τον crawler σε bulleting board συστήματα και ιστοσελίδες που αναφέρουν κακόβουλα bots. Θα καταψηφιστεί από πολλές ιστοσελίδες, το όνομα του crawler θα δεχθεί υβριστικά σχόλια, και είναι πολύ πιθανό να δεχτείτε πολλά παράπονα μέσω του ISP. Έτσι, οι μακροχρόνιες επιπτώσεις είναι υπερβολικά αρνητικές, καθώς σημαντικές ιστοσελίδες που περιέχουν πληροφορίες που ψάχνει κάποιος θα τον μπλοκάρουν. 4.3.2 Crawler identification(αναγνώριση) Ένας polite crawler θα έχει ένα καλώς ορισμένο αλφαριθμητικό αναγνώρισης που θα περιλαμβάνει ένα URL όπου οι διαχειριστές των ιστοσελίδων μπορούν να βρουν περισσότερες πληροφορίες για τον crawler και γιατί επισκέπτεται τις ιστοσελίδες τους. Αυτή η ιστοσελίδα θα πρέπει επίσης να περιλαμβάνει μία διεύθυνση ηλεκτρονικού ταχυδρομείου ή άλλα μέσα με τα οποία οι διαχειριστές θα μπορούν να έρθουν σε επαφή 56

για ερωτήματα σχετικά με τον crawler. Υπάρχουν τουλάχιστον 3 λόγοι για τους οποίους πρέπει οι άλλοι να επικοινωνούν με τους κατασκευαστές του Crawler: 1. Αν υπάρχει ένα bug στον crawler που τον κάνει να μη δουλεύει καλά, οι διαχειριστές των ιστοσελίδων είναι συχνά διατεθειμένοι να ενημερώσουν. Καλύτερα αυτό, παρά να τον μπλοκάρουν καθώς δε θα μπορούν να έλθουν σε επαφή με αυτούς που τον υλοποίησαν. 2. Η γρήγορη απάντηση στις ερωτήσεις και τις ανησυχίες των διαχειριστών, θα γνωστοποιήσουν το γεγονός αυτό στα προαναφερθέντα forum και site όπου συζητιούνται τα bots. Αξίζει να έχει κάποιος καλή φήμη [30]. 3. Αν ο crawler είναι το κομμάτι συλλογής δεδομένων ενός μεγαλύτερου προϊόντος το οποίο κάποια στιγμή θα γίνει γνωστό, μερικοί από αυτούς τους διαχειριστές ιστοσελίδων που επικοινώνησαν με αυτούς που δημιούργησαν τον Crawler θα γίνουν testers και υποστηρικτές του project. 4.3.3 Το Robot Exclusion πρωτόκολλο Η πιο προφανής μορφή politeness είναι ο σεβασμός του πρωτοκόλλου Robots Exclusion. Παρόλο που δεν αποτελεί επίσημο πρότυπο όπως το HTTP ή το SMTP, μια παραλλαγή του πρωτοκόλλου Robots Exclusion τηρείται από όλους τους crawlers μεγάλων μηχανών αναζήτησης. Sστη σελίδα βοήθειας της Google υπάρχουν πληροφορίες σχετικά με το πώς χειρίζονται το robots.txt. Αν ο crawler το υλοποιεί αυτό, θα λειτουργεί μέσα στα αποδεκτά πλαίσια (πρότυπα). Το MSN (τώρα Bing) και η Yahoo (και μπορεί και η Google) υποστηρίζουν την Crawl-delay επέκταση στο robots.txt. Αυτή η καταχώρηση, αν υπάρχει, υποδεικνύει στα bots πόσο να καθυστερούν μεταξύ των αιτημάτων σε μία σελίδα. Πολλοί διαχειριστές ιστοσελίδων στηρίζονται σε αυτή την τιμή για να μειώσουν το φόρτο από τους servers τους. Αν είναι δυνατό, θα πρέπει να υποστηρίζει το Crawl-delay κάποιος crawler. Αν το αρχείο robots.txt της ιστοσελίδας δεν έχει ένα Crawl-delay, αυτό δεν σημαίνει πως πρέπει να εισέλθει στην ιστοσελίδα όσο πιο γρήγορα μπορείτε. Σύμφωνα με την εμπειρία αν παρακολουθηθεί το πόσο γρήγορα ανταποκρίνεται μία ιστοσελίδα και χρησιμοποιηθεί κάποιο πολλαπλάσιο αυτού του αριθμού σαν το εξ ορισμού crawl-delay, γίνεται λήψη πολύ λίγων παραπόνων. Για μικρότερες ιστοσελίδες, θα πρέπει πιθανώς να υπάρχει αναμονή ένα λεπτό πριν την εισχώρησή σε αυτές. Μεγαλύτερες ιστοσελίδες με περισσότερη κίνηση μάλλον δε θα προσέξουν καν τον crawler αν εισέρχεται σε αυτές μία φορά κάθε 15 δευτερόλεπτα. Το robots.txt είναι ένα προαιρετικό πρότυπο, και υπάρχουν κάποιες ασάφειες στις προδιαγραφές που μερικές φορές καθιστούν δύσκολο το να καθοριστεί αν ο crawlerσας μπορεί να έχει πρόσβαση σε μία πηγή ή όχι. 4.3.4 Crawling χρήσιμου περιεχομένου Αν ο crawler ψάχνει πληροφορίες σε HTML σελίδες, τότε είναι απίθανο να βρει κάτι χρήσιμο σε ένα αρχείο εικόνας. Το γεγονός αυτό είναι προφανές, αλλά είναι εύκολο κάποιος να το παραβλέψει όταν πρωτοξεκινά να γράψει έναν crawler [30]. Εξάλλου, δεν 57

υπάρχει τρόπος να πει κανείς με σιγουριά τι υπάρχει μέσα σε ένα αρχείο μέχρι να το κατεβάσει. Ένας τυπικός WebCrawler θα χρησιμοποιεί λογική όμοια με την εξής: do Get next url to crawl Request and download the document If the document s content type is text/html Parse and process the document endif forever Το βήμα της «ανάλυσης και επεξεργασίας ενός εγγράφου» συνήθως περιλαμβάνει την εξαγωγή όλων των URLs του εγγράφου και την τοποθέτησή τους στην ουρά με τα URLs στα οποία πρέπει να γίνει crawl. Όπως αναφέρθηκε, δεν μπορεί κάποιος να πει με σιγουριά ποιος είναι ο τύπος του περιεχομένου ενός εγγράφου μέχρι να το κατεβάσει. Παρόλο που γίνεται να ζητηθούν μόνο οι HTML επικεφαλίδες για μία πηγή και μετά να γίνει αίτηση του εγγράφου μόνο αν η επικεφαλίδα Content-type είναι text/html, αυτή η διαδικασία απαιτεί να δύο αιτήματα για κάθε έγγραφο. Παρόλο που τα αιτήματα απαιτούν λιγότερο εύρος ζώνης(bandwidth) από το κατέβασμα ενός εγγράφου, δεν είναι ελεύθερα. Ένας καλύτερος τρόπος καθορισμού το πρέπει να γίνει crawl είναι η εξέταση της επέκτασης αρχείου του URL. Παρόλο που δεν είναι τέλεια, αυτή η τεχνική είναι πολύ αποτελεσματική. Για παράδειγμα, αν το URL τελειώνει σε.jpg ή.gif, είναι το πιθανότερο εικόνα (.jpg και.gif οδηγούν στο 97% των περιπτώσεων σε εικόνες και οι περισσότερες από τις υπόλοιπες είναι σελίδες 404). Ένας crawler μπορεί να γίνει πολύ πιο αποτελεσματικός και περισσότερο polite φτιάχνοντας μια λίστα με απορριπτέες επεκτάσεις αρχείων. 4.3.5 Η περίπτωση των subdomains Θα πρέπει να αποφευχθεί το άνοιγμα περισσότερων από μία παράλληλες συνδέσεις σε οποιονδήποτε server ή σε οποιαδήποτε ιστοσελίδα. Αυτό μπορεί να γίνει πολύ δύσκολο στο να επιβληθεί, αλλά μπορούν να γίνουν κάποιες ενέργειες ώστε τουλάχιστον να μειωθούν οι πιθανότητες να συμβεί. Η απλοϊκή προσέγγιση είναι να διαχωριστούν τα URLs σύμφωνα με το hostname και να εξασφαλιστεί το ότι δεν υπάρχουν ποτέ περισσότερες από μία συνδέσεις σε κάποιο hostname. 58

Εικόνα 19. Επεκτάσεις αρχείων που πρέπει να ελέγχονται από τον crawler Αυτή η προσέγγιση δουλεύει πολύ καλά μέχρι να ληφθούν υπόψη τα subdomains. Αν υπάρχουν URLs που αρχίζουν με το http://example.com/ και άλλα που αρχίζουν με το http://www.example.com/ (μία πολύ συχνή περίπτωση), υπάρχει η πιθανότητα πολλά νήματα να έχουν πρόσβαση στην ίδια ιστοσελίδα. Αυτό το πρόβλημα γίνεται πολύ χειρότερο όταν πρόκειται για ιστοσελίδες όπως Blogger.com ή WordPress.com, όπου κάθε ξεχωριστός χρήστης έχει διαφορετικό subdomain [30]. Πολλές φορές απλός διαχωρισμός σύμφωνα με τις IP διευθύνσεις είναι αποτελεσματικός. Μία άλλη πιθανότητα είναι να καθοριστεί το root domain και να οργανωθούν τα URLs με αυτό τον τρόπο. Αλλά ο καθορισμός των root domains μπορεί να γίνει δύσκολος επίσης. Είναι αρκετά εύκολο για αμερικανικά domains που τελειώνουν σε.com,.org,.gov,.netκ.τ.λ. Αλλά όταν έχουμε να κάνουμε με country code top level domains και συναντήσετε πράγματα όπως.co.uk και άλλα τέτοια, τα πράγματα περιπλέκονται γρήγορα. Είναι σχεδόν αδύνατο να κατασκευαστεί και να διατηρηθεί μία εξαντλητική λίστα όλων των domain κορυφαίου επιπέδου και το πώς χειρίζονται τα subdomains. Ο καλύτερος τρόπος είναι η δημιουργία μίας λίστας με domain κορυφαίου επιπέδου είναι η μελέτη και η ανάλυση των crawler logs. 4.3.6 Δημιουργία μίας λίστα απαγόρευσης Αναπόφευκτα κάποιοι διαχειριστές ιστοσελίδων που δεν θα θέλουν να γίνει crawl στο site τους, και για κάποιον λόγο δεν θα μπορούν να δημιουργήσουν τα δικά τους robots.txt αρχεία. Σε αυτές τις περιπτώσεις, είναι χρήσιμη η δημιουργία μίας απαγορευτικής λίστα με 59

ιστοσελίδες οι οποίες δεν θα γίνουν ποτέ crawl. Επίσης, η λίστα απαγόρευσης είναι καλή για να αποκλείονται σελίδες που δε δίνουν καλές πληροφορίες. 60

5.Προτεινόμενη μεθοδολογία Η μεθοδολογία που ακολουθήσαμε είχε ως στόχο την δημιουργία ενός Crawler ο οποίος θα αποτελεί επέκταση του WebSphinx crawler. Η επέκταση εντοπίζεται στο σημείο κατά το οποίο νέες δυνατότητες εισάγονται στο παραγόμενο λογισμικό. Οι επιπλέον λειτουργίες προέκυψαν από την ανάγκη που υπάρχει για τον διαχωρισμό του crawling περιεχομένου που παράγει ένας απλός crawler σε σχέση με το ορατό από άνθρωπο περιεχόμενο που εμφανίζεται για μια ιστοσελίδα. Ο WebSphinx αδυνατεί να αναλύσει δυναμικές ιστοσελίδες στις οποίες εμφανίζονται οι τελευταίες τεχνολογίες παρουσίασης περιεχομένου όπως, AJAX, Jquery, flash και άλλα. Εντοπίζοντας αυτές τις αδυναμίες και εκμεταλλευόμενοι την τεχνολογία του Headless Browsing που αναφέρθηκε παραπάνω χρησιμοποιούμε τον μηχανισμό που ακολουθεί ο WebSphinx για το Crawling τροποποιώντας το fetch queue των συνδέσμων που αναμένεται να ακολουθήσει. Εικόνα 20 Σχηματική αναπαράσταση του JxSPhinx Ο στόχος που τίθεται είναι να αποδειχτεί μέσα από την πειραματική διαδικασία ότι, ξεκινώντας από ένα συγκεκριμένο URL το περιεχόμενο αλλά και η συλλογή των συνδέσμων που συγκεντρώνει και πρέπει να επισκεφτεί ένας crawler διαφέρει ποιοτικά από αυτό που θα συλλέγονταν αν ακολουθούσε την ίδια διαδικασία ένας άνθρωπος. Αρχικά έγινε μεταγλώττιση του WebSphinx και δημιουργία ενός νέου WebSPINX με όνομα WebSphinx crawler ο οποίος θα αποθηκεύει όλες τις πληροφορίες που αντλεί από το crawling σε μια MySQL βάση δεδομένων έτσι ώστε να καταγράφεται επακριβώς όλη η διαδικασία που ακολουθείται. Στην συνέχεια για τον τροποποιημένο WebSphinx 61

δημιουργείται ο JxSPhinx ο οποίος αποτελεί τον τροποποιημένο WebSphinx ο οποίος κάνει crawling κάνοντας χρήση των Headless Browsing δυνατοτήτων που επιτρέπει ο JXBroswer. Εικόνα 21. Διαφορά περιεχομένου των WebSphinx και JxSPhinx 5.1 Βασικές Πληροφορίες που χρειάζονται για μια σελίδα Για να μπορέσουμε να αποκτήσουμε μια πιο εμπεριστατωμένη άποψη για το περιεχόμενο των σελίδων που μελετάμε αποφασίσαμε να κρατούμε για κάθε σελίδα τις εξής πληροφορίες: Authority: η authority που βρίσκεται το url ParentUrl: το όνομα του Host που βρίσκεται το url LinkOrigin: το όνομα του συνδέσμου που δείχνει σε αυτό το url PageTitle: Ο τίτλος της σελίδας όπως είναι ορισμένος στο HTML PageWords: οι λέξεις που εμπεριέχονται στον HTML κώδικα της σελίδας Tags: ταtag elements της σελίδας LinkDepth: Το βάθος στο δέντρο διάσχισης που βρίσκεται η συγκεκριμένη σελίδα LinkBase: το base url από το οποίο μπορούμε να κατεβάσουμε την σελίδα PageLinks: τους συνδέσμους που εμπεριέχονται στην σελίδα PageDescription: το tag description της σελίδας MetaKeywords: το μεταδεδoμένο το οποίο περιέχει λέξεις κλειδιά για μια σελίδα MetaRobots: το περιεχόμενο του μεταδεδομένου Robot για μια σελίδα 5.2 Η σχεδίαση της βάσης Δεδομένων Για τις ανάγκες αυτής της εργασίας χρησιμοποιήθηκαν δύο μηχανισμοί: ο πρώτος αποτελεί μια επέκταση του WebSphinx ο οποίος παρέχει τη δυνατότητα αποθήκευσης των αποτελεσμάτων από το crawling σε μια βάση δεδομένων, ενώ ο δεύτερος είναι ο JxSPhinx όπως αναφέραμε και πιο πάνω και ουσιαστικά αποτελεί έναν crawler που αναλύει Human Visible Content. Η βάση που σχεδιάστηκε διαθέτει 6 πίνακες, 3 για κάθε εφαρμογή αντίστοιχα. Στην συνέχεια ακολουθεί σχήμα που παρουσιάζει τους πίνακες της βάσης. 62

Εικόνα 22. Οι πίνακες της βάσης δεδομένων Αναλυτικότερα οι πίνακες τις βάσης είναι: Jxspinx_page: αποθηκεύονται όλες οι πληροφορίες για κάθε σελίδα που επισκέπτεται ο JxSPhinx crawler Jxspinx_page_links: περιέχει όλους τους συνδέσμους που έχουν καταγραφεί από τον JxSPhinx JxSPhinx_tags: αποθηκεύονται κάποια μεταδεδομένα για τις σελίδες που επισκέπτεται ο JxSPhinx webspinx_page: αποθηκεύονται όλες οι πληροφορίες για κάθε σελίδα που επισκέπτεται ο WebSphinx crawler webspinx_page_links: περιέχει όλους τους συνδέσμους που έχουν καταγραφεί από τον WebSphinx WebSphinx_tags: αποθηκεύονται κάποια μεταδεδομένα για τις σελίδες που επισκέπτεται ο WebSphinx 5.3 Επεκτάσεις του μηχανισμού του WebSphinx - WebSphinxCrawler Για να τροποποιηθεί η λειτουργικότητα του WebSphinx ώστε να εξάγονται από κάθε σελίδα που επισκέπτεται μόνο οι απαραίτητες πληροφορίες και να αποθηκεύονται στην βάση δεδομένων που αναφέρθηκε παραπάνω δημιουργήθηκαν νέες οντότητες που εξυπηρετούν αυτό τον σκοπό. 63

Εικόνα 23. Δημιουργία καινούριων κλάσεων και ενσωμάτωσή τους στο υπάρχον σύστημα 1. CrawlerPackage a. Main: Αποτελεί την Main του προγράμματος που καλούνται όλες οι μέθοδοι για την έναρξης της διαδικασίας του crawling b. MyCrawler: Κληρονομεί την κλάση Crawler του package WebSphinx που είναι η βασική κλάση και περιέχει τον πυρήνα του crawler. Στην κλάση αυτή κληρονομείται η μέθοδος visit() για να μπορέσει να γίνει override η μέθοδος από τον νεo crawler στον επόμενο επίπεδο κληρονομικότητας. Ταυτόχρονα γίνεται αρχικοποίηση των παραμέτρων που πρέπει να έχει ο crawler. c. UrlHarvestingCrawler: Η κλάση αυτή κληρονομεί την κλάση MyCrawler και ουσιαστικά σε αυτήν μπαίνει η επιπρόσθετη λειτουργικότητα για την επεξεργασία των σελίδων και την αποθήκευση των κατάλληλων πληροφοριών στην βάση δεδομένων. 2. DBTables a. LinksInfo: Το αντικείμενο αυτό κρατά τις πληροφορίες για ένα Link όπως αυτό αναπαρίσταται στη βάση b. MetaTags: Παρέχει όλα τα μεταδεδομένα για μια σελίδα. c. WebPageInfo: Η οντότητα WebPageInfo αποθηκεύει όλες τις πληροφορίες για μια σελίδα που χρειάζονται. Στην συνέχεια αποθηκεύεται στη βάση και το αντικείμενο αποδεσμεύεται από τη μνήμη. 3. IO_Toolbox a. DBConfigurations: Η οντότητα αυτή συμμετέχει στον καθορισμό των παραμέτρων του συστήματος όσο αφορά την βάση Δεδομένων. Η λειτουργικότητά της περιορίζεται στην ανάγνωση από τον δίσκο των παραμέτρων επικοινωνίας με τη βάση αλλά και τα χαρακτηριστικά που θέλουμε να κρατήσουμε για κάθε σελίδα που επισκέπτεται ο crawler. Τα αρχεία παραμετροποίησης είναι τα configurations.info, DBSettings.info. b. DBOperations: Όλα οι λειτουργίες που έχουν σχέση με μια βάση δεδομένων υλοποιούνται σε αυτήν την κλάση. Περιέχει μεθόδους τέτοιες ώστε να φορτωθούν από τα αρχεία παραμετροποίησης οι πληροφορίες της βάσης, 64

σύνδεση με την βάση, κλείσιμο σύνδεσης με την βάση, εκτέλεση όλων των ερωτημάτων που σχετίζονται με την εισαγωγή πληροφορίας στην Βάση Δεδομένων. 5.4 Η κατασκευή του extended WebSphinx με όνομα JxSPhinx Ο JxSPhinx αποτελεί ουσιαστικά έναν crawler o οποίος βασίζεται στον επεκταμένο WebSphinxCrawler (ο οποίος κρατάει στην βάση την απαραίτητη πληροφορία για κάθε σελίδα) και χρησιμοποιεί και αυτός για το τον μηχανισμό που κάνει χρήση ο WebSphinx. Για να γίνει μεταγλώττιση του JxSPhinx ξεκινώντας από τον πηγαίο κώδικα που παρέχει η ομάδα ανάπτυξης του WebSphinx αρκεί να ακολουθήσουμε τα βήματα όπως περιγράφτηκαν στο προηγούμενο κεφάλαιο μόνο που στην περίπτωση αυτή πρέπει να επιλέξουμε σαν εξωτερικό αρχείο κώδικα το JxSPhinxExternalSrc/src. Επιπλέον δεν πρέπει να παραγνωρίσουμε το γεγονός ότι ανάλογα με τον τύπο του λειτουργικού που χρειαζόμαστε πρέπει να επιλέξουμε 32 bit JDK ή 64 bit JDKόπως αναφέρει ο πίνακας στο κεφάλαιο 5.3.1 5.4.1 Διαφορές στην υλοποίηση του WebSphinx Crawler σε σχέση με τον JxSPhinx Crawler Η υλοποίηση του JxSPhinx ουσιαστικά παρέχει την δυνατότητα να διακρίνουμε τις διαφορές που υπάρχουν ανάμεσα στις ευρετηριοποιημένες πληροφορίες που υπάρχουν για έναν ιστότοπο ο οποίος έχει γίνει ανάλυση μέσω ενός crawler και ανάμεσα στο πραγματικό πληροφοριακό περιεχόμενο που αντιλαμβάνεται οπτικά ένας χρήστης. Το περιεχόμενο που οπτικά διακρίνει ένας χρήστης μπορούμε να το συλλέξουμε εφαρμόζοντας τεχνικές Headless Browsing κάνοντας χρήση στην τρέχουσα μεθοδολογία με τον JXBroswer. Για να μπορέσει να υλοποιηθεί ουσιαστικά αυτό είναι απαραίτητη η επέμβαση όσο αφορά το μηχανισμό της συλλογής συνδέσμων από κάθε ιστόχωρο. Ο WebSphinx crawler διαθέτει έναν μηχανισμό HTML parsing για να μπορέσει να κάνει εξαγωγή περιεχομένου και να μπορέσει να ανακτήσει τους συνδέσμους που εμπεριέχονται σε μια σελίδα. Για έναν απλό crawler όμως τεχνικές ajax, Jquery, ανακατεύθυνση σε άλλον ιστόχωρο αλλά και προβολή περιεχομένου μέσα από εμφωλευμένα iframes καθίσταται αδύνατη. Την λύση δίνει όμως η μηχανή render του JXBroswer η οποία μπορεί ουσιαστικά και κρατάει όλη την πληροφορία σε ένα DOM αρχείο. Η πληροφορία αυτή ουσιαστικά είναι η δυαδική αναπαράσταση του οπτικού περιεχόμενου που μπορεί να διακρίνει ένας χρήστης αλλά δεν μπορεί να ανιχνεύσει ένας crawler. Ο τρόπος με τον οποίο γίνεται η εξαγωγή των συνδέσμων για κάθε ιστοσελίδα ουσιαστικά προκύπτει από το DOM parsing που αποτελεί μια διαδικασία αυτοματοποιημένη στον JxSPhinx. Η ανάλυση του Dom περιεχομένου γίνεται μέσω του JDOM API. Αποτέλεσμα είναι να αλλάξουμε τον μηχανισμό επίσκεψης συνδέσμων του JxSPhinx αλλά και την ουρά των αναμενόμενων συνδέσμων που πρόκειται ο crawler να επισκεφτεί. Η παραμετροποίηση του μηχανισμού επίσκεψης γίνεται μέσα στην μέθοδο visit. Στην συνέχεια ακολουθεί μια αντιπαράθεση της μεθόδου visit του JxSPhinx και του WebSphinx. 65

Εικόνα 24. Η μέθοδος visit των WebSphinx και JxSPhinx Όπως φαίνεται στην συνέχεια πέρα από την παρέμβαση στον μηχανισμό επισκεψιμότητας του JxSPhinx έχουν προστεθεί και νέες οντότητες για να μπορέσει να γίνει ενοποίηση του WebSphinxμε τον JXBroswer. Στον κώδικα του WebSphinx έχουν προστεθεί 2 packages τα οποία πραγματεύονται την εισαγωγή λειτουργικότητας Headless Browsing στο σύστημα μέσω του JXBroswer package αλλά και την DOM επεξεργασία που απαιτείται αφού γίνει εκτέλεση του JXBroswer και η κάθε σελίδα γίνει render. 66

Εικόνα 25. Οι νέες κλάσεις του JxSPhinx 5.4.2 Εξαγωγή συνδέσμων με τη χρήση του JXBroswer Για να μπορέσει να αλλάξει ο μηχανισμός επισκεψιμότητας του WebSphinx είναι απαραίτητο να έχουμε ουσιαστικά ένα διαφορετικό σύνολο συνδέσμων που πρέπει να επισκεφτεί ο JxSPhinx σε σχέση με τον WebSphinx. Αυτό γίνεται μέσω της κλήσης του JXBroswer για κάθε σελίδα που επισκέπτεται ο μηχανισμός crawling που είναι κοινός και για τους δυο crawlers (WebSphinxcrawler, JxSPhinxcrawler). Αφού γίνει render η σελίδα από τον JXBroswer θα παραχθεί ένα DOM αντικείμενο που ουσιαστικά περιέχει όλη την πληροφορία που θα έβλεπε ένας χρήστης αν έκανε περιήγηση σε αυτήν την σελίδα. Το DOM αντικείμενο που έχει παραχθεί πρέπει να γίνει ανάλυση και να εντοπίσουμε όλα τα elements του DOM δέντρου τα οποία ουσιαστικά αποτελούν link. Αφού γίνει ανάλυση του DOM αντικειμένου τότε μια λίστα από URL επιστρέφεται στον μηχανισμό crawling. Η λίστα αυτή των συνδέσμων πρέπει ουσιαστικά να ενοποιηθεί με τη λίστα των συνδέσμων που ήδη υπάρχουν προς επίσκεψη και να αγνοηθεί η λίστα των συνδέσμων που επιστρέφει ο μηχανισμός του WebSphinx που προκύπτει από ένα απλό html parsing. 67

Εικόνα 26. ScreenShot από την διαδικασία Rendering μιας σελίδας 5.5 Σενάρια εκτέλεσης Για να μπορέσουμε να δείξουμε την χρησιμότητα του JxSPhinx κατασκευάσαμε τρία απλά σενάρια χρήσης κατά τα οποία οι δύο crawlers δημιουργούν ένα διαφορετικό δέντρο επίσκεψης με αποτέλεσμα να αναδύεται εμφανώς η διαφορά του περιεχομένου που θα παραχθεί εκτελώντας τον WebSphinx και τον JxSPhinx. Αυτό έχει ως αποτέλεσμα, όχι μόνο να εντοπίσουν διαφορετικό αριθμό συνδέσμων, αλλά να εξάγουν κατά ένα μέρος και ένα διαφορετικό ποιοτικά περιεχόμενο. Σενάριο Εκτέλεσης (Ανακατεύθυνση Συνδέσμου) Στο σενάριο αυτό μια.html σελίδα περιέχει ένα σύνδεσμο ανακατεύθυνσης στο W3Schools. Κατά την εκτέλεση του WebSphinx δεν υπάρχει καμία επίσκεψη σε κάποιον άλλο ιστόχωρο παρά μόνο στην τρέχουσα ιστοσελίδα. Σε αντίθεση, ο JxSPhinx διακρίνει την ανακατεύθυνση που υπάρχει στον html κώδικα με την χρήση του javascript και ξεκινά μια διαδικασία crawling με κόμβο έναρξης το W3Schools. 68

Εικόνα 27. Σενάριο Εκτέλεσης (Ανακατεύθυνση Συνδέσμου) Εικόνα 28. Σενάριο Εκτέλεσης (Ανακατεύθυνση Συνδέσμου) Εικόνα 29. Σενάριο Εκτέλεσης (Ανακατεύθυνση Συνδέσμου) 69

Εικόνα 30. Σενάριο Εκτέλεσης (Ανακατεύθυνση Συνδέσμου) Σενάριο Εκτέλεσης (Iframe προβάλει περιεχόμενο ιστοσελίδας) Κατά την εκτέλεση αυτού του σεναρίου ζητείται από τον crawler να εντοπίσει μέσα σε ένα iframe την προβολή περιεχομένου από κάποιον άλλο ιστότοπο. Ο WebSphinx δεν εντοπίζει τον ιστότοπο που προβάλλεται μέσα από το iframe και ξεκινάει η επίσκεψη των υπόλοιπων συνδέσμων, σε αντίθεση με τον JxSPhinx, o οποίος εντοπίζει την προβολή ιστότοπου μέσω iframe και τον συμπεριλαμβάνει στην λίστα των συνδέσμων που πρέπει να επισκεφτεί ο μηχανισμός επίσκεψής του. Στο συγκεκριμένο παράδειγμα βλέπουμε ότι ο σύνδεσμος http://www.iframehtml.com/ απουσιάζει από την λίστα συνδέσμων που βρήκε ο WebSphinx. Εικόνα 31. Σενάριο Εκτέλεσης (Iframe προβάλει περιεχόμενο ιστοσελίδας) 70

Εικόνα 32. Σενάριο Εκτέλεσης (Iframe προβάλει περιεχόμενο ιστοσελίδας) Εικόνα 33. Σενάριο Εκτέλεσης (Iframe προβάλει περιεχόμενο ιστοσελίδας) Εικόνα 34. Σενάριο Εκτέλεσης (Iframe προβάλει περιεχόμενο ιστοσελίδας) 71

Σενάριο Εκτέλεσης (Εμφωλευμένα iframes προβάλλουν περιεχόμενα σελίδας) Το τελευταίο σενάριο περιλαμβάνει την ανίχνευση προβαλλόμενων ιστοσελίδων μέσα από εμφωλευμένα Iframes. Στο συγκεκριμένο παράδειγμα το βάθος εμφώλευσης είναι 2. Η διαδικασία όμως μπορεί να εξελιχθεί και για μεγαλύτερα βάθη. Ο WebSphinx αδυνατεί να επισκεφτεί κάποιον ιστότοπο στην συνέχεια και η εκτέλεση τερματίζει σε σχέση με τον JxSPhinx, ο οποίος συνεχίζει να εξάγει περιεχόμενο και συνδέσμους ανάλογα με τον σύνδεσμο που είναι πρώτος στη λίστα συνδέσμων που πρέπει να επισκεφτεί. Εικόνα 35. Σενάριο Εκτέλεσης(Εμφωλευμένα iframes προβάλλουν περιεχόμενα σελίδας) Εικόνα 36. Σενάριο Εκτέλεσης(Εμφωλευμένα iframes προβάλλουν περιεχόμενα σελίδας) Εικόνα 37. Σενάριο Εκτέλεσης(Εμφωλευμένα iframes προβάλλουν περιεχόμενα σελίδας) 72

Εικόνα 38. Σενάριο Εκτέλεσης (Εμφωλευμένα iframes προβάλλουν περιεχόμενα σελίδας) 73

5.6 Πολυπλοκότητα του παραγόμενου λογισμικού Σημαντικό θέμα αποτελεί η πολυπλοκότητα των μηχανισμών διάσχισης. Ο παρακάτω πίνακας δίνει τους χρόνους εκτέλεσης του WebSphinx και του JxSPhinx για 3300 επισκέψεις ιστοσελίδων. Πίνακας 5 Χρόνοι εκτέλεσης των WebSphinx και JxSPhinx PageVisits\ Execution Time (secs) WebSphinx JxSPhinx 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 48 96 148 194 243 285 329 373 424 490 552 620 694 773 857 950 1046 1149 1257 1372 1491 1615 1747 1883 2027 2182 2338 2498 2662 2832 3010 3193 3387 192 218 400 549 704 905 1106 1278 1446 1674 1875 2069 2282 2472 2669 2872 3085 3259 3446 3609 3791 3970 4141 4318 4512 4764 4961 5152 5323 5497 5685 5894 6078 74

Τα πειραματικά αποτελέσματα έδειξαν ότι ο JxSPhinx κάνει περίπου τον διπλάσιο χρόνο για να μπορέσει να κάνει crawl τον ίδιο αριθμό ιστοσελίδων. Η πτώση της απόδοσης οφείλεται τόσο στον χρόνο που χρειάζεται για να γίνει render η σελίδα από τον Headless Browser, όσο και στον όχι τόσο αποδοτικό μηχανισμό χειρισμού του περιεχομένου της σελίδας μέσω JDOM. Η εξαφάνιση της ελαφριάς εκθετικότητας που χαρακτηρίζει τον WebSphinx κατά την υλοποίηση του JxSPhinx στις παρακάτω καμπύλες οφείλεται στο γεγονός ότι αποδεσμεύουμε το περιεχόμενο των ιστοσελίδων, καθώς το περιεχόμενο κρατείται στο Dom αντικείμενο που επιστρέφει ο Headless Browser. Διάγραμμα 2 Πολυπλοκότητα των WebSphinx και JxSPhinx 5.7 Προβλήματα που προέκυψαν Ο JxSPhinx αποτελεί προϊόν συνδυασμού ενός WebCrawler και ενός Headless Browser, χρησιμοποιεί μια βάση δεδομένων για την αποθήκευση των αποτελεσμάτων του και του JDom API για να διαχειριστεί τα DOM αντικείμενα. Βασικά προβλήματα που αντιμετωπίσθηκαν αναφέρονται στην συνέχεια: 1. Πολλές σελίδες διαθέτουν αδόμητο html κώδικα με αποτέλεσμα να γίνεται render η σελίδα από την μηχανή του JXBroswer, αλλά να μην μπορεί να γίνει parse το DOM αντικείμενο σε όλο το βάθος του. 2. Δεδομένου ότι ο crawler πρέπει να λειτουργεί σε αρκετές εκδόσεις λειτουργικών (cross platform), κάναμε χρήση της μηχανής του Mozilla. Αυτό δημιούργησε πρόβλημα διαχείρισης μνήμης, καθώς η εν λόγω μηχανή έχει υλοποίηση μόνο για 75

32 bit έκδοση windows, γεγονός που δεν μας επέτρεπε να δεσμεύσουμε πάνω από 1.5GB μνήμης. 3. Δεν λειτουργούν όλες οι δομές και τεχνικές διάσχισης για το αντικείμενο DOM, καθώς κατά την μετατροπή του αντικειμένου από DOM σε JDOM χάνεται ένα μεγάλο μέρος της δυναμικής του και δημιουργούνται αρκετοί περιορισμοί. 4. Δεν επιτρέπεται η κατασκευή πολλών αντικειμένων τύπου μηχανής render Mozilla στη μνήμη, ακόμα και αν αυτά αποδεσμεύονται από την μνήμη. Για αυτό τον λόγο δημιουργήθηκε ένα αντικείμενο το οποίο ήταν ανοιχτό σε όλη την διάρκεια του προβλήματος. 5. Ο WebSphinx κάνει κακή διαχείριση μνήμης με αποτέλεσμα να δημιουργείται υπερφόρτωση αυτής. 6. Η πολυπλοκότητα του JxSPhinx είναι χειρότερη σε σχέση με αυτήν του WebSphinx. Οι προσπάθειες που έγιναν για βελτίωση του χρόνου βοήθησαν, αλλά όχι σημαντικά ώστε να αλλάξει η πολυπλοκότητα του αλγορίθμου. 7. Δεν ήταν δυνατή η αναζήτηση κατά πλάτος παρά μόνο κατά βάθος, καθώς η πολυπλοκότητα του αλγορίθμου γίνεται χειρότερη. 76

6. Πειράματα και τεκμηρίωση 6.1 Κατασκευή Πειραμάτων Στο προηγούμενο κεφάλαιο αναλύθηκε η μεθοδολογία που χρησιμοποιήθηκε. Αρχικά αναφερθήκαμε στην σχεδίαση της βάσης δεδομένων, στην συνέχεια μιλήσαμε για τον WebSphinx και πως παραμετροποιήθηκε ώστε να μπορέσουμε να τον επεκτείνουμε και τέλος μιλήσαμε για τον JxSPhinx και ποια πλεονεκτήματα παρέχει σε σχέση με έναν απλό Crawler. Για να αποδείξουμε την χρησιμότητα του JxSPhinx τρέξαμε πειράματα σε διάφορες κατηγορίες ιστοτόπων. Αυτές περιέχουν ιστοσελίδες από τον χώρο του ηλεκτρονικού εμπορίου, από τον αθλητικό χώρο, από ενημερωτικά και διαφημιστικά site. Η χρήση ιστοτόπων διαφορετικού τύπου θα μπορέσει να αναδείξει σε μεγάλο βαθμό την χρησιμότητα του Headless Crawling. Μέσα από την πειραματική διαδικασία αναδύεται, αλλού σε μεγάλο βαθμό και αλλού σε μικρότερο, η διαφορά ανάμεσα στο ευρετήριοιποιημένο περιεχόμενο μιας σελίδας και σε αυτό που πραγματικά μπορεί να διακρίνει ένας χρήστης. Παράλληλα, διαφημιστικά μηνύματα αλλά και αναδυόμενα παράθυρα μπορούν να γίνουν διακριτά με την νέα μεθοδολογία που χρησιμοποιήθηκε σε σχέση με την παραδοσιακή τεχνικής διάσχισης του διαδικτύου. Οι ιστότοποι που χρησιμοποιήθηκαν είναι οι εξής: www.uefa.com www.skroutz.gr www.nooz.gr www.sourceforge.net www.sport-fm.gr Η πειραματική διαδικασία περιλαμβάνει το crawling κάθε ιστότοπου με τον WebSphinx και για κάθε ιστότοπο που επισκέπτεται ο WebSphinx να εκτελείται και ο JxSPhinx για να βρεθεί η ποσοτική διαφορά των συνδέσμων αλλά και η ποιοτική διαφορά στο προβαλλόμενο περιεχόμενο στο χρήση σε σχέση με αυτό το οποίο αποκτά εκτίμηση ένας crawler ότι υπάρχει σε μια σελίδα. Έτσι, για κάθε ένα από τα domains διατηρούνται τα εξής στοιχεία: Page visits: ο αριθμός των σελίδων που επισκέφτηκαν WebSphinx Links: ο αριθμός συνδέσμων που βρήκε ο WebSphinx για τα αντίστοιχα Page Visits. JxSPhinx Links: ο αριθμός συνδέσμων που βρήκε ο JxSPhinx για τα αντίστοιχα Page Visits. Διαφορά: η διαφορά ανάμεσα στον αριθμό των συνδέσμων που βρήκε ο WebSphinx και ο JxSPhinx για τα αντίστοιχα Page Visits. 77

Union s Similarity: η ομοιότητα ανάμεσα στο σύνολο των συνδέσμων που βρήκε ο WebSphinx αλλά και ο JxSPhinx. NotSameLinks: ο αριθμός των συνδέσμων που υπάρχουν στο σύνολο των συνδέσμων του JxSPhinx και δεν βρέθηκαν στο σύνολο του WebSphinx. HasJavaScript: ο αριθμός σελίδων που διαθέτουν JavaScript. HasMetaKeywords: ο αριθμός σελίδων που διαθέτουν TagMetaKeywords. HasMetaRobot: ο αριθμός σελίδων που διαθέτουν TagMetaRobot. HasMetaDescription: ο αριθμός σελίδων που διαθέτουν TagMetaDescription. 78

6.2 Αποτελέσματα πειραμάτων To μηχάνημα που χρησιμοποιικηκε για την παρακάτω χαρακτηριστικά: πραγματοποίηση των πειραμάτων είχε τα Επεξεργαστής: Intel ( R ) Core ( TM )i7 CPU RAM: 6.00 GB System: Windows 7 Ultimate 64-bit Να τονιστεί πως λόγω χρονικών περιορισμών και υψηλής χρονικής απαίτησης εκτέλεσης του μηχανισμού, τα πειράματα που πραγματοποιήθηκαν είναι περιορισμένης έκτασης. www.sourceforge.net Πίνακας 6 Αποτελέσματα πειραμάτων για το sourceforge.net PageVisits WebSphinx Links JxSPhinx Links Διαφορά 250 30851 46003 15152 500 56229 91177 34948 750 79004 131522 52518 1000 104021 176206 72185 1250 130155 222986 92831 1500 154890 267125 112235 1750 180621 312936 132315 2000 206732 359739 153007 2250 232625 406192 173567 2500 259108 453765 194657 2750 285717 493165 207448 3000 310566 518514 207948 3250 334241 542689 208448 3500 358793 567741 208948 3750 385172 594620 209448 4000 411584 621532 209948 4250 438390 648838 210448 4500 465930 676878 210948 4750 492987 704435 211448 5000 519254 731202 211948 5250 546342 758790 212448 5500 573340 786288 212948 5750 598891 812339 213448 6000 629190 843138 213948 6250 660904 875352 214448 6500 690452 905400 214948 79

Πίνακας 7 Αποτελέσματα πειραμάτων για το sourceforge.net PageVisits Union s Similarity NotSameLinks 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 6250 6500 0,670630176 0,61670158 0,600690379 0,590337446 0,583691353 0,579840898 0,577181916 0,574672193 0,572697148 0,571018038 0,579353766 0,598953934 0,615897872 0,631965984 0,647761596 0,662208865 0,675654015 0,68835152 0,6998332 0,710137554 0,720017396 0,729173026 0,737242703 0,746247945 0,755015125 0,762593329 14902 34698 52268 71935 92581 11985 132065 152757 173317 194407 207197 207697 208197 208697 209197 209697 210197 210697 211197 211697 212145 212689 213111 215699 216001 217100 Πίνακας 8 Αποτελέσματα πειραμάτων για το sourceforge.net PageVisits HasJavaScript HasMetaKeywords HasMetaRobot HasMetaDescription 250 248 21 51 108 500 498 42 201 216 750 748 63 376 324 1000 998 84 571 432 1250 1248 105 785 540 1500 1498 126 977 648 1750 1748 147 1212 756 2000 1998 168 1416 864 2250 2248 189 1609 972 2500 2498 210 1809 1080 2750 2748 231 1992 1188 3000 2998 252 2119 1296 3250 3248 273 2389 1404 80

3500 3498 294 2606 1512 3750 3798 315 2819 1620 4000 3998 336 3034 1728 4250 4248 357 3255 1836 4500 4498 378 3467 1944 4750 4748 399 3681 2052 5000 4998 420 3894 2160 5250 5248 441 4118 2268 5500 5498 462 4314 2376 5750 5748 483 4535 2484 6000 5998 504 4723 2592 6250 6246 525 4803 2700 6500 6495 546 4913 2808 1000000 900000 800000 700000 600000 500000 400000 300000 WSLinks JXLinks 200000 100000 0 Διάγραμμα 3 Αριθμός συνδέσμων των WebSphinx και JxSPhinx για το www.sourceforge.net συνάρτηση των επισκεπτόμενων σελίδων 81

250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 6250 6500 Ανάπτυξη μηχανισμού διάσχισης του διαδικτύου (Web crawler) με βάση το προβαλλόμενο 0,9 0,8 0,7 0,6 0,5 0,4 0,3 0,2 0,1 0 Union's Similarity Διάγραμμα 4 Ομοιότητα του συνόλου συνδέσμων για τον www.sourceforge.net συνάρτηση των επισκεπτόμενων σελίδων 250000 Διαφορα 200000 150000 100000 50000 0 250 750 1250 1750 2250 2750 3250 3750 4250 4750 5250 5750 6250 Διάγραμμα 5 Διαφορά του αριθμού συνδέσμων των δυο crawler συνάρτηση των επισκεπτόμενων σελίδων για το sourceforge.net 82

250 750 1250 1750 2250 2750 3250 3750 4250 4750 5250 5750 6250 Ανάπτυξη μηχανισμού διάσχισης του διαδικτύου (Web crawler) με βάση το προβαλλόμενο 7000 6000 5000 4000 3000 2000 HasJavascript HasMetaKeywords HasMetaRobot HasMetaDescription 1000 0 Διάγραμμα 6 Ποσοτικά χαρακτηριστικά μεταδεδομένων συνάρτηση των επισκεπτόμενων σελίδων για το www.sourceforge.net 250000 NotSameLinks 200000 150000 100000 50000 0 250 750 1250 1750 2250 2750 3250 3750 4250 4750 5250 5750 6250 Διάγραμμα 7 Αριθμός ανόμοιων συνδέσμων των συνάρτηση των επισκεπτόμενων σελίδων για το www.sourceforge.net 83

www.uefa.com Πίνακας 9 Αποτελέσματα πειραμάτων για το uefa.com PageVisits WebSphinx Links JxSPhinx Links Διαφορά 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 16086 30460 49104 65089 79613 93613 107613 121613 135613 149613 163613 177613 191613 205613 219613 233613 247607 261601 275601 289601 303601 317601 331601 345601 27451 52574 83317 110419 135722 160222 184722 209222 233722 258222 282722 307222 331722 356222 380722 405222 429688 454158 478654 503154 527654 552154 576654 601154 11365 22114 34213 45330 56109 66609 77109 87609 98109 108609 119109 129609 140109 150609 161109 171609 182081 192557 203053 213553 224053 234553 245053 255553 Πίνακας 10 Αποτελέσματα πειραμάτων για το uefa.com PageVisits 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 Union s Similarity 0,585989581 0,579373835 0,589363515 0,589472826 0,586588762 0,584270575 0,582567317 0,581262965 0,580232071 0,579396798 0,578706291 0,578125915 84

3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 0,57763127 0,577204665 0,576832965 0,576506211 0,576248348 0,576013194 0,575783342 0,575571296 0,575378942 0,575203657 0,575043267 0,57489595 Πίνακας 11 Αποτελέσματα πειραμάτων για το uefa.com PageVisits HasJavaScript HasMetaRobot 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 250 500 750 999 1249 1499 1749 1999 2249 2499 2749 2999 3249 3499 3749 3999 4249 4499 4749 4999 5249 5499 5749 5999 242 492 742 991 1241 1491 1741 1991 2241 2491 2741 2991 3241 3491 3741 3991 4241 4491 4741 4991 5241 5491 5741 5991 85

250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 Ανάπτυξη μηχανισμού διάσχισης του διαδικτύου (Web crawler) με βάση το προβαλλόμενο 700000 600000 500000 400000 300000 200000 WSLinks JXLinks 100000 0 Διάγραμμα 8 Αριθμός συνδέσμων των WebSphinx και JxSPhinx για το www.uefa.com συνάρτηση των επισκεπτόμενων σελίδων 0,595 Union's Similarity 0,59 0,585 0,58 0,575 0,57 0,565 Διάγραμμα 9 Ομοιότητα του συνόλου συνδέσμων για τον www.uefa.com συνάρτηση των επισκεπτόμενων σελίδων 86

250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 Ανάπτυξη μηχανισμού διάσχισης του διαδικτύου (Web crawler) με βάση το προβαλλόμενο 300000 Διαφορά 250000 200000 150000 100000 50000 0 Διάγραμμα 10 Διαφορά του αριθμού συνδέσμων των δυο crawler συνάρτηση των επισκεπτόμενων σελίδων για το www.uefa.com 7000 6000 5000 4000 3000 2000 HasMetaRobot HasJavascript 1000 0 Διάγραμμα 11 Αριθμός σελίδων που έχουν Javascript και το μεταδεδομένο Robot συνάρτηση των επισκεπτόμενων σελίδων για το www.uefa.com 87

www.skroutz.gr Πίνακας 12 Αποτελέσματα πειραμάτων για το skroutz.gr PageVisits WebSphinx Links JxSPhinx Links Διαφορά 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 6250 6500 38304 73146 105990 140886 174872 209444 243870 278914 313110 346618 379372 414804 448348 482716 517400 550814 586951 623186 659290 694892 727472 760063 792663 825271 852148 852148 66750 128066 187056 248835 309383 370425 431121 492677 553431 613305 671720 733833 793765 854743 916191 975823 1038631 1101988 1165162 1227606 1286027 1344519 1403026 1461516 1509736 1509736 28446 54920 81066 107949 134511 160981 187251 213763 240321 266687 292348 319029 345417 372027 398791 425009 451680 478802 505872 532714 558555 584456 610363 636245 657588 657588 Πίνακας 13 Αποτελέσματα πειραμάτων για το skroutz.gr PageVisits 250 500 750 1000 1250 1500 1750 2000 2250 2500 Union s Similarity 0,573842697 0,571158621 0,56662176 0,56618241 0,565228212 0,565415401 0,56566486 0,566119385 0,565761585 0,565164152 88

2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 6250 6500 0,56477699 0,565256673 0,5648372 0,564749872 0,564729407 0,564460973 0,565119855 0,565510695 0,56583548 0,566054581 0,565673971 0,565304767 0,564966722 0,564667783 0,564435107 0,564435107 Πίνακας 14 Αποτελέσματα πειραμάτων για το skroutz.gr PageVisits HasJavaScript HasMetaKeywords HasMetaRobot HasMetaDescription 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 6250 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 6206 247 497 747 997 1247 1497 1747 1997 2247 2497 2747 2997 3247 3497 3747 3997 4247 4497 4747 4997 5247 5497 5747 5997 6202 242 492 742 992 1242 1492 1742 1992 2242 2492 2742 2992 3242 3492 3742 3992 4242 4492 4742 4992 5242 5492 5742 5992 6197 247 497 747 997 1247 1497 1747 1997 2247 2497 2747 2997 3247 3497 3747 3997 4247 4497 4747 4997 5247 5497 5747 5997 6202 89

1600000 1400000 1200000 1000000 800000 600000 WSLinks JXLinks 400000 200000 0 Διάγραμμα 12 Αριθμός συνδέσμων των WebSphinx και JxSPhinx για το www.skroutz.gr Συνάρτηση των επισκεπτόμενων ιστοσελίδων 0,576 0,574 0,572 0,57 0,568 0,566 0,564 0,562 0,56 0,558 Union's Similarity 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Διάγραμμα 13 Ομοιότητα του συνόλου συνδέσμων για τον www.skroutz.gr συνάρτηση των επισκεπτόμενων σελίδων 90

250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 6250 Ανάπτυξη μηχανισμού διάσχισης του διαδικτύου (Web crawler) με βάση το προβαλλόμενο 700000 Διαφορά 600000 500000 400000 300000 200000 100000 0 250 750 1250 1750 2250 2750 3250 3750 4250 4750 5250 5750 6250 Διάγραμμα 14 Διαφορά του αριθμού συνδέσμων των δυο crawler συνάρτηση των επισκεπτόμενων σελίδων για το www.skroutz.gr 7000 HasJavascript 6000 5000 4000 3000 2000 1000 0 Διάγραμμα 15 Αριθμός σελίδων που διαθέτουν javascript για το www.skroutz.gr συνάρτηση των επισκεπτόμενων σελίδων 91

250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 6250 Ανάπτυξη μηχανισμού διάσχισης του διαδικτύου (Web crawler) με βάση το προβαλλόμενο 7000 HasMetaKeywords 6000 5000 4000 3000 2000 1000 0 Διάγραμμα 16 Αριθμός σελίδων που διαθέτουν το μεταδεδομένο keywords για το www.skroutz.gr συνάρτηση των επισκεπτόμενων σελίδων 700000 NotSameLinks 600000 500000 400000 300000 200000 100000 0 250 750 1250 1750 2250 2750 3250 3750 4250 4750 5250 5750 6250 Διάγραμμα 17 Αριθμός ανόμοιων συνδέσμων των συνάρτηση των επισκεπτόμενων σελίδων για το www.skroutz.gr 92

www.sport-fm.gr Πίνακας 15 Αποτελέσματα πειραμάτων για sport-fm.gr PageVisits WebSphinx Links JxSPhinx Links Διαφορά 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 27608 64997 92180 122163 152146 182118 212099 242100 272103 302099 332045 362020 391999 421970 451917 481885 511798 541729 570718 600212 629248 658828 688452 717847 38957 91261 128471 168863 209225 249593 289953 330329 370728 411115 451450 491815 532198 572566 612914 653278 693580 733896 772968 812746 851922 891797 931665 971277 11349 26264 36291 46700 57079 67475 77854 88229 98625 109016 119405 129795 140199 150596 160997 171393 181782 192167 202250 212534 222674 232969 243213 253430 Πίνακας 16 Αποτελέσματα πειραμάτων για sport-fm.gr PageVisits 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 Union s Similarity 0,7086788 0,712210035 0,717516015 0,723444449 0,727188434 0,729659886 0,731494415 0,732905679 0,733969379 0,734828454 0,735507808 0,73608979 0,73656609 93

3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 0,73698054 0,737325302 0,737641555 0,737907667 0,738154997 0,738346219 0,738498867 0,738621611 0,738764539 0,738948012 0,739075465 Πίνακας 17 Αποτελέσματα πειραμάτων για sport-fm.gr PageVisits HasJavaScript HasMetaKeywords HasMetaRobot HasMetaDescription 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 243 484 720 970 1220 1470 1720 1970 2220 2470 2720 2970 3220 3470 3720 3970 4220 4470 4719 4969 5216 5466 5716 5966 181 366 368 368 368 368 368 368 368 368 368 368 368 368 368 368 368 368 368 368 372 372 372 372 71 243 326 447 570 692 814 939 1062 1186 1307 1429 1550 1672 1792 1914 2031 2104 2137 2172 2213 2249 2284 2317 184 374 591 841 1091 1341 1591 1841 2091 2341 2591 2841 3091 3341 3591 3841 4091 4339 4588 4838 5069 5319 5569 5819 94

250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 Ανάπτυξη μηχανισμού διάσχισης του διαδικτύου (Web crawler) με βάση το προβαλλόμενο 1200000 1000000 800000 600000 400000 WSLinks JXLinks 200000 0 Διάγραμμα 18 Αριθμός συνδέσμων των WebSphinx και JxSPhinx για το www.sport-fm.gr 0,745 0,74 0,735 0,73 0,725 0,72 0,715 0,71 0,705 0,7 0,695 0,69 Union's Similarity Διάγραμμα 19 Ομοιότητα του συνόλου συνδέσμων για τον www.sport-fm.gr συνάρτηση των επισκεπτόμενων σελίδων 95

250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 5250 5500 5750 6000 Ανάπτυξη μηχανισμού διάσχισης του διαδικτύου (Web crawler) με βάση το προβαλλόμενο 300000 Διαφορά 250000 200000 150000 100000 50000 0 Διάγραμμα 20 Διαφορά του αριθμού συνδέσμων των δυο crawler συνάρτηση των επισκεπτόμενων σελίδων για το www.sport-fm.gr 7000 6000 5000 4000 3000 2000 HasJavascript HasMetaKeywords HasMetaRobot HasMetaDescription 1000 0 1 3 5 7 9 11 13 15 17 19 21 23 Διάγραμμα 21 Ποσοτικά χαρακτηριστικά μεταδεδομένων συνάρτηση των επισκεπτόμενων σελίδων για το www.sport-fm.gr 96

www.nooz.gr Πίνακας 18 Αποτελέσματα πειραμάτων για nooz.gr PageVisits Union s Similarity NotSameLinks 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 0,620289344 0,619994222 0,617649956 0,617050569 0,617261016 0,617692571 0,616133533 0,616617521 0,616277546 0,616153765 0,615920203 0,616051661 0,616077668 0,616680725 0,616863141 0,616452527 0,616052737 13141 40981 71047 97570 122506 151525 182571 212288 238267 265265 292344 319194 344512 372015 398654 427363 443360 Πίνακας 19 Αποτελέσματα πειραμάτων για nooz.gr PageVisits HasJavaScript HasMetaKeywords HasMetaRobot HasMetaDescription 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 243 493 743 993 1243 1493 1743 1993 2243 2493 2743 2993 3243 3493 3743 3993 4118 180 430 680 930 1180 1430 1680 1930 2180 2430 2680 2930 3180 3430 3680 3930 4055 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 203 453 703 953 1203 1453 1703 1953 2203 2453 2703 2953 3203 3453 3703 3953 4078 97

250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 Ανάπτυξη μηχανισμού διάσχισης του διαδικτύου (Web crawler) με βάση το προβαλλόμενο 1400000 1200000 1000000 800000 600000 400000 WSLinks JXLinks 200000 0 Διάγραμμα 22 Αριθμός συνδέσμων των WebSphinx και JxSPhinx για το www.nooz.gr 0,621 0,62 0,619 0,618 0,617 0,616 0,615 0,614 0,613 Union's Similarity 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 3750 4000 4250 Διάγραμμα 23 Ομοιότητα του συνόλου συνδέσμων για τον www.nooz.gr συνάρτηση των επισκεπτόμενων σελίδων 98

500000 450000 400000 350000 300000 250000 200000 150000 100000 50000 0 Διαφορά Διάγραμμα 24 Διαφορά του αριθμού συνδέσμων των δυο crawler συνάρτηση των επισκεπτόμενων σελίδων για το www.nooz.gr 500000 450000 400000 350000 300000 250000 200000 150000 100000 50000 0 NotSameLinks Διάγραμμα 25 Αριθμός ανόμοιων συνδέσμων των συνάρτηση των επισκεπτόμενων σελίδων για το www.nooz.gr 99

4500 4000 3500 3000 2500 2000 1500 1000 500 0 HasJavascript Διάγραμμα 26 Αριθμός των σελίδων που κάνουν χρήση Javascript συνάρτηση των επισκεπτόμενων σελίδων για το www.nooz.gr 6.3 Αξιολόγηση Αποτελεσμάτων ενδεικτικών πειραμάτων Ουσιαστικά μπορούμε να χωρίσουμε τα πειράματά μας σε 5 σετ. Κάθε σετ πειραμάτων αντιστοιχίζεται με ένα domain για το οποίο εκτελούμε μια διαδικασία crawling τόσο με τον WebSphinxόσο και με τον JxSPhinx. Η αξιολόγηση των πειραμάτων θα γίνει για κάθε ιστότοπο ξεχωριστά. www.sourceforge.net Έχοντας τερματιστεί η διαδικασία crawling παρατηρούμε ότι ο JxSPhinx έχει εντοπίσει 905400 συνδέσμους σε αντίθεση με τον WebSphinx ο οποίος έχει εντοπίσει 690452 συνδέσμους. Διαπιστώνουμε ότι υπάρχει μια διαφορά 215000 συνδέσμων. Από αυτούς τους συνδέσμους ένα ποσοστό είναι ίδιο ενώ υπάρχει και σημαντικός αριθμός συνδέσμων που υπάρχουν στο σύνολο που έχει εντοπίσει ο JxSPhinxκαι δεν έχει εντοπίσει ο WebSphinx. Οι δυο crawler επισκέφτηκαν 6500 σελίδες και διαπιστώθηκε ομοιότητα του συνόλου των συνδέσμων της τάξης του 76%. Το υπόλοιπο 24% αποτελεί περιεχόμενο που είναι ορατό μόνο από τον ανθρώπινο παράγοντα και ουσιαστικά δεν μπορεί να αποθηκευτεί από έναν crawler. Γενικά η καμπύλη ομοιότητας παρουσιάζει μια σταθερή τάση κατά την διάρκεια των πειραμάτων. Οι περισσότερες ιστοσελίδες εμπεριέχουν κώδικα javascript ενώ όσο αναφορά τα μεταδεδομένα που χρησιμοποιούν δίνεται βάση κυρίως στην τοποθέτηση κατά κύριο λόγο των μεταδεδομένων Description,Robot σε σχέση με το μεταδεδομένο Keywords που η παρουσία του υστερεί. www.uefa.com Ξεκινώντας την διαδικασία crawling με ρίζα την σελίδα www.uefa.com διαπιστώνουμε ότι έχοντας επισκεφτεί 6000 σελίδες ο JxSPhinx έχει εντοπίσει 601154 συνδέσμους σε αντίθεση 100

με τον WebSphinx που εντόπισε 345601 συνδέσμους. Παρατηρούμε δηλαδή μια ομοιότητα των δυο συνόλων που εμπεριέχουν τους συνδέσμους που βρήκε ο κάθε crawler της τάξης του 57%. Ποιοτικά αυτό μεταφράζεται σε μια αριθμητική διαφορά της τάξης των 255000 συνδέσμων. Αυτό μπορεί να ερμηνευθεί ως απόρροια του γεγονότος της ύπαρξης δυναμικών τεχνολογιών στον εν λόγω ιστότοπο. Αποτέλεσμα είναι η ύπαρξη μεγάλου όγκου δυναμικού περιεχομένου που παραμένει κρυφό από τις μηχανές διάσχισης. Όπως και στο προηγούμενο set έτσι και σε αυτό υπάρχει σταθερή τιμή της ομοιότητας των συνόλων συνδέσμων. Όσο αναφορά την τεχνολογία javascript έχουμε ευρεία χρήση της και εδώ που αγγίζει το 99,9%. Τέλος η χρήση μεταδεδομένων επικεντρώνεται μόνο στον καθορισμό του MetaRobot. Η χρήση των μεταδεδομένων description και Keywords είναι πολύ μικρή. www.skroutz.gr Η πειραματική διαδικασία έδειξε ότι στο skroutz.grτο σύνολο που δίνει ως έξοδο ο WebSphinx αποτελεί το 56% του συνόλου του JxSPhinx. Για να γίνουμε πιο ακριβείς ο JxSPhinx εντοπίζει στη συγκεκριμένη πειραματική διαδικασία 1509000 συνδέσμους σε αντίθεση με τον WebSphinx που εντοπίζει 850000. Πρόκειται πραγματικά για ένα μεγάλο σύνολο συνδέσμων με αρκετό πληροφοριακό περιεχόμενο που μένει ουσιαστικά αχαρτογράφητο από τον απλή έκδοση ενός crawler.μέσα από την επίσκεψη 6500 σελίδων παρατηρείται μια διαφορά 650000 συνδέσμων που ουσιαστικά δεν μπορούν να εντοπιστούν από τον WebSphinx. To 95% των σελίδων χρησιμοποιεί την τεχνολογία javascript για την προβολή περιεχομένου ενώ ταυτόχρονα ακολουθεί όλες τις τεχνικές που επιτάσσει το Search Engine Optimization καθώς το 94-96 των σελίδων που επισκέφτηκαν οι crawlerδιέθεταν δηλώσεις των μεταδεδομένων που εξετάζουμε. www.nooz.gr Εξετάζοντας το nooz.gr έχοντας επισκεφτεί 4500 σελίδες παρατηρούμε την ανίχνευση περίπου 1117000 συνδέσμων από τον JxSPhinx και 725000συνδέσμων από τον WebSphinx. Αυτό μεταφράζεται σε ένα ποσοστό ομοιότητας των δυο συνόλων συνδέσμων της τάξης του 61%. Επιπλέον 441000 βρήκε ο JxSPhinx που δεν μπόρεσαν να εντοπισθούν από τον WebSphinx. Από τις σελίδες που επισκέφτηκαν οι crawler οι 4118 κάνουν χρήση Javascript, 4055 χρησιμοποιούν το μεταδεδομένο keywords ενώ 4078 το μεταδεδομένο Description. Τέλος 66 μόνο σελίδες χρησιμοποιούν το μεταδεδομένο Robot. www.sport-fm.gr Τα πειράματα για το sport-fm.gr έδειξαν ότι ένα σχετικά υψηλό ποσοστό των συνδέσμων εντοπίζεται και από τους 2 crawler. Το ποσοστό ομοιότητας των συνόλων που εμπεριέχουν τους συνδέσμους είναι 71%. Ο JxSPhinxεντόπισε 971000 συνδέσμους έχοντας επισκεφτεί 6000 σελίδες ενώ ο WebSphinxεντόπισε 717000 συνδέσμους. Η χρήση Javascript γίνεται στο 99,4% των σελίδων που έχουν επισκεφτεί οι δύο crawler ενώ των μεταδεδομένων Robot, Description, Keywordsσε ποσοστό 38%, 97%, 6% αντίστοιχα. 101

7. Συμπεράσματα-Μελλοντική εργασία 7.1 Σύνοψη - Συμπεράσματα Η διπλωματική αυτή ξεκίνησε ως μια προσπάθεια προσέγγιση του SEO εξετάζοντάς το από την σκοπιά του Headless Browsing. Δεχόμενοι το γεγονός ότι πλέον οι μηχανές αναζήτησης έχουν γίνει αναπόσπαστο κομμάτι της καθημερινότητας μας προσπαθήσαμε να προτείνουμε μια τεχνική η οποία ουσιαστικά θα συμμετέχει στην βελτιστοποίηση της κατάταξης ενός ιστότοπου. Σε αυτό κατατείνει το γεγονός ότι χαρτογραφώντας για την εκάστοτε ιστοσελίδα το ορατό από άνθρωπο περιεχόμενο η αναζήτηση ουσιαστικά θα έχει ως αποτέλεσμα μια πιο ανθρωποκεντρική προσέγγιση. Ο αρχικός στόχος της διπλωματικής ήταν να κατασκευάσουμε έναν crawler ο οποίος μπορεί να αναγνωρίσει περιεχόμενα πιο δυναμικά σε σχέση με έναν απλό crawler. Με βάση τη λογική αυτή ο στόχος πραγματοποιήθηκε κατασκευάζοντας τον JxSPhinx ο οποίος ακολουθεί τον μηχανισμό crawling του JxSPhinx ενώ χρησιμοποιεί τον JXBroswer για να μπορέσει να εκμεταλλευτεί όλες τις δυνατότητες που παρέχει ένας Headless Browser. Πραγματοποιήθηκε μια σειρά πειραμάτων συγκρίνοντας τον αριθμό των συνδέσμων οπότε και κατ επέκταση του ανθρώπινου προβαλλόμενου περιεχομένου σε σχέση με αυτό που ανιχνεύει ένας απλός crawler. Τα πειράματα έδειξαν ότι υπάρχει διαφορά ανάμεσα στο περιεχόμενο το οποίο βλέπει ο ανθρώπινος παράγοντας σε σχέση με έναν crawler. Η ομοιότητα αυτή ποικίλει ανάλογα με τους στόχους και το σκοπό που έχει θέσει ένας ιστότοπος. Αυτό που μπορεί να διασαφηνιστεί με βεβαιότητα είναι ότι όσο περισσότερο μπορούμε να γνωρίζουμε για το πραγματικό περιεχόμενο μιας σελίδας τόσο αποτελεσματικότερα μπορούν να γίνουν τα αποτελέσματα αναζήτησης. 7.2 Μελλοντική εργασία Είναι σαφές ότι ο σκοπός της διπλωματικής ήταν η εξαγωγή ορισμένων συμπερασμάτων πάνω στο crawling χρησιμοποιώντας το Headless Browsing. Βασικός στόχος ήταν η επιβεβαίωση της αρχικής μας υπόθεσης ότι δηλαδή διαφέρει το προβαλλόμενο περιεχόμενο μιας σελίδας σε σχέση με αυτό που εντοπίζουν οι crawler. Αποκτώντας πλέον μια πιο ποσοτική εικόνα θα θέλαμε μελλοντικά να προσεγγίσουμε τον εν λόγω τομέα και ποιοτικά εισάγοντας τεχνικές σημασιολογικής ανάλυσης του περιεχομένου της σελίδας. Για να γίνουμε πιο σαφής ως μελλοντική εργασία και επέκταση του JxSPhinx προτείνονται: WebSphinx polite crawling όπως αναφέρεται στο προηγούμενο κεφάλαιο Open source διάθεση του JxSPhinx Καλύτερη διαχείριση μνήμης Σημασιολογική ανάλυση περιεχομένου ιστοσελίδων Βελτιστοποίηση μηχανισμού parsing του DOM περιεχομένου 102

8. Παράρτημα 8.1 Polite Crawling για τον WebSphinx Ένα από τα σημαντικότερα στοιχεία που πρέπει να υιοθετεί η υλοποίηση ενός crawler είναι η σωστή διαχείριση της μνήμης και των πόρων. Με δεδομένο ότι ο WebSphinx παρέχει ένα σημαντικό αριθμό λειτουργιών όπως πολυνηματική επεξεργασία και υιοθέτηση του προτύπου robot exclusion. Ωστόσο, έχει ένα σημαντικό πρόβλημα: memory leaks (διαρροές μνήμης), δηλαδή χρήση μνήμης η οποία στη συνέχεια δεν μπορεί να επιστραφεί πίσω στο λειτουργικό σύστημα [31]. Όπως αναφέραμε και πιο πάνω η τρέχουσα έκδοση του WebSphinx μπορεί να επισκεφτεί μερικές χιλιάδες σελίδες εξαιτίας αυτού του προβλήματος. Στην συνέχεια θα αναπτυχθούν μερικές τεχνικές που μπορούν να παρέχουν μερική επίλυση το συγκεκριμένου προβλήματος. Αρχιτεκτονική Στην συνέχεια ακολουθεί ένα διάγραμμα που υποδεικνύει πως λειτουργεί το politeness για τον WebSphinx crawler. Εικόνα 39. Αρχιτεκτονική Polite Crawling 103

Crawler (run ()) Όταν καλείται η μέθοδος run τότε ο crawler δημιουργεί, αρχικοποιεί τα νήματα και τις ουρές αποθήκευσης(fetch queues) και αποστέλλει ένα root URL για να ξεκινήσει το crawling. Κάθε φορά που ο crawler επισκέπτεται πάνω από 1000 σελίδες αποθηκεύει τα τρέχοντα στατιστικά στο δίσκο. Αποθηκεύει 10 στατιστικά στοιχεία, για τις πρώτες 10 χιλιάδες σελίδες τα στατιστικά αποθηκεύονται στο αρχείο stats0.txt [31]. Τα στατιστικά από τις επόμενες 10000 χιλιάδες σελίδες θα αποθηκευτούν στο stats1.txt και το ίδιο ισχύει και για τα επόμενα στατιστικά. Δεδομένου ότι ο crawler μπορεί να σταματήσει με διάφορα προβλήματα, όπως λάθη λόγω έλλειψης μνήμης ή απρόσμενες εξαιρέσεις, ο crawler αποθηκεύει το περιεχόμενο του περιοδικά στο δίσκο έτσι ώστε όταν τρέξει το πρόγραμμα την επόμενη φορά να συνεχίσει να τρέχει με είσοδο την αποθηκευμένη πληροφορία και να μην χρειάζεται αν ξεκινήσει η εκτέλεση από την αρχή. Worm Fetch μέθοδος Η Worm είναι μια μέθοδος που κληρονομεί την κλάση thread της java. O crawler δημιουργεί worms και εκτελεί την μέθοδο run που υλοποιείται στην αντίστοιχη κλάση. Τα αντικείμενα worm καλούν την μέθοδο fetch, η οποία αποτελεί έναν ατέρμονα βρόγχο. Κάθε worm αντικείμενο στην μέθοδο του fetch παίρνει ένα link από την ουρά fetchqueue για crawling, αποθηκεύει την σελίδα στον δίσκο και εξάγει τα links από την εκάστοτε σελίδα. Όταν ένα worm παίρνει ένα Link για να ξεκινήσει το crawling ένα μετρητής χρόνου αρχικοποιείται και το worm προσπαθεί να αποθηκεύσει την σελίδα στον δίσκο. Εάν η χρονική περίοδος παρέλθει πριν να τελειώσει η αποθήκευση της σελίδας στον δίσκο το worm διαγράφεται από την μνήμη και ένα καινούριο worm συνεχίζει την διαδικασία του Crawling. Αποθήκευση σελίδων Υπάρχει ένας μεγάλος αριθμός εξαιρέσεων που μπορεί να προκύψει κατά την διαδικασία αποθήκευσης μιας σελίδας στον δίσκο. Μια από αυτές έχει να κάνει με το robot exclusion: υπάρχουν σελίδες όπου τα robot δεν πρέπει να τις κάνουν crawl, έτσι η σελίδα δεν θα γίνει crawl και θα αρθεί μια εξαίρεση. Επίσης πολλές εξαιρέσεις δικτύου μπορούν να προκύψουν. Όλες αυτές οι εξαιρέσεις μπορούν να ανιχνευθούν και το worm μπορεί να συνεχίσει παίρνοντας το επόμενο Link από την λίστα. Όταν ένα worm κατεβάσει επιτυχώς μια σελίδα αυτή αναλύεται και αποθηκεύεται στην κλάση Link[ 31]. Στην συνέχεια καλείται η μέθοδος process για να γίνει επεξεργασία της τρέχουσας σελίδας. Όταν ολοκληρωθεί η επεξεργασία της σελίδας το περιεχόμενο αυτής αποδεσμεύεται από τη μνήμη και το wormεπανέρχεται στην αρχή του βρόγχου με σκοπό να πάρει ένα νέο link για να συνεχιστεί η διαδικασία του crawling. 104

Process και Expand μέθοδοι Η μέθοδος expand ανακτά όλα τα Link από μια σελίδα και αρκετοί έλεγχοι γίνονται στα links μέχρι να αποσταλούν στις fetch ουρές. Το worm αρχικά εξετάζει εάν έχει ξανασυναντήσει το Link. Στην συνέχεια εξετάζει εάν πρέπει να επισκεφτεί το link μέσω της κατάλληλης μεθόδου. Τέλος ελέγχει το βάθος του link μήπως έχει ξεπεραστεί το μέγιστο επιτρεπτό βάθος των παραμέτρων που γίνεται το crawling. Όταν το link περάσει επιτυχώς όλους τους ελέγχους αποστέλλεται στην κατάλληλη ουρά. Visited και ShouldVisit μέθοδοι Οι πληροφορίες για τα URLs των επισκεπτόμενων σελίδων κρατιούνται μέσω της κλάσης TreeSet. Η αποθήκευση των URL ως αλφαριθμητικά απαιτεί αρκετό χώρο στη μνήμη ωστόσο έχουμε μια CRC32 τιμή για κάθε URL. Ο έλεγχος για το αν πρέπει ο crawler να επισκεφτεί ένα url είναι πολύ σημαντικός. Εάν ο crawler σχεδιάστηκε για να επισκεφτεί μόνο το domain του auth.gr πρέπει για το url να εξετάζεται εάν εμπεριέχει το auth.gr. O crawler μπορεί να επισκεφτεί διαφορετικό hostname μέσω της μεθόδου sethostroot. Ο λόγος που γίνεται έλεγχος της πόρτα 80 που βρίσκεται μια σελίδα είναι ο εξής: Σελίδες που δεν βρίσκονται στην πόρτα 80 είναι διαφορετικού σκοπού οπότε δεν χρειάζεται να τις επισκεφτούμε. Επίσης πρέπει να ελέγχουμε την επέκταση των αρχείων. Για παράδειγμα εάν δεν επεξεργαζόμαστε αρχεία εικόνων δεν χρειάζεται ο crawler να επισκεφτεί ένα τέτοιο link(με κατάληξη.bmp ή jpg). Το ίδιο ισχύει και για link που τελειώνουν σε καταλήξεις.php,.jsp, οι οποίες δηλώνουν δυναμικές ιστοσελίδες. 8.2 Λεπτομερής ανάλυση της Βάσης Δεδομένων Jxspinx_page Εικόνα 40. Ο πίνακας JxSPhinx_page `id` : τα αποτελεί το πρωτεύων κλειδί του πίνακα και δηλώνει τον αύξοντα αριθμό της εγγραφής `url`:η URLδιεύθυνση που αντιστοιχεί για κάθε σελίδα επίσκεψης του JxSPhinx `authority` :η authorityπου ανήκει η συγκεκριμένη σελίδα `title` : ο τίτλος της σελίδας 105

`description`:η περιγραφή που υπάρχει για την τρέχουσα σελίδα έτσι όπως έχει οριστεί και μπορεί να βλέπει κάποιος χρήστης κατά την αναζήτηση στις διάφορες μηχανές `words: η διαδρομή προς το δίσκο για το αρχείο το οποίο κρατάει όλες τις λέξεις που εμπεριέχονται σε μια σελίδα `depth` :το βάθος που βρίσκεται η σελίδα στο δέντρο διάσχισης `base`: το base url από το οποίο μπορούμε να κατεβάσουμε την σελίδα `link_origin: ο σύνδεσμος ο οποίος δείχνει στην συγκεκριμένη σελίδα `parent_url`: το όνομα του Hostπου βρίσκεται το url `hasjavascript`:παίρνει τιμή trueή false ανάλογα με το αν περιέχει JavaScriptπεριεχόμενο η σελίδα `hasflash` :παίρνει τιμή trueή false ανάλογα με το αν περιέχει flash περιεχόμενο η σελίδα Jxspinx_page_links Εικόνα 41. O πίνακας JxSPhinx_page_links Page_id το id της σελίδας( από τον πίνακα Jxspinx_page)που βρίσκεται ο συγκεκριμένος σύνδεσμος Link:το όνομα του συνδέσμου JxSPhinx_tags Εικόνα 42. Ο πίνακας JxSPhinx_tags Page_id:το id της σελίδας( από τον πίνακα Jxspinx_page)που βρίσκεται ο συγκεκριμένος σύνδεσμος Keywords:το μεταδεδoμένο το οποίο περιέχει λέξεις κλειδιά για μια σελίδα Robots:το περιεχόμενο του μεταδεδομένου Robotγια μια σελίδα Description: τοtag description της σελίδας 106

webspinx_page Εικόνα 43. Ο πίνακας WebSphinx_page `id` : τα αποτελεί το πρωτεύων κλειδί του πίνακα και δηλώνει τον αύξοντα αριθμό της εγγραφής `url`:η URL διεύθυνση που αντιστοιχεί για κάθε σελίδα επίσκεψης του WebSphinx `authority` :η authorityπου ανήκει η συγκεκριμένη σελίδα `title` : ο τίτλος της σελίδας `description`:η περιγραφή που υπάρχει για την τρέχουσα σελίδα έτσι όπως έχει οριστεί και μπορεί να βλέπει κάποιος χρήστης κατά την αναζήτηση στις διάφορες μηχανές `words: η διαδρομή προς το δίσκο για το αρχείο το οποίο κρατάει όλες τις λέξεις που εμπεριέχονται σε μια σελίδα `depth` :το βάθος που βρίσκεται η σελίδα στο δέντρο διάσχισης `base`: το base url από το οποίο μπορούμε να κατεβάσουμε την σελίδα `link_origin: ο σύνδεσμος ο οποίος δείχνει στην συγκεκριμένη σελίδα `parent_url`: το όνομα του Hostπου βρίσκεται το url `hasjavascript`:παίρνει τιμή trueή false ανάλογα με το αν περιέχει JavaScriptπεριεχόμενο η σελίδα `hasflash` :παίρνει τιμή true ή false ανάλογα με το αν περιέχει flashπ εριεχόμενο η σελίδα webspinx_page_links Εικόνα 44. Ο πίνακας WebSphinx_page_links Page_id το id της σελίδας( από τον πίνακα Webspinx_page)που βρίσκεται ο συγκεκριμένος σύνδεσμος Link:το όνομα του συνδέσμου 107