[PYTHON] Schöne Suppe verschüttet

Ursprung

Ich habe beschlossen, nur den erforderlichen Text aus dem Bericht (HTML-Format) zu extrahieren, der von einem statischen C ++ - Analysetool eines bestimmten Unternehmens ausgegeben wurde, und habe daher mit Python2.7 + Beautifulsoup4 begonnen.

bs4test.py


from bs4 import BeautifulSoup

soup = BeautifulSoup(open("rep_38248_dev1.html"))
print soup.prettify("shift_jis")

Was? Es liest nur ungefähr 2500 Zeilen, was 1/10 des gesamten HTML-Codes (ungefähr 26.000 Zeilen) entspricht !! Geschwächt. Überwältigt. Ich war in Schwierigkeiten.

Erkundungsreise

Der übliche Weg, dies zu tun, besteht darin, "Menschen in der gleichen Situation online zu finden". Sofort, wenn ich auf Google suche ... habe ich keine Informationen. Tohoho.

Es gibt keine Möglichkeit, also habe ich mich mit dem bs4-Quellcode umgesehen und ihn nachgeschlagen. Die Ursache war ein Fehler in der feed () -Methode von lxml, den bs4 als Subunternehmer aufrief, und als er mit riesigem HTML-Text gespeist wurde, wurde er unterwegs verschüttet.

Die Problemumgehung besteht darin, LXMLTreeBuilder.feed () in bs4 / builder / _lxml.py zu kommentieren. (Aus irgendeinem Grund wurde der XML-Parser LXMLTreeBuilderForXML.feed () behoben.)

bs4/builder/_lxml.py


class LXMLTreeBuilder(HTMLTreeBuilder, LXMLTreeBuilderForXML):

    features = [LXML, HTML, FAST, PERMISSIVE]
    is_xml = False

    def default_parser(self, encoding):
        return etree.HTMLParser

#    def feed(self, markup):
#        encoding = self.soup.original_encoding
#        try:
#            self.parser = self.parser_for(encoding)
#            self.parser.feed(markup)
#            self.parser.close()
#        except (UnicodeDecodeError, LookupError, etree.ParserError), e:
#            raise ParserRejectedMarkup(str(e))

Ende

Erneut googeln, es hängt mit dem [beautifulsoup-Forum] der Google-Gruppe zusammen (https://groups.google.com/forum/?fromgroups=#!searchin/beautifulsoup/lxml/beautifulsoup/Q4Ko7aXMS3k/yJrVxg2xtlkJ) Es gab einen Beitrag. LXMLTreeBuilderForXML.feed () scheint zu diesem Zeitpunkt BugFixed gewesen zu sein. Also, die Modifikation von LXMLTreeBuilder wurde durchgesickert ...

Recommended Posts

Schöne Suppe verschüttet
Schöne Suppe
Schöne Suppe Memo
Meine schöne Suppe (Python)
Kratzen mit schöner Suppe
Tischkratzen mit schöner Suppe
Krabbeltraining mit schöner Suppe
Versuchen Sie es mit Python + Beautiful Soup
Ein Memorandum bei der Verwendung von schöner Suppe
Mehrere Seiten mit Beautiful Soup verschrotten
[Python] Ein Memorandum der schönen Suppe4
Kratzen mit Python und schöner Suppe
Kratzen mit schöner Suppe in 10 Minuten
Website-Scraping mit Beautiful Soup in Python
[Python3] Verstehe die Grundlagen von Beautiful Soup
[Python] Eine Tabelle mit Beautiful Soup kratzen
Entfernen Sie unerwünschte HTML-Tags mit Beautiful Soup
Häufig verwendete Methoden von Selen und schöner Suppe
So suchen Sie HTML-Daten mit Beautiful Soup