Ich wurde gebeten, ein Diagramm wie dieses zu zeichnen
unter Verwendung von Latex (genauer gesagt, Tikz und / oder Pgf). Dies wäre kein Problem, wenn ich die Daten hätte, aber ich nicht. Alles, was ich habe, ist die Website , von der Grafiken angezeigt werden können, aber ich weiß nicht, wie ich die Daten herbekomme dort.
Ich habe heute den Tag damit verbracht, diese Daten zu bekommen, einschließlich des Schreibens bei Google und der Verwendung einer Art Software, die die Linie nachzeichnet und auf die Punkte eines Diagramms wie Datathief und DigitizeIt verweist, aber ich war nicht erfolgreich. Ich denke, das letztere hat nicht funktioniert, weil die Linien in der Grafik zu dünn sind und mehr als eine Blautönung haben. Natürlich habe ich versucht, die Bildqualität mit Paint und Gimp zu verbessern, aber ich konnte es immer noch nicht funktionieren lassen.
Ich habe auch versucht, eps2pgf, ein Java-Skript, das eps Figuren in pgf-Code umwandelt, zu verwenden, aber selbst das funktionierte nicht für die Graphen, die ich mit Image Capture (Mac) und Print Screen (Windows) gespeichert hatte sei meine letzte Option, da es sich um einen "Brute-Force-Ansatz" handelt, der einen hässlichen Code ausspuckt, den man nicht wirklich verbessern kann.
Nach all dem entschied ich mich, Python zu lernen, weil mein Vorgesetzter, die Person, die mich gebeten hat, dieses Bild mit Tikz zu zeichnen, sagte, dass es einen Python-Code gibt, um Daten von solchen Webseiten zu bekommen. Jetzt bin ich mir nicht einmal sicher, ob Python den Job machen wird (obwohl ich mich über die Entschuldigung freue, es zu lernen) und natürlich braucht es Zeit, eine neue Sprache zu lernen und so etwas zu tun, also möchte ich wissen, ob es wirklich ein Weg, um die Daten von dieser Website zu erhalten, vorzugsweise Python verwenden, wenn nicht, eine andere Methode.
Nun, es wäre großartig, wenn Google eine API für diese Daten bereitgestellt hätte! Das heißt, Sie können immer noch einige Daten von der Website abschaben. Hier ist, wie es geht ...
Installieren Sie Firebug
Ich bevorzuge Firebug für Firefox, aber die Entwicklerwerkzeuge von Chrome sollten auch funktionieren.
Untersuche
Als Erstes lasst uns die fragliche URL aufrufen und Firebug versuchen und sehen, was vor sich geht. Aktiviere Firebug mit F12 oder gehe zu Extras- & gt; Firebug- & gt; Öffne Firebug. Klicken Sie zuerst auf die Registerkarte "Net" und laden Sie die Seite neu. Dies zeigt alle Anfragen an und gibt Ihnen einen Einblick in die Funktionsweise der Site. In der Regel laden Flash-Plugins Daten extern, anstatt sie in das eigentliche Plugin zu integrieren. Wenn Sie sich die Anfragen ansehen, sehen Sie die Anfrage mit dem Namen POST service
. Wenn Sie den Mauszeiger darüber bewegen, zeigt Firebug die vollständige URL an und Sie werden sehen, dass die Seite eine Anfrage an http://www.google.com/transparencyreport/traffic/service
gestellt hat. Sie können auf die Anfrage klicken und die gesendeten Header, die Postdaten, die Antwort und die Cookies betrachten, die zur Ausführung der Anfrage verwendet wurden.
Wenn Sie sich die Antwort ansehen, werden Sie feststellen, dass JSON fehlerhaft ist. Von dem, was ich sagen kann, scheint dies die Liste der normalisierten Verkehrsdatenpunkte zu enthalten. Du könntest die Antwort aus dem Firebug herausschneiden und einfügen, aber da dies eine Python-Frage ist, lass uns etwas härter arbeiten.
Abrufen der Daten in Python
Um die Post-Anfrage erfolgreich zu machen, müssen wir (fast) alles tun, was der Browser tut. Wir können ein bisschen schummeln und einfach die Header der Anfrage kopieren und Daten aus dem Firebug veröffentlichen, um eine echte Anfrage zu fälschen.
Kopfzeilen & amp; Daten posten
Verwenden Sie dreifache Anführungszeichen, um mehrzeilige Strings in die Shell einzufügen. Kopieren Sie die Anforderungsheader und fügen Sie sie ein.
%Vor% Weiter wandeln Sie es in ein Diktat für httplib2 um. Ich werde ein Listenverständnis verwenden (das die Zeichenfolge basierend auf Zeilenumbrüchen aufteilt, dann die Zeile auf der ersten Zeile aufteilt und nachgestellte Leerzeichen entfernt, was mir eine Liste von Zweielernlisten gibt, die dict
in ein Wörterbuch konvertieren kann ), aber Sie könnten dies tun, wie Sie wollen. Sie könnten das Diktat auch manuell erstellen, ich finde es nur schneller.
Und kopieren Sie die Postdaten.
%Vor% Machen Sie die Anfrage
Ich werde Ссылка verwenden, aber es gibt ein paar andere http-Clients und einige nette Tools, um das Web wie
Massagendaten
Das Originalformat ist wirklich seltsam und nur das oberste Bit scheint die Datenpunkte zu enthalten, also werde ich den Rest weglassen.
%Vor%Nun, da es ein gültiger JSON ist, können wir es in native Python-Datentypen deserialisieren.
%Vor%Alle Punkte, an denen ich interessiert bin, sind Floats, also werde ich basierend darauf filtern.
%Vor%Daten verarbeiten / speichern
Nun, da wir unsere Daten haben, überprüfen Sie sie, machen Sie zusätzliche Verarbeitung, etc ...
%Vor%... oder speichern Sie es einfach.
%Vor%Wir könnten es auch mit pyplot aus matplotlib (oder eine andere Grafik / Plotting-Bibliothek).
%Vor%
Fazit
Wenn Sie nur an ein paar Dingen interessiert sind, können Sie das Diagramm anpassen, um anzuzeigen, was Sie wollen, und dann die Request-Header / Post-Daten verwenden, die von der richtigen Anfrage an http://www.google.com/transparencyreport/traffic/service
verwendet werden. Vielleicht möchten Sie die tatsächliche Reaktion näher untersuchen als ich, ich habe nur die Teile verworfen, die für mich keinen Sinn ergaben. Hoffentlich werden sie eine öffentliche API für diese Daten verfügbar machen.