Próbuję wyodrębnić linki do obrazów ze strony internetowej imdb.

Na przykład https://www.imdb.com/title/tt0499549/?ref_=fn_tt_tt_1 zawiera element obrazu <img alt="Avatar Poster" title="Avatar Poster" src="https://m.media-amazon.com/images/M/MV5BMTYwOTEwNjAzMl5BMl5BanBnXkFtZTcwODc5MTUwMw@@._V1_UX182_CR0,0,182,268_AL_.jpg">

Poniżej znajduje się kod, którego używam i nie otrzymuję linku do adresu URL obrazu.

Wiersz [17], który jest linkiem, którego próbuję użyć, w moim kodzie można znaleźć pod

https://www.kaggle.com/carolzhangdc/imdb-5000-movie-dataset
import csv
from bs4 import BeautifulSoup
import urllib2

with open('movie_metadata.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            print('Column names are {}'.format(", ".join(row)))
            line_count += 1
        else:
            imdb_link = row[17]
            soup = BeautifulSoup(urllib2.urlopen(imdb_link).read(), features="html.parser")
            link = soup.find(itemprop="img")
            print('\t{} =====> {} =====> {} ====> {}.'.format(row[-1], row[11], row[17], link["src"]))
            line_count += 1

Podczas uruchamiania kodu otrzymuję TypeError: 'NoneType' object has no attribute '__getitem__'

0
Jaoa 19 listopad 2019, 20:41
Przeczytaj ericlippert.com/2014/03/05/how- to-debug-small-programs, aby uzyskać wskazówki dotyczące debugowania kodu.
 – 
Code-Apprentice
19 listopad 2019, 20:42
@ Code-Apprentice wielkie dzięki!
 – 
Jaoa
19 listopad 2019, 20:44
Pojawia się błąd czy co? zawsze umieszczaj pełny komunikat o błędzie (zaczynając od słowa „Traceback”) w pytaniu (nie komentarz) jako tekst (nie zrzut ekranu). Istnieją inne przydatne informacje.
 – 
furas
19 listopad 2019, 20:50
1
Powinieneś przeszukać find('img'), ponieważ img to nazwa tagu, a nie jego właściwość.
 – 
furas
19 listopad 2019, 20:55
Dzięki! Zaktualizowałem swój kod.
 – 
Jaoa
19 listopad 2019, 21:14

1 odpowiedź

Dlaczego nie uprościsz swojego kodu, używając żądań z Beautiful Soup, aby móc debugować go w bardziej wykonalny sposób:

import requests
from bs4 import BeautifulSoup
url = 'https://www.imdb.com/title/tt0499549/?ref_=fn_tt_tt_1'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html5lib')
soup.find('img', {'title': 'Avatar Poster'}).get('src')
3
Arn 19 listopad 2019, 21:36
To działa, ale w mojej pętli for próbuję uzyskać każdy film w moim pliku csv. Mam tylko adresy URL stron z filmami
 – 
Jaoa
19 listopad 2019, 20:48
W takich operacjach we / wy dobrą praktyką jest pobranie całej zawartości, którą chcesz umieścić w pliku jako pierwszą
 – 
Arn
19 listopad 2019, 20:51
1
@Code-Apprentice Przepraszamy, zapomniałem dodać połączenie GET przez requests
 – 
Arn
19 listopad 2019, 21:30