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.
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))
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