2016-07-27 5 views
0

私はドラフトの順番でテーブルをこすりしようとしています背景色(丸数字の隣に「*」が付いたもの)。次のようにすることができます私が引かれているデータのみが異なると行からなるという問題が生じています<a href="https://en.wikipedia.org/wiki/2012_NFL_Draft" rel="nofollow">this wikipedia page</a></p> <p>からわずかスクレイプのPythonとテーブルの一部とBS4

私のコードは次のとおりです。

ため if len(cols) == 9:条件のだ
wikiURL = "https://en.wikipedia.org/wiki/2012_NFL_Draft" 

#create array to store player info in 
teams_players = [] 

# request and parse wikiURL 
r = requests.get(wikiURL) 
soup = BeautifulSoup(r.content, "html.parser") 

#find table in wikipedia 
playerData = soup.find('table', {"class": "wikitable sortable"}) 

for row in playerData.find_all('tr'): 
    cols = row.find_all('td') 

    if len(cols) == 9: 

     teams_players.append((cols[3].text.strip(), cols[4].text.strip())) 

for team, player in teams_players: 
    print('{:35} {}'.format(team, player)) 
+0

ソースHTMLを見ると、table-> tr-> tdよりも少し複雑な構造になっていることがわかります。より複雑に解析する必要があります。 – Compadre

答えて

1

。以下を行う必要があります。

  • は、すべてのtr
  • 内側の両方tdthの要素の外観はあまり6

固定バージョンよりも数と行をスキップ

  • 最初のヘッダー行をスキップ
    for row in playerData.find_all('tr')[1:]: 
        cols = row.find_all(['td', 'th']) 
        if len(cols) < 6: 
         continue 
        teams_players.append((cols[5].text.strip(), cols[6].text.strip())) 
    

    印刷:

    QB         Stanford 
    QB         Baylor 
    ... 
    RB         Abilene Christian 
    QB         NIU 
    
  • +0

    これはうまくいきますが、 '(len(cols)== 9 :) if'条件の何が間違っていましたか?各行の列数は一定ではありませんか? – Michael

    +1

    @Michael nopeでは、 'th'と' td'の両方の要素が行内のセルを表現するのに使われているのを見てください。 – alecxe

    関連する問題

     関連する問題