π.χ. εδώ δίνεις την κανονική έκφραση, που επακριβώς μπορείς να μου αναλύσεις τι σημαίνει;
motivo = "<li class=\"klatest-subject\">\s*.*>([\w+\s*\.?]+)</a></li>"
Διαβάζοντας τον κώδικα της ιστοσελίδας, βρίσκουμε τα κοινά σημεία πριν και μετά τις επικεφαλίδες, οπότε:
Πριν την επικεφαλίδα βρίσκουμε αυτό:
<li class=\"klatest-subject\">\s*.*>
Το πραγματικό αλφαριθμητικό, που στην περίπτωση αυτή είναι
<li class="klatest-subject">
Παρτήρησε ότι έκανα escape τα διπλά εισαγωγικά, με ανάποδες κάθετες.
Στη συνέχεια με τους χαρακτήρες:
\s*.*, βρίσκουμε τα κενά και οποιοδήποτε άλλο χαρακτήρα και τέλος το
> συμβολίζει πραγματικό χαρακτήρα.
Μετά την επικεφαλίδα ακολουθεί το πραγματικό αλφαριθμητικό
</a></li>
Η πραγματική τώρα, εργασία γίνεται με αυτή την έκφραση:
Οι παρενθέσεις λένε στην python να ομαδοποιήσει (grouping) τα περιεχόμενα που βρίσκονται μέσα σ' αυτές. Μέσα στις αγκύλες ([]) βάζουμε αυτό που θέλουμε να βρούμε· δηλαδή:
- \w+ Έναν ή περισσότερους χαρακτήρες unicode.
- \s* που ακολουθούνται από μηδέν ή περισσότερα κενά.
- \.? και τέλος από μία ή καμμία τελεία. (πρόσεξε την ανάποδη κάθετο.)
Βέβαια μιλώντας γενικά θα μπορούσα να γράψω
(.*), δηλαδή να ψάξει για οποιονδήποτε χαρακτήρα.
Τώρα μια επεξήγηση των συμβόλων (μεταχαρακτήρες):
Τελεία (.): οποιοσδήποτε χαρακτήρας.
Αστεράκι (*): Ο προηγούμενος χαρακτήρας να εμφανίζεται μηδέν ή περισσότερες φορές.
Συν (+): Ο προηγούμενος χαρακτήρας να εμφανίζεται μία ή περισσότερες φορές.
Αγγλικό ερωτηματικό (?): Ο προηγούμενος χαρακτήρας να εμφανίζεται μία φορά ή καθόλου.
\w: Οποιοσδήποτε unicode, χαρακτήρας.
\s: Οποιοδήποτε κενό.
Περισσότερες πληροφορίες στο εγχειρίδιο, χρήσης.
Για το
vrethikan = re.findall(motivo, content)
όπως το έγραψες και εσύ και ο gravvanis.
Εγώ πάντως στην ιστοσελίδα που προσπαθώ να πάρω κάποια δεδομένα έχω ένα αρχικό πρόβλημα που νομίζω έχει να κάνει με την κωδικοποίηση, τι εννοώ; Δείτε εδώ.
Ψάξε την ιστοσελίδα, για την κωδικοποίησή της. Μπορεί πχ να είναι windows-1253, οπότε
content = str(f.read().decode('windows-1253'))