Mit lxml, was bewirkt, dass ein “lxml.etree.XMLSyntaxError: das Dokument ist leer" - Fehler?

Ich bin mit mechanize/cookiejar/lxml, eine Seite zu Lesen und es funktioniert für einige, aber andere nicht. Die Fehler, die ich bin immer in Ihnen ist das in den Titel. Ich kann nicht posten den Seiten hier, weil Sie nicht SFW, aber gibt es eine Möglichkeit es zu beheben? Im Grunde ist das, was ich Tue:

import mechanize, cookielib
from lxml import etree    

br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(False)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 maverick Firefox/3.6.13')]

response = br.open('...')
tree = etree.parse(response) #error

Danach bekomme ich den root und suchen Sie das Dokument für die Werte, die ich möchte. Offenbar iterparse stürzt nicht ab, aber im moment bin ich in der Annahme, es nicht nur, weil ich nicht Vorgang nichts mit. Plus, ich hab noch nicht herausgefunden, wie die Suche nach dem Zeug mit.

Ich habe versucht, das deaktivieren und aktivieren der gzip-senden der referer als gut, aber weder das problem löst. Ich habe auch versucht, sparen Sie sich den Quelltext auf der Festplatte und erstellen Sie den Baum von dort aus, nur um von es und ich bekomme den gleichen Fehler.

Bearbeiten

Die Antwort, die ich erhalten, scheint in Ordnung zu sein, mit print repr(response), wie vorgeschlagen, bekomme ich eine <response_seek_wrapper at 0xa4a160c whose wrapped object = <stupid_gzip_wrapper at 0xa49acec whose fp = <socket._fileobject object at 0xa49c32c>>>. Ich kann auch speichern Sie die Antwort mit der read () - Methode, und überprüfen Sie, dass die gespeicherten .xml funktioniert über den browser und alles.

Auch, in eine der Seiten, es ist ein &rsquo; dass gibt mir die folgende Fehlermeldung: "lxml.etree.XMLSyntaxError: Entity 'ist' nicht definiert, Zeile 17, Spalte 7054". Bisher habe ich ersetzt es mit einem regex, aber gibt es einen parser, der kann damit umgehen? Ich habe diese Fehler auch schon mit der lxml.html-Code.analysieren unten vorgeschlagen.

Bezüglich der Datei markiert, ich meinte, dass wenn ich es öffnen mit gEdit tut es dies irgendwie: http://img34.imageshack.us/img34/9574/gedit.jpg

  • Haben Sie versucht, das schreiben der xml-Daten in eine Datei, dann kann man es studieren, und verarbeiten Sie nur mit xml-und vielleicht bekommen Sie eine klarere Vorstellung . Für debugging-lxml Probleme, die wir brauchen würden, um die xml -
  • Haben Sie versucht, so etwas wie print repr(response) kurz vor dem fehlerhaften statement? Tut es wie ein leeres XML-Dokument? Sieht es aus wie ein XML-Dokument überhaupt?
  • Ich bin nicht sehr gut in der xml aber. Habe ich öffnen mit gEdit und einige Teile davon wurden skizziert rot, die ich denke, bedeutet, dass das xml kaputt ist, obwohl mein browser (Firefox) hat kein problem mit ihm. Wenn das der Fall ist, denke ich, es gibt nicht viel kann ich noch tun außer mit einer anderen Bibliothek oder änderung der Art, wie ich die Datei Bearbeiten? Anfänglich dachte ich über die Verwendung von regex-stattdessen aber ging für einen XML-parser, da dieser schien zu sein, das richtige zu tun, obwohl an dieser Stelle ich denke, ich werde gehen Sie zurück zu regex...
  • Machin ja print repr(Antwort) schreibt etwas, und ich kann auch speichern Sie es mit Antwort.read() ein .xml-Datei direkt aus dem code, bevor Sie den Fehler. Das problem scheint zu sein, das Parsen der Seite.
  • Bitte versuchen Sie eine Antwort auf die "sieht es aus wie" - Fragen. Bearbeiten Sie Ihre Frage zum hinzufügen von zusätzlichen Informationen, nicht Kommentare zu hinterlassen, die verstreut.
  • Machin Sorry. Es sieht nicht wie eine leere xml. Die print repr sagt <response_seek_wrapper at 0xa4a160c whose wrapped object = <stupid_gzip_wrapper at 0xa49acec whose fp = <socket._fileobject object at 0xa49c32c>>>. Wie ich sagte, ich könnte speichern Sie den Inhalt der Antwort zu ein .xml-Datei und es funktionierte gut, also war die Reaktion ok.
  • in Reaktion auf mich Sie sagte, es wurden Teile skizziert, aber @John, Sie sagten, es funktioniert - bitte zeigen Sie uns die xml -, die Sie in die Datei auch Bearbeiten Sie Ihre Frage nicht Kommentare hinzufügen

InformationsquelleAutor wakawaka | 2011-01-09
Schreibe einen Kommentar