Domanda

Sto cercando di estrarre alcuni dati provenienti da varie pagine HTML usando un programma Python. Purtroppo, alcune di queste pagine contengono dati inseriti dall'utente che ha di tanto in tanto gli errori "lievi" - vale a dire tag mismatching

.

C'è un buon modo per avere xml.dom di pitone cercare di correggere gli errori o qualcosa del genere? In alternativa, c'è un modo migliore per estrarre dati da pagine HTML che possono contenere errori?

È stato utile?

Soluzione

Si potrebbe utilizzare HTML Tidy per ripulire, oppure bella zuppa da analizzare. Potrebbe essere che si deve salvare il risultato in un file temporaneo, ma dovrebbe funzionare.

Saluti,

Altri suggerimenti

Ho usato per usare BeautifulSoup per questi compiti, ma ora ho spostato a HTML5lib ( http://code.google.com/p/html5lib/ ), che funziona bene in molti casi in cui non riesce BeautifulSoup

altra alternativa è quella di utilizzare " elemento Zuppa " ( http: //effbot.org/zone/element-soup.htm ), che è un wrapper per Beautiful Soup utilizzando ElementTree

lxml fa un lavoro decente a parsing HTML non valido.

Secondo la loro documentazione Beautiful Soup e html5lib talvolta rendimento migliore seconda dell'ingresso. Con lxml è possibile scegliere quale parser da usare, e accedervi tramite un API unificata.

Se Jython è accettabile per voi, tagsoup è molto bravo a parsing spazzatura -. Se lo è, ho trovato le librerie JDOM molto più facile da usare rispetto ad altre alternative XML

Questo è un frammento da un mockup demo a che fare con screen scraping dal pianificatore viaggio di 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);
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top