2016-04-08 15 views
0

Ich mache einige persönliche Daten Wissenschaft Projekte und einer von ihnen ist es zu sehen, wie oft bestimmte Lieder im Radio gespielt werden.Web Scraping Javascript in Python/R

http://www.iheart.com/live/radio-1045-3401/

unter der oben genannten URL der Suche, wenn ich auf Seite Quelle suchen, ohne Werte von Interesse bevölkert. Nicht sicher, warum, aber wenn ich inspect Element in Chrome verwende, wenn ich den "Now Playing" -Header bewege, kann ich Werte für Song und Künstler sehen, die gerade abgespielt werden.

Beispiel:

a class="player-song" href="/artist/rem-3610/songs/-2450662/" title="Losing My Religion" data-reactid=".1hpdfx1l4ow.a.1.0.1.1">Losing My Religion</a 

Meine beiden Fragen sind:

  1. Warum ist das nicht in Seite Quelle zeigt, aber ich kann es unter Inspect Element sehen?
  2. Wie scrappe ich diese Informationen im Web, da sie nicht in der Seitenquelle angezeigt werden?
+0

nicht überprüft, aber es ist wahrscheinlich Inhalt von Javascript generiert, in diesem Fall könnten Sie Selen in Python verwenden – juvian

+1

könnten Sie wahrscheinlich auch die Daten mit ihrer API erhalten .. http://developer.iheart.com/Api/login –

Antwort

3
  1. Die meisten Web-Seiten, die dynamischen Elemente beinhalten haben Seitenelemente von Javascript erzeugt und eingefügt, dass der Browser analysiert und führt für Sie. Das hast du schon vermutet, vermute ich, basierend auf dem Fragetitel.

    Was Sie in der Seitenquelle sehen, ist das rohe HTML vor Javascript tritt und aktualisiert es.

  2. Sie möchten ein headless browser: ein Browser ohne eine grafische Benutzeroberfläche. Dies analysiert und führt Javascript für Sie aus und aktualisiert den Seiten-HTML-Code entsprechend.


Hier ist ein full list of headless browsers. Beachten Sie, dass Sie diese Aufgabe in jeder Sprache ausführen können.

+0

MechanicalSoup gibt in ihrer Readme an, dass es kein Javascript tut, und RoboBrowser ist eine Mischung aus Anfragen und beautifulSoup, also denke ich nicht. Nicht sicher über Mechanize auch. Schöne Antwort. – Ehvince