2017-04-07 5 views
1

私はPythonを使い始めました。私はCollege Football Playersでいくつかのデータを削っている学習プロジェクトに取り組んでいます。ここで美しいスープ:データ値が見出しと一致しない

</thead> 
    <tbody> 


> <tr ><th scope="row" class="right " data-stat="year_id" ><a 
> href="/cfb/years/1957.html">1957</a></th><td class="left " 
> data-stat="school_name" csk="San Jose State.1957" ><a 
> href="/cfb/schools/san-jose-state/1957.html">San Jose 
> State</a></td><td class="left " data-stat="conf_abbr" ><a 
> href="/cfb/conferences/independent/1957.html">Ind</a></td><td 
> class="center " data-stat="class" ></td><td class="center " 
> data-stat="pos" >RB</td><td class="right " data-stat="g" >10</td><td 
> class="right " data-stat="rec" >1</td><td class="right " 
> data-stat="rec_yds" >6</td><td class="right " 
> data-stat="rec_yds_per_rec" >6.0</td><td class="right " 
> data-stat="rec_td" >0</td><td class="right " data-stat="rush_att" 
> >1</td><td class="right " data-stat="rush_yds" >3</td><td class="right " data-stat="rush_yds_per_att" >3.0</td><td class="right " 
> data-stat="rush_td" >0</td><td class="right " data-stat="scrim_att" 
> >2</td><td class="right " data-stat="scrim_yds" >9</td><td class="right " data-stat="scrim_yds_per_att" >4.5</td><td class="right 
> " data-stat="scrim_td" >0</td></tr> 

は、私は私のコードを得ているどのくらいです:

headers = [item["data-stat"] for item in soup.find_all(attrs={"data-stat" : True})] 
cellStrings = [cell.find(text = True) for cell in soup.findAll('td')] 
print headers, cellStrings 

これには、次をプリントアウト:

[u'', u'header_receiving', u'header_rushing', u'header_scrimmage', u'year_id', u'school_name', u'conf_abbr', u'class', u'pos', u'g', u'rec', u'rec_yds', u'rec_yds_per_rec', u'rec_td', u'rush_att', u'rush_yds', u'rush_yds_per_att', u'rush_td', u'scrim_att', u'scrim_yds', u'scrim_yds_per_att', u'scrim_td', u'year_id', u'school_name', u'conf_abbr', u'class', u'pos', u'g', u'rec', u'rec_yds', u'rec_yds_per_rec', u'rec_td', u'rush_att', u'rush_yds', u'rush_yds_per_att', u'rush_td', u'scrim_att', u'scrim_yds', u'scrim_yds_per_att', u'scrim_td', u'year_id', u'school_name', u'conf_abbr', u'class', u'pos', u'g', u'rec', u'rec_yds', u'rec_yds_per_rec', u'rec_td', u'rush_att', u'rush_yds', u'rush_yds_per_att', u'rush_td', u'scrim_att', u'scrim_yds', u'scrim_yds_per_att', u'scrim_td'] [u'San Jose State', u'Ind', None, u'RB', u'10', u'1', u'6', u'6.0', u'0', u'1', u'3', u'3.0', u'0', u'2', u'9', u'4.5', u'0', u'San Jose State', None, None, None, None, u'1', u'6', u'6.0', u'0', u'1', u'3', u'3.0', u'0', u'2', u'9', u'4.5', u'0'] 

ウェブサイトのソースコードは次のようになります問題はいくつかの見出しがソースコードの最初に表示されるため、2つのリスト、データ、見出しが一致しないことです。

私の質問は、別にそれらを引っ張るのではなく、関連付けられた値と一緒に 'データ - 統計'を引き出すことができますか?理想的には、私はこれを辞書として引き出すだろう。

答えて

0

もしあなたが正しくあなたを得ているなら、あなたは{'data-stat-value': 'value of td'}からなる辞書が欲しいです。それは確かにそのdata-statタグに関連付けられたテキストを引っ張ってくる

data_stats = {e['data-stat']: e.get_text().strip() 
       for e in html.find_all(attrs={'data-stat': True})} 

この方法:あなたはこのような何かを行うことができます。

関連する問題