BeautifulSoup und Nicht-HTML Content

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
beetronic
User
Beiträge: 33
Registriert: Mittwoch 2. Mai 2007, 10:23

Sonntag 17. Juli 2011, 18:07

Hallo Leute,

ich schreibe einen Web Spider, um das Web nach bestimmten Inhalten zu durchsuchen. Zum Parsen von HTML Seiten verwende ich BeautifulSoup. BeautifulSoup findet Links im HTML, die dann wiederum geladen werden usw.

Dabei sehe ich allerdings das Problem, dass Links zwar aussehen können, als zeigten sie auf HTML Seiten, in Wirklichkeit aber anderen Content referenzieren, z.B. Bilder mit flascher Dateierweiiterung (z.B. bild.png.html).

Wenn ich diesen Content dann BeautifulSoup füttere, kommt beim Parsen natürlich nur Murx raus. Welche Möglichkeiten habe ich damit umzugehen?

Kann ich eventuell vorher sicher stellen, dass das was ich BeautifulSoup zum parsen gebe auch wirklich HTML ist? Wenn ja, wie würde man das machen?
Oder kann BeautifulSoup eine Exception werfen, wenn es Content nicht parsen kann?

Gruss + Dank, beetronic
deets

Sonntag 17. Juli 2011, 22:46

Das ist doch nur eine Frage der HTTP-Header - mindestens mal beim Empfang von Daten hast du ja einen Content-type - wenn der nicht text/html oder die verschiedenen XHTML-Varianten ausgeliefert werden, dann ignorierst du das halt.

Und theoretisch sollte ein HTTP-Server auch die Auslieferung "falscher" Daten verhindern, wenn du einen entsprechenden HTTP-Accept-header mitschickst, in dem du halt erklaerst, einzig und alleine HTML/XHTML zu akzeptieren.

Last but not least - wenn BS spuckt bei Daten, die du ihm vorwirfst, dann ignorierst du es halt. Letztlich musst du das eh machen, denn du kannst immer auf falsch konfigurierte oder fehlerhaft programmierte Server stossen, die etwa ein PNG als text/html ausliefern. Musst du also eh mit umgehen koennen.
beetronic
User
Beiträge: 33
Registriert: Mittwoch 2. Mai 2007, 10:23

Montag 18. Juli 2011, 15:21

[quote="deets"]Das ist doch nur eine Frage der HTTP-Header - mindestens mal beim Empfang von Daten hast du ja einen Content-type - wenn der nicht text/html oder die verschiedenen XHTML-Varianten ausgeliefert werden, dann ignorierst du das halt.

Ja, Danke, vorher den Content Type zu checken klingt gut. Ist ja auch nicht kompliziert, wie ich gerade nochmal nachgelesen habe.

VG, bt
Antworten