Python-Daten-Scraping

8

Ich möchte ein paar Songs von Ссылка herunterladen. Ich benutze urllib2 und BeautifulSoup .

Das Problem ist, dass wenn ich urllib2 die Seite mit meiner Video-ID eingesteckt habe, Ссылка Ich bekomme die Seite, aber sie sind knifflig und laden die Informationen nach dem ersten Pagenload mit ein paar js Ajax-Sachen. Wenn ich also versuche, die URL des Download-Links zu scratzen, liegt sie buchstäblich nicht auf der Seite, weil sie nicht geladen wurde.

Weiß jemand, wie ich diesen js-Lader in meinem Python-Skript auslösen kann, oder so?

Hier ist der relevante leere HTML BEVOR der Inhalt, den ich will, in ihn geladen wird.

%Vor%     
Oliver 30.08.2011, 08:11
quelle

3 Antworten

10

Die API ist JSON-basiert, so dass der Inhalt der HTML-Dateien keine Hinweise darauf gibt, wo die Dateien zu finden sind. Eine gute Idee beim Erforschen von Webdiensten wie diesem besteht darin, den Tab "Netzwerk" in den Chrome-Entwicklertools zu öffnen und zu sehen, welche Seiten bei der Interaktion mit der Seite geladen werden. Diese Übung hat mir gezeigt, dass vor allem zwei URLs interessant erscheinen:

  1. Ссылка
  2. Ссылка

Die erste URL scheint eine Datei zur Verarbeitung einzureihen, die zweite, um den Status des Verarbeitungsjobs zu erhalten.

Die zweite URL verwendet einen video_id-GET-Parameter, der die ID für das Video auf youtube ist (http://www.youtube.com/watch?v=KMU0tzLwhbE) und gibt den Status des Entschlüsselungsauftrags zurück. Das zweite und das dritte scheinen für diesen Zweck irrelevant zu sein, was Sie überprüfen können, indem Sie die URL mit und ohne die zusätzlichen Parameter laden.

Der Inhalt der Seite ist:

%Vor%

Welche sind JSON-Daten? Das interessante Bit in diesem ist "a0aa17294103c638fa7f5e0606f839d3", das wie ein Hash aussieht, den der Webservice verwendet, um sich auf die decodierte mp3-Datei zu beziehen. Schau dir auch an, wie der Download-Link auf der Titelseite aussieht:

Ссылка

Jetzt haben wir alle fehlenden Teile des Puzzles zusammen. Zuerst nehmen wir die URL eines Youtube-Videos (http://www.youtube.com/watch?v=iKP7DZmqdbU), zitieren es und füttern es mit dieser URL an die API:

Ссылка

Warten Sie ein paar Augenblicke, bis der Entschlüsselungsauftrag abgeschlossen ist:

Ссылка

Nimm den in der Info-URL gefundenen Hash, um die Download-URL zu erstellen:

Ссылка

Beachten Sie, dass es möglich ist, dass der Webmaster der Site nicht verschrottet werden soll und dass Gegenmaßnahmen ergriffen werden, wenn Leute (in den Augen der Webmaster) die Site missbrauchen. Zum Beispiel scheint es, Referer-Schutz zu verwenden, so dass das Klicken auf die Links in diesem Post nicht funktioniert, Sie müssen sie kopieren und in ein neues Browser-Fenster laden.

Testcode:

%Vor%     
Björn Lindqvist 30.08.2011, 11:14
quelle
4

Du könntest Selen verwenden, um mit den js-Sachen zu interagieren und es dann mit BeautifulSoup zu kombinieren oder alles mit Selen zu machen, ganz wie es dir gefällt.

Ссылка

Selenium ist ein Werkzeug für die Browser-Automatisierung und hat Bindungen für einige Sprachen, einschließlich Python. Es dauert eine laufende Instanz von Firefox / IE / Chrome und lassen Sie es Skript (ich empfehle den Selen-Webdriver für dieses einfache Problem, nicht den gesamten Selenium-Server).

    
naeg 30.08.2011 08:43
quelle
2

Sie müssen durch Ссылка arbeiten und die genauen Informationen herausfinden, die herumgereicht werden Mit dieser können Sie eine Anfrage senden, die Antwort parsen und von der richtigen Scrapped-URL herunterladen.

    
thebwt 30.08.2011 08:37
quelle

Tags und Links