2017-12-09 24 views
0

https://letterboxd.com/shesnicky/list/top-50-favourite-films/からこのhtmlスニペットで、私はすべての異なるliタグを調べ、 'data-target-link'から情報を取得しようとしています。その映画のページに私を連れていく新しいリンクですが、データを取得しようとするたびにNoneまたはそれらの行に沿ったエラーが返されます。タグ値を取得しようとしたときにnoneが返される

<li class="poster-container numbered-list-item" data-owner-rating="10"> <div class="poster film-poster really-lazy-load" data-image-width="125" data-image-height="187" data-film-slug="/film/donnie-darko/" data-linked="linked" data-menu="menu" data-target-link="/film/donnie-darko/" > <img src="https://s3.ltrbxd.com/static/img/empty-poster-125.c6227b2a.png" class="image" width="125" height="187" alt="Donnie Darko"/><span class="frame"><span class="frame-title"></span></span> </div> <p class="list-number">1</p> </li>

私はTwitterのボットのためIMGSをつかむためにリンクを使用するつもりですので、私は自分のコード内でこれをやってみました:

class BotStreamer(tweepy.StreamListener): 

    print "Bot Streamer" 
    #on_data method of Tweepy’s StreamListener 
    #passes data from statuses to the on_status method 
    def on_status(self, status): 
     print "on status" 
     link = 'https://letterboxd.com/shesnicky/list/top-50-favourite-films/' 
     page = requests.get(link) 
     soup = BS(page.content, 'html.parser') 
     movies_ul = soup.find('ul', {'class':'poster-list -p125 -grid film-list'}) 

     movies = [] 
     for mov in movies_ul.find('data-film-slug'): 
      movies.append(mov) 

     rand = randint(0,51) 
     newLink = "https://letterboxd.com%s" % (str(movies[rand])) 
     newPage = requests.get(newLink) 
     code = BS(newPage.content, 'html.parser') 
     code_div = code.find\ 
        ('div', {'class':'react-component film-poster film-poster-51910 poster'}) 

     image = code_div.find('img') 
     url = image.get('src') 

     username = status.user.screen_name 
     status_id = status.id 
     tweet_reply(url, username, status_id) 

しかし、私は保たれリストが範囲外であることに関するエラーを取得するか、NoneTypeを反復処理できないようにします。

import requests 
from bs4 import BeautifulSoup as BS 

link = 'https://letterboxd.com/shesnicky/list/top-50-favourite-films/' 
page = requests.get(link) 
soup = BS(page.content, 'html.parser') 
movies_ul = soup.find('ul', {'class':'poster-list -p125 -grid film-list'}) 
more = movies_ul.find('li', {'class':'poster-container numbered-list-item'}) 
k = more.find('data-target-link') 
print k 

そして再び、私が得るすべてはNoneです。だから私は、私は何とかデータを取得することができればちょうど確認するためにテストprgrmを作りました。どんな助けでも大歓迎です。

+0

を行うことができます。何を手に入れますか? –

+0

movies_ulは、50枚の映画すべてにhtmlを含む完全なulタグを与えます。さらに印刷すると、最初の映画のliタグが表示されます – Nicky

答えて

1

第1引数として、doc:find()には属性ではなくタグ名が必要です。

あなたは `movies_ul`、` more`を印刷してみ

soup.find('div', {'data-target-link': True}) 

または

soup.find(attrs={'data-target-link': True}) 

全例

import requests 
from bs4 import BeautifulSoup as BS 

link = 'https://letterboxd.com/shesnicky/list/top-50-favourite-films/' 
page = requests.get(link) 
soup = BS(page.content, 'html.parser') 

all_items = soup.find_all('div', {'data-target-link': True}) 

for item in all_items: 
    print(item['data-target-link']) 
+0

それは意味があり、完璧に動作します、ありがとう! – Nicky

関連する問題