2016-03-07 3 views
0

Это я ссылку, где я пытаюсь получить данные flipkartIndexError: список индексов вне диапазона при использовании BS4

и часть кода:

<div class="toolbar-wrap line section"> 
    <div class="ratings-reviews-wrap"> 
     <div itemprop="aggregateRating" itemscope="" itemtype="http://schema.org/AggregateRating" class="ratings-reviews line omniture-field"> 
     <div class="ratings"> 
      <meta itemprop="ratingValue" content="1"> 
      <div class="fk-stars" title="1 stars"> 
       <span class="unfilled">★★★★★</span> 
       <span class="rating filled" style="width:20%"> 
       ★★★★★ 
       </span> 
      </div> 
      <div class="count"> 
       <span itemprop="ratingCount">2</span> 
      </div> 
     </div> 
     </div> 

    </div> 

</div> 

здесь я должен принести 1 звезду из title= 1 star и 2 из <span itemprop="ratingCount">2</span>

Я стараюсь следующий код

x = link_soup.find_all("div",class_='fk-stars')[0].get('title') 

print x, " product_star" 
y = link_soup.find_all("span",itemprop="ratingCount")[0].string.strip() 
print y 

, но это дает

IndexError: list index out of range

+1

Ваш код отлично работает для меня – gtlambert

+0

это ссылка, где я пытаюсь суп http://www.flipkart.com/kanika-women-s-nighty/p/itmed2yqzdgqgz3q?pid=NDNED2YQU9HPESEA&al=FvCq1Xh5FyMN11cjuYgL6MldugMWZuE7svdkPtTGUY6%2F3Fk9x0T1uX3Tym% 2F% 2F6pAalZzKUG0RUT0% 3D & ref = L% 3A9146140901050108837 & srno = p_14 & query = nighty & otracker = from-search – YAM

+0

Прекрасно работает для меня. Существуют ли какие-либо коллекции? Может быть, вы повторяете список div? – siphr

ответ

0

Содержание, которое вы видите в браузере фактически не присутствует в исходном HTML, который извлекается из this URL.

При загрузке браузера страница выполняет вызовы AJAX для загрузки дополнительного контента, который затем динамически вставляется на страницу. Один из звонков получает информацию о рейтингах, которые вы используете. В частности, this URL - это тот, который содержит HTML-код, который вставляется как «панель действий».

Но если вы извлекаете главную страницу с помощью Python, например, с requests, urllib et. al., динамический контент не загружен, и поэтому BeautifulSoup не может найти теги.

Вы можете проанализировать основную страницу, чтобы найти фактическую ссылку, получить ее, а затем запустить через BeautifulSoup. Ссылка выглядит так, как будто она начинается с /p/pv1/spotList1/spot1/actionBar, так что, возможно, actionBar достаточно, чтобы найти фактическую ссылку.

Или вы можете использовать selenium, чтобы загрузить страницу, а затем захватить и обработать визуализированный HTML.

Смежные вопросы