2016-04-10 2 views
0

Я пытаюсь разобрать URL-адрес с сайта плаката, но он продолжает возвращать пустой массив.Beautifulsoup parse not working

htmltext = (urllib.urlopen("http://www.movieposterdb.com/Movie/"+str(ID))).read() 
soup = BeautifulSoup(htmltext, 'html.parser') 
links = soup.find("a", { "class" : "mpdb-movie-thumbnails-img-link" }) 
print links 

и источник HTML выглядит следующим образом

<a class="mpdb-movie-thumbnails-img-link" href="javascript:ShowPoster('87a25cbd');"><img class="mpdb-movie-thumbnails-img" title="The Joneses Poster" src="/img/posters/11_05/1972/68646/t_68646_87a25cbd.jpg" alt=""></a> 

Он должен по крайней мере, вернуть что-то ...

Благодаря

+0

Вы не должны использовать '' mpdb-movie-thumbnails-img "' вместо '' mpdb-movie-thumbnails-img-link '', то? – ForceBru

+0

жаль, что я не указал «класс», я переработал вопрос – 781850685

+0

Ссылка javascript. Я не думаю, что BS может это решить. Вы пробовали селен? –

ответ

1

BeautifulSoup только хватается то, что видно на источнике страницы для использования для синтаксического анализа. Если вы посмотрите на источник любой страницы фильма, вы увидите, что : no a теги с этим классом - таким образом, ваш вызов soup.find_all возвращает пустой список. Используя селен, я был в состоянии захватить img теги, как так:

from selenium import webdriver 

link = 'http://www.movieposterdb.com/Movie/20684' 

driver = webdriver.Firefox() 

driver.get(link) 
links = driver.find_elements_by_tag_name('img') 

for i in links: 
    print i.get_attribute('src') 

Теперь здесь, можно фильтровать только плакат ссылку фильма, как так:

for i in links: 
    if 'posters' in i.get_attribute('src'): 
     print i.get_attribute('src') 
+0

Спасибо. После запуска «pip install selenium» в моей текущей папке он показывает «ImportError: No module named selenium»? – 781850685

+0

Что вы имеете в виду, запустив его в текущей папке? если вы находитесь в окнах, вам нужно открыть 'Run' и ввести' python -m pip install selenium' – n1c9

+0

Я использую Mac, и я установил селен через терминал. – 781850685