/ / Parsen lokaler Dateien mit lxml.etree - Python, Parsing, Pfad, Lxml, Elementbaum

Lokale Dateien mit lxml.etree analysieren - Python, Parsing, Pfad, lxml, Elementbaum

Ich entschuldige mich im Voraus für Unklarheiten(Ich bin neu in der Programmierung.) Ich versuche, eine Reihe von lokalen Dateien mit lxml.etree zu analysieren. Ich habe ein Analyseskript geschrieben, das lxml (und xpath) verwendet, das relevante Daten von einer SEC-Webseite findet und in eine CSV-Datei exportiert. Dieses Skript funktioniert für eine einzelne URL, aber ich möchte auf Tausende von HTML-Seiten verallgemeinern. Ich habe alle html-Dateien lokal heruntergeladen (ich habe curl verwendet, um die Links zu erhalten, wget zum Herunterladen) - aber ich hatte keinen Erfolg beim Ersetzen meines Parsers. Die alte Version, die funktionierte, war:

page = requests.get("url")
tree = html.fromstring(page.text)

Ich habe versucht, es durch etree.parse zu ersetzen, so dass ich Dateien lokal analysiere, die im Verzeichnis "Bullseye" heruntergeladen wurden.

path = "/Users/dbk13/Desktop/SEC/bullseye"
dirs = os.listdir( path )

for files in dirs:
page = os.path.join(path,files)
etree.parse(page)

Gibt es ein Problem mit meinem Pfad zu den lokalen Dateien?

Der Fehler, den ich immer wieder bekomme, ist etwa

Datei "postings_up_updated.py", Zeile 26, in etree.parse (page) Datei "lxml.etree.pyx", Zeile 3299 in lxml.etree.parse (src / lxml / lxml.etree.c: 72421) Zeile 1791, in lxml.etree._parseDocument (src / lxml / lxml.etree.c: 105883) Datei "parser.pxi", Zeile 1817, in lxml.etree._parseDocumentFromURL (src / lxml / lxml.etree.c: 106182) Datei "parser.pxi", Zeile 1721, in lxml.etree._parseDocFromFile (src / lxml / lxml.etree.c: 105181) Datei "parser.pxi", Zeile 1122, in lxml.etree._BaseParser._parseDocFromFile (src / lxml / lxml.etree.c: 100131) Datei "parser.pxi", Zeile 580, in lxml.etree._ParserContext._handleParseResultDoc (src / lxml / lxml.etree.c: 94254) Datei "parser.pxi", Zeile 690, in lxml.etree._handleParseResult (src / lxml / lxml.etree.c: 95690) Datei "parser.pxi", Zeile 620, in lxml.etree._raiseParseError (src / lxml / lxml.etree.c: 94757) lxml.etree.XMLSyntaxError: Das Dokument ist leer, Zeile 1, Spalte 1

Antworten:

2 für die Antwort № 1

Die Fehlermeldung weist darauf hin, dass die Datei vorhanden istleer jedoch denke ich, dass es wahrscheinlicher ist, dass Sie versuchen, ein Verzeichnis als eine Datei zu analysieren. Dieser Code erzeugt das gleiche Traceback wie Sie gezeigt haben:

from lxml import etree

etree.parse("/tmp")
Traceback (most recent call last):
.
.
lxml.etree.XMLSyntaxError: Document is empty, line 1, column 1

Dies kann passieren, wenn in "/ Users / dbk13 / Desktop / SEC / bullseye" Unterverzeichnisse vorhanden sind os.listdirs() enthält Unterverzeichnisse in der zurückgegebenen Liste. Wenn dies der Fall ist, können Sie versuchen, nach regulären Dateien zu suchen os.path.isfile():

import os

path = "/Users/dbk13/Desktop/SEC/bullseye"
dirs = os.listdir( path )

for filename in dirs:
page = os.path.join(path, filename)
if os.path.isfile(page):
etree.parse(page)

Ein weiterer wichtiger Punkt ist, dass Sie erscheinenVersuchen Sie, HTML-Dateien mit einem XML-Parser zu analysieren. Dies ist wahrscheinlich nicht erfolgreich, da die große Mehrheit der HTML-Dateien nicht XML ist und daher mit einem XML-Parser nicht zuverlässig analysiert werden kann. Ich würde empfehlen lxml.html aber Sie scheinen das schon probiert zu haben. Ein anderer alternativer HTML-Parser ist BeautifulSuppe.