Question

Je suis en train d'extraire des données de différentes pages HTML à l'aide d'un programme de python. Malheureusement, certaines de ces pages contiennent des données entrées par l'utilisateur qui a de temps en temps des erreurs « légères » - tag à savoir désadaptation

.

Y at-il un bon moyen d'avoir la xml.dom de python essayer de corriger les erreurs ou quelque chose du genre? Sinon, est-il une meilleure façon d'extraire des données à partir des pages HTML qui peuvent contenir des erreurs?

Était-ce utile?

La solution

Vous pouvez utiliser HTML Tidy pour nettoyer, ou Belle soupe à analyser. Peut-être que vous devez sauvegarder le résultat dans un fichier temporaire, mais il devrait fonctionner.

Cheers,

Autres conseils

Je l'habitude d'utiliser BeautifulSoup pour ces tâches, mais maintenant je l'ai déplacé à HTML5lib ( http://code.google.com/p/html5lib/ ) qui fonctionne bien dans de nombreux cas où BeautifulSoup échoue

autre solution consiste à utiliser " soupe élément " ( http: //effbot.org/zone/element-soup.htm ) qui est un wrapper pour Belle soupe en utilisant elementTree

lxml fait un travail décent à l'analyse syntaxique HTML invalide.

D'après leur documentation Belle soupe et html5lib effectuer parfois mieux en fonction de l'entrée. Avec lxml vous pouvez choisir d'utiliser l'analyseur, et d'y accéder via une API unifiée.

Si Jython est acceptable pour vous, tagsoup est très bon à l'analyse syntaxique indésirable -. Si elle est, je trouve les bibliothèques JDOM beaucoup plus facile à utiliser que d'autres alternatives xml

Ceci est un extrait d'une démo mockup à voir avec écran de grattage du planificateur de voyage de TfL:

 private Document getRoutePage(HashMap params) throws Exception {
        String uri = "http://journeyplanner.tfl.gov.uk/bcl/XSLT_TRIP_REQUEST2";
        HttpWrapper hw = new HttpWrapper();
        String page = hw.urlEncPost(uri, params);
        SAXBuilder builder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser");
        Reader pageReader = new StringReader(page);
        return builder.build(pageReader);
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top