Python-requests nicht geben mir die gleiche HTML wie mein browser

Bin ich Griff nach einer Wikia-Seite mit Python-requests. Es gibt allerdings ein problem: die Anfragen Anfrage nicht geben mir die gleiche HTML - wie mein browser mit derselben Seite.

Zum Vergleich, hier ist die Seite, Firefox bekommt von mir, und hier ist die Seite anfordert, holt (laden Sie Sie auf Ansicht - sorry, keine einfache Möglichkeit, visuell einfach Gastgeber ein wenig HTML von einer anderen Seite).

Werden Sie beachten ein paar Unterschiede (super unfreundlich diff). Es gibt einige kleine Dinge, wie Attribute beinig bestellt anders und so, aber es gibt auch ein paar sehr, sehr große Dinge. Am wichtigsten ist der fehlen der letzten sechs <img>s, und die Gesamtheit der navigation und Fußzeile Abschnitte. Auch in den raw-HTML wie es aussieht ist die Seite abgeschnitten abrupt.

Warum ist das passiert und gibt es eine Möglichkeit es zu beheben? Ich habe daran gedacht, ein paar Dinge schon, von denen keines fruchtbar erwiesen haben:

  • Request-Header stören? NÖ, ich habe versucht, kopieren Sie den Kopfzeilen mein browser sendet, User-Agent alle 1:1 in die Anforderungen verlangen, aber nichts änderte sich.
  • JavaScript-Inhalte zu laden, nachdem das HTML geladen wird? Nee. Selbst mit JS deaktiviert, Firefox gibt mir die "gute" Seite.
  • Äh... naja... was sonst könnte es sein?

Es wäre erstaunlich, wenn Sie wissen, einen Weg, dies passieren könnte, und eine Möglichkeit, es zu beheben. Danke!

  • Server sind frei zu dienen, was immer Sie möchten, basierend auf die Stimmung, die Phasen des Mondes, und vor allem, was Header Ihrer Anfrage enthält. Firefox sendet andere Header als requests.
  • Auch user-agents, die Dinge geladen, die über JavaScript, etc.
  • Dies ist jedoch nicht requests Schuld. Es ist der server der Wahl. Sie können Experimentieren und kopieren über Header von Firefox an Ihre request code; die üblichen übeltäter sind cookies, die User-Agent-header und die Akzeptieren* Familie von Headern.
  • Dann gibt es noch die browser selbst; es analysiert HTML empfangen und führt JavaScript-code aus, wenn einer vorhanden ist. Parsen von HTML mittels einfügen fehlt implizite Elemente (wie <tbody> in Tabellen) und alles reparieren, was kaputt ist. Darstellung der geparsten HTML zurück an Sie können leicht dazu führen, dass die Reihenfolge der Attribute ändern sich auch.
  • die OP bereits erklärt, dass Sie die JS deaktiviert.
  • Dann gibt es die Netzwerk-Topologie. Ist Ihr browser so konfiguriert, einen proxy überhaupt? Ist requests (überprüfen Sie Umgebungsvariablen? Sind Sie den Zugriff auf den server die selbe IP-Adresse?
  • Wie bereits erwähnt, kopierte ich die Header Firefox nutzt und verwendet Sie für die requests.get() ("User-Agent" enthalten), und keine Würfel. Das ist nicht das Problem. Plus, ich bin so ziemlich ganz sicher, Wikia nicht ausschließen, sechs Bilder und die navigation für bestimmte IPs / proxies nur. Laden Sie die HTML-Dateien und betrachten Sie in Ihrem browser - Sie werden sehen, einige ziemlich offensichtlich, seltsame Unterschiede.

InformationsquelleAutor obskyr | 2015-04-21
Schreibe einen Kommentar