2016-11-12 13 views
0

私はESPNのWebページを解析して、BeautifulSoupを使用して、各週のNFL試合で各NFL試合をプレイしています。私はほとんどの情報を得ることができますが、私は時間情報に問題があります。BeautifulSoupテキストの間に<a></a>が返されない

何らかの理由で、aタグ間のテキストが返されていません。

のいずれかのHTMLタグがある:私は、Aタグの間に "12:00 PM" を取得するために探しています

<a data-dateformat="time1" name="&amp;lpos=nfl:schedule:time" href="/nfl/game?gameId=400874572">12:00 PM</a> 

、代わりに私が取得:

<a data-dateformat="time1" href="/nfl/game?gameId=400874572" name="&amp;lpos=nfl:schedule:time"></a> 

タグの間にテキストがありません。

ここに私がウェブページを解析するのに使ったことがあります。

import urllib2 
from bs4 import BeautifulSoup 

def parse_nfl_schedule_espn(): 

    schedule = BeautifulSoup(urllib2.urlopen("http://www.espn.com/nfl/schedule/_/week/10").read(), "lxml") 

    for date in schedule.find_all('h2'): 

     #separate by game 
     game_info = date.nextSibling.find_all('tr') 

     date = str(date).split(">") 
     date = date[1].split("<") 
     date = date[0] 

     #print date 

     for i in range(len(game_info)): 

      #separate each part of game row 
      value = game_info[i].find_all('td') 

      #iterate over <thead> 
      if len(value) > 1: 

       #away team abv 
       away = str(value[0].find('abbr')).split(">") 
       away = away[1].split("<") 
       away = away[0] 

       #home team abv 
       home = str(value[1].find('abbr')).split(">") 
       home = home[1].split("<") 
       home = home[0] 

       time = value[2].find_all('a') 

       print time 

       #print "%s at %s" % (away, home) 

if __name__ == "__main__": 

    parse_nfl_schedule_espn() 

ご協力いただきありがとうございます。

+1

この時間はjavascriptによってプローブが生成されます。 BSでそれを削ることはできません。セレンを使う必要があります – e4c5

+0

ノードを文字列に変換し、 '<'で分割することは何ですか?これは、ノードツリーとしてデータにアクセスしているBeautifulSoupの使い方全体を打ち消してしまいます。 – spectras

+0

ページ[that one](http://www.espn.com/nfl/schedule)ですか?公開ページのURLを隠している点はなく、あなたを助けるのが難しくなります。 – spectras

答えて

1

HTMLを取得するには、Seleniumのようなものを使用する必要があります。これにより、ブラウザは任意のJavascriptを実行できます。これは以下のように行うことができます。

次を表示していました
from bs4 import BeautifulSoup 
from selenium import webdriver 
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary 

def parse_nfl_schedule_espn(): 
    browser = webdriver.Firefox(firefox_binary=FirefoxBinary()) 
    browser.get("http://www.espn.com/nfl/schedule/_/week/10") 
    schedule = BeautifulSoup(browser.page_source, "lxml") 

    for date in schedule.find_all('a', attrs={'data-dateformat' : "time1"}): 
     print date.text 

if __name__ == "__main__": 
    parse_nfl_schedule_espn() 

6:00 PM 
6:00 PM 
6:00 PM 
6:00 PM 
6:00 PM 
6:00 PM 
6:00 PM 
6:00 PM 
9:05 PM 
9:25 PM 
9:25 PM 
1:30 AM 
1:30 AM 

あなたはまた、表示されているブラウザのウィンドウを表示することを避けるために、このようなPhantomJSなどの「ヘッドレス」のソリューションを調査することができます。

関連する問題