Ich versuche, Web Scraping mit Python selbst zu lernen, um die Datenanalyse zu erlernen. Ich versuche, die imdb-Webseite zu durchsuchen, deren URL wie folgt lautet: http://www.imdb.com/search/title?sort=num_votes,desc&start=1&title_type=feature&year=1950,2012
Ich benutze das BeautifulSoup-Modul. Es folgt der Code, den ich verwende:
r = requests.get(url) # where url is the above url
bs = BeautifulSoup(r.text)
for movie in bs.findAll('td','title'):
title = movie.find('a').contents[0]
genres = movie.find('span','genre').findAll('a')
genres = [g.contents[0] for g in genres]
runtime = movie.find('span','runtime').contents[0]
year = movie.find('span','year_type').contents[0]
print title, genres,runtime, rating, year
Ich erhalte die folgenden Ausgaben:
The Shawshank Redemption [u'Crime', u'Drama'] 142 mins. (1994)
Mit diesem Code konnte ich Titel, Genre, Laufzeit und Jahr kratzen, aber weder die ID des imdb-Films noch die Bewertung. Nach der Überprüfung der Elemente (im Chrome-Browser) kann ich kein Muster finden, mit dem ich ähnlichen Code wie oben verwenden kann.
Kann mir jemand helfen, den Code zu schreiben, mit dem ich die Film-ID und die Bewertungen abkratzen kann?
data-mining
python
scraping
user62198
quelle
quelle
rating
nicht definiert ist. Wenn Sie das beheben, können Sie auch hinzufügenfrom BeautifulSoup import BeautifulSoup
, undimport requests
. Und warum nicht auch zeigen,url="http://etc"
damit wir das nicht für uns selbst tun müssen?Antworten:
Anstatt zu kratzen, können Sie versuchen, die Daten direkt hier abzurufen : http://www.imdb.com/interfaces . Es sieht so aus, als ob über FTP Daten für Filme, Schauspieler usw. verfügbar sind.
quelle
Ich konnte eine Lösung finden. Ich dachte daran, etwas zu posten, nur für den Fall, dass es jemandem hilft oder wenn jemand etwas anderes vorschlagen möchte.
Die Ausgabe sieht folgendermaßen aus:
quelle
Sie können alles von div mit class = "Rating Rating-Liste" erhalten
Sie müssen lediglich die Attribut-ID abrufen: [id = "tt1345836 | imdb | 8.5 | 8.5 | advsearch"] Wenn Sie über diesen Inhalt verfügen, teilen Sie diese Zeichenfolge durch '|' und erhalten: 1. Parameter: Film-ID 3. Parameter: Filmmusik
quelle
Als allgemeines Feedback denke ich, dass Sie gut daran tun würden, Ihr Ausgabeformat zu verbessern. Das Problem mit dem aktuellen Format ist, dass es keine transparente Möglichkeit gibt, die Daten programmgesteuert abzurufen. Versuchen Sie stattdessen:
Das Schöne an einer durch Tabulatoren getrennten Datei ist, dass sie beim Skalieren leicht in Impala (oder in kleineren Maßstäben in einfache mySql-Tabellen) eingelesen werden kann. Zusätzlich können Sie die Daten dann programmgesteuert in Python einlesen, indem Sie:
Der zweite Ratschlag ist, dass ich vorschlagen würde, mehr Informationen zu erhalten, als Sie für Ihren ersten Kratzer benötigen. Der Speicherplatz ist billiger als die Verarbeitungszeit. Daher macht es keinen Spaß, den Scraper jedes Mal neu auszuführen, wenn Sie Ihre Analyse erweitern.
quelle