
Επειδή κανονικές εκφράσεις με τρομάζουν, Προσπαθώ να βρω έναν τρόπο για να αφαιρέσετε όλες τις ετικέτες HTML και να επιλύσουν HTML οντότητες από μια σειρά στην Python.

 
Φιλτράρετε τα ετικέτες HTML και την επίλυση των οντοτήτων σε python
===================================================================



Χρησιμοποιήστε [lxml](http://lxml.de/) η οποία είναι η καλύτερη βιβλιοθήκη xml / html για python.



```
import lxml.html
t = lxml.html.fromstring("...")
t.text_content()

```

Και αν απλά θέλετε να απολυμάνετε το βλέμμα html στο lxml.html.clean [μονάδα](http://lxml.de/lxmlhtml.html#cleaning-up-html)

 

Τι λέτε για την ανάλυση των δεδομένων HTML και εξαγωγή των δεδομένων με τη βοήθεια του αναλυτή;


Θα προσπαθήσουμε κάτι σαν συγγραφέα περιγράφεται στο [κεφάλαιο 8.3 στο βιβλίο Dive Into Python](http://diveintopython.net/html_processing/extracting_data.html) 

 

Αν και συμφωνώ με τον Lucas ότι η τακτική εκφράσεις δεν είναι όλα αυτά τρομακτικό, εξακολουθώ να πιστεύω ότι θα πρέπει να πάτε με ένα εξειδικευμένο πρόγραμμα ανάλυσης HTML. Αυτό οφείλεται στο γεγονός ότι το πρότυπο HTML είναι αρκετά τριχωτό (ειδικά αν θέλετε να αναλύσει αυθαίρετα «HTML» σελίδες που λαμβάνονται από το Διαδίκτυο) που θα πρέπει να γράψετε πολλά κώδικα για να χειριστεί τις υποθέσεις γωνία. Φαίνεται ότι [πύθωνας περιλαμβάνει μια έξω από το κουτί](http://docs.python.org/lib/module-htmllib.html) .


Θα πρέπει επίσης να ελέγξετε τις [συνδέσεις python για TidyLib](http://utidylib.berlios.de/) που μπορεί να καθαρίσει σπασμένα HTML, καθιστώντας το ποσοστό επιτυχίας της κάθε HTML parsing πολύ υψηλότερο.

 

Ίσως χρειαστεί κάτι πιο περίπλοκο από ό, τι μια κανονική έκφραση. Οι ιστοσελίδες έχουν συχνά αγκύλες που δεν είναι μέρος μιας ετικέτας, όπως αυτό:



```
 <div>5 < 7</div>

```

Απογύμνωση τις ετικέτες με την τυπική έκφραση θα επιστρέψει το string «5» και τη θεραπεία



```
 < 7</div>

```

ως ενιαία ετικέτα και ταινίες έξω.


Προτείνω αναζητούν ήδη γράψει κώδικα που το κάνει αυτό για σας. Έκανα μια αναζήτηση και βρήκα αυτό: <http://zesty.ca/python/scrape.html> Επίσης, μπορεί να επιλύσει HTML οντότητες.

 

Χρησιμοποιήστε [BeautifulSoup](http://www.crummy.com/software/BeautifulSoup/) ! Είναι ιδανικό για αυτό, όταν έχετε εισερχόμενη σήμανσης αμφίβολης αρετή και πρέπει να πάρετε κάτι λογικό από αυτό. Μόλις περάσει στο αρχικό κείμενο, εξαγάγετε όλες τις ετικέτες των χορδών, και η σύνδεσή τους.

 

Κανονικές εκφράσεις δεν είναι τρομακτικό, αλλά γράφοντας τη δική σας regexes να αφαιρέσει HTML είναι ένας σίγουρος δρόμος για την τρέλα (και δεν θα λειτουργήσει, είτε). Ακολουθήστε το μονοπάτι της σοφίας, και χρησιμοποιήστε μία από τις πολλές καλές βιβλιοθήκες HTML-ανάλυσης.


παράδειγμα Lucas' σπάσει επίσης επειδή “sub” δεν είναι μια μέθοδος μιας συμβολοσειράς Python. Θα έπρεπε να «εισαγωγή νέου», τότε καλέστε re.sub (μοτίβο, repl, string). Αλλά αυτό είναι ούτε εδώ ούτε εκεί, καθώς η σωστή απάντηση στην ερώτησή σας δεν περιλαμβάνει το γράψιμο κάθε regexes.

 

Κοιτάζοντας το ποσό της αίσθησης άνθρωποι διαδηλώνουν σε άλλες απαντήσεις εδώ, θα έλεγα ότι η χρήση ενός regex πιθανόν να μην είναι η καλύτερη ιδέα για την περίπτωσή σας. Πηγαίνετε για κάτι δοκιμασμένες, και τη θεραπεία προηγούμενη απάντησή μου ως απόδειξη ότι regexes δεν πρέπει να είναι *ότι* τρομακτικό.

 

αν χρησιμοποιείτε Django μπορείτε επίσης να χρησιμοποιήσετε 
 <http://docs.djangoproject.com/en/dev/ref/templates/builtins/#striptags> 
?)

 