Próbuję nauczyć się skrobania stron internetowych przy użyciu Pythona jako część wysiłku uczenia się analizy danych. Próbuję zeskrobać stronę internetową imdb, której adres URL jest następujący: http://www.imdb.com/search/title?sort=num_votes,desc&start=1&title_type=feature&year=19502012
Korzystam z modułu BeautifulSoup. Oto kod, którego używam:
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
Otrzymuję następujące wyniki:
The Shawshank Redemption [u'Crime', u'Drama'] 142 mins. (1994)
Za pomocą tego kodu mogłem zeskrobać tytuł, gatunek, środowisko uruchomieniowe i rok, ale nie mogłem zeskrobać identyfikatora filmu imdb ani oceny. Po sprawdzeniu elementów (w przeglądarce Chrome) nie jestem w stanie znaleźć wzoru, który pozwoli mi użyć podobnego kodu jak powyżej.
Czy ktoś może mi pomóc napisać fragment kodu, który pozwoli mi zeskrobać identyfikator filmu i oceny?
źródło
rating
nie został zdefiniowany. Jeśli to naprawisz, możesz również dodaćfrom BeautifulSoup import BeautifulSoup
iimport requests
. A dlaczego nie pokazaćurl="http://etc"
, żebyśmy nie musieli tego robić dla siebie?Odpowiedzi:
Zamiast skrobania możesz spróbować uzyskać dane bezpośrednio tutaj: http://www.imdb.com/interfaces . Wygląda na to, że mają dane dostępne przez ftp do filmów, aktorów itp.
źródło
Udało mi się znaleźć rozwiązanie. Pomyślałem o zamieszczeniu postu na wypadek, gdyby był komuś pomocny lub ktoś chciałby zasugerować coś innego.
Dane wyjściowe wyglądają następująco:
źródło
Możesz uzyskać wszystko od div z class = "rating rating-list"
Wszystko, co musisz zrobić, to pobrać identyfikator atrybutu: [id = "tt1345836 | imdb | 8.5 | 8.5 | advsearch"] Gdy masz tę zawartość, dzielisz ten ciąg na „|” i otrzymujesz: 1. parametr: identyfikator filmu 3. parametr: wynik filmu
źródło
Jako ogólną informację zwrotną uważam, że dobrze by było, gdybyś poprawił swój format wyjściowy. Problem z obecnym formatem polega na tym, że nie ma przejrzystego sposobu na programowe uzyskanie danych. Zamiast tego rozważ:
Zaletą pliku rozdzielanego tabulatorami jest to, że jeśli skalujesz w górę, możesz go łatwo odczytać w coś takiego jak impala (lub w mniejszych skalach, proste tabele mySql). Dodatkowo możesz programowo odczytać dane w pythonie, używając:
Druga rada: sugeruję, aby uzyskać więcej informacji, niż myślisz, że potrzebujesz na początkowym zadrapaniu. Miejsce na dysku jest tańsze niż czas przetwarzania, więc ponowne uruchamianie skrobaka za każdym razem, gdy rozszerzysz swoją analizę, nie będzie zabawne.
źródło