2017-05-10 8 views
0

編集2:美しいスープとリストの問題

だから、問題はそれがStatsリンクに遭遇しなかったとき、私は、それを書いた方法は、それは単に完全for loop飛ばしので、問題のfor loopは走ったことがないです。私は以下のように少しリファクタリングしました。私はそれを行う最も効率的な方法がわからないが、それは動作します。私は新しい質問を投稿して、これを書くより良い、きれいな方法があるかどうかを判断するかもしれません。

 for span in team.find_all("span"): 
      stats = span.find_all("a", href=True, text='Stats') 
      if stats: 
       for team_stats in stats: 
        team_stats_list.append(team_stats.get('href')) 
      else: 
       team_stats_list.append("NO STATS") 
     print(team_stats_list) 

以下の初期のポスト...

私はこのコードのスニペットでは意図していますように私の追記が動作しない理由を私は理解することはできません。

 for team_stats in team.find_all("a", href=True, text='Stats'): 
      stats_available = team_stats.get('href') 
      if stats_available: 
       team_stats_list.append(stats_available) 
      else: 
       team_stats_list.append("NO STATS") 
     print(team_stats_list) 

基本的に、私は実際にがあり、Statsのテキストがstats_available変数に入れられていることを確認してください。

ある場合は、単にstats_available変数をリストに追加します。変数が空の場合、代わりにテキストNO STATSを追加したいと思います。

コードが正しく廃棄され、href(利用可能な場合)が問題にならないようにしています。問題は、Statsというhrefが存在しない場合、NO STATSというテキストが付加されていない場合です。リストは単に空です。

編集1 - 全体の機能これまで:

source = urllib.request.urlopen('http://www.espn.com/college-football/teams').read() 
    soup = bs.BeautifulSoup(source, "lxml") 
    page_source = soup.find_all("div", {"class": "mod-container mod-open-list mod-teams-list-medium mod-no-footer"}) 
    for conference in page_source: 
     conference_title = conference.div.h4.text 
     team_name_list = [] 
     team_clubhouse_list = [] 
     team_stats_list = [] 
     print(conference_title) 

     for team in conference.find_all("ul", {"class": "medium-logos"}): 
      for team_title in team.find_all('h5'): 
       team_name_list.append(team_title.text) 
      print(team_name_list) 

     for team clubhouse in team.find_all("a", {"class": "bi"}): 
       team_clubhouse_list.append(team_clubhouse.get('href')) 
      print(team_clubhouse_list) 

     for team_stats in team.find_all("a", href=True, text='Stats'): 
       stats_available = team_stats.get('href') 
       if stats_available: 
        team_stats_list.append(stats_available) 
       else: 
        team_stats_list.append("NO STATS") 
      print(team_stats_list) 
+0

あなたがスクラップしようとしているURLは何ですか? – wpercy

+0

あなたが期待しているものであることを確かめるために解析しているHTMLコードをチェックしてください(例えば、ウェブサーバがユーザエージェントに基づいて異なる応答を送るなど) –

+0

@wpercy最初の質問で書かれている限り、 – Biggen

答えて

0
import urllib.request 
from bs4 import BeautifulSoup 

source = urllib.request.urlopen('http://www.espn.com/college-football/teams').read() 
soup = BeautifulSoup(source, "lxml") 
page_source = soup.find_all("div", {"class": "mod-container mod-open-list mod-teams-list-medium mod-no-footer"}) 
for conference in page_source: 
    conference_title = conference.div.h4.text 
    team_name_list = [] 
    team_clubhouse_list = [] 
    team_stats_list = [] 
    print(conference_title) 
    for team in conference.find_all("ul", {"class": "medium-logos"}): 
     for team_title in team.find_all('h5'): 
      team_name_list.append(team_title.text) 

     print(team_name_list) 
     for team_clubhouse in team.find_all("a", {"class": "bi"}): 
      team_clubhouse_list.append(team_clubhouse.get('href')) 

     print(team_clubhouse_list) 
     for team_stats in team.find_all("a", href=True, text='Stats'): 
      stats_available = team_stats.get('href') 
      team_stats_list.append(stats_available) 


     if(len(team_stats_list)==0): 
      team_stats_list.append("NO STATS") 

     print(team_stats_list) 
0

だから、問題は、私はそれを書いたやり方ので、走ったことがない問題のforループです。 Statsリンクに遭遇しなかったとき、単にforループ全体をスキップしました。私は以下のように少しリファクタリングしました。私はそれを行う最も効率的な方法がわからないが、それは動作します。私は新しい質問を投稿して、これを書くより良い、きれいな方法があるかどうかを判断するかもしれません。

for span in team.find_all("span"): 
     stats = span.find_all("a", href=True, text='Stats') 
     if stats: 
      for team_stats in stats: 
       team_stats_list.append(team_stats.get('href')) 
     else: 
      team_stats_list.append("NO STATS") 
    print(team_stats_list)