2017-02-09 38 views
0

私はWikipediaからリストを印刷して(.csvとして)保存しようとしています。自分のコードでどこが間違っているのか分かりません。助言がありますか?Wikipediaから.csvリストを印刷して保存する方法

import requests 
from bs4 import BeautifulSoup 

result = requests.get("https://en.wikipedia.org/wiki/List_of_Game_of_Thrones_episodes") 
result 

page = result.content 
soup = BeautifulSoup(page, "lxml") 
soup 

table = soup.find("table", {"class" : "wikitable plainrowheaders wikiepisodetable"}) 
table 

    f = open('output.csv', 'w') 
    for row in table.findAll("th"): 
     cells = row.findAll("td") 
     if len(cells) == 7: 

      No_overall = cells[0].find(text = True) 

      No_in_season = cells[1].find(text = True) 

      Title = cells[2].find(text = True) 

      Directed_by = cells[3].find(text = True) 

      Written_by = cells[4].find(text = True) 

      Original_air_date = cells[5].find(text = True).replace(',','') 

      US_viewers = cells[6].find(text = True).replace('.','') 

      line = No_overall + "," + No_in_season + "," + Title + "," +   
    Directed_by +"," + Written_by + "," + Original_air_date + "," +  
    US_viewers + "\n" 

      print(line) 

      f.write(write_to_file) 
+0

何が問題になりますか?コードのどの部分が期待通りに機能していないのですか –

+0

私の教授はlen(セル)はこのテーブルでは7ではないと言いました。 len(cells)==(行、列)のようにコードを書くことはできますか?それは私に全データテーブルを与えるだろうか? –

答えて

0

for row in table.findAll("th"):が正しくありません。 trは、テーブル内のセルの行です。あなたはfindAll("th")

for row in table.findAll("tr"):に変更し、それをからtd情報を取得望めないし、あなたのコードは

2つのヘッダーセルおよび2つのデータセルを持つ単純なHTMLテーブルをチェックしてください動作します:

<table> 
    <tr> 
    <th>Month</th> 
    <th>Savings</th> 
    </tr> 
    <tr> 
    <td>January</td> 
    <td>$100</td> 
    </tr> 
    <tr> 
    <td>February</td> 
    <td>$80</td> 
    </tr> 
</table> 

編集を: 例として1行出力を取る:

<tr class="vevent" style="text-align:center;background:inherit"> 
<th id="ep9" scope="row" style="text-align:center">9</th> 
<td>9</td> 
<td class="summary" style="text-align:left">"<a href="/wiki/Baelor" title="Baelor">Baelor</a>"</td> 
<td><a href="/wiki/Alan_Taylor_(director)" title="Alan Taylor (director)">Alan Taylor</a></td> 
<td>David Benioff &amp; D. B. Weiss</td> 
<td>June 12, 2011<span style="display:none"> (<span class="bday dtstart published updated">2011-06-12</span>)</span></td> 
<td>2.66<sup class="reference" id="cite_ref-26"><a href="#cite_note-26">[26]</a></sup></td> 
</tr> 

ありがとうございます tdタグ

+0

私はそれを 'tr'に変更し、同じ問題を抱えています。どうやら、 'len(cells)== 7'は間違っています。 Pythonが(行、列)を認識するか、実際の表のセルの数を入れるべきですか?私は細胞の長さがカラム数であるという印象を受けました。ありがとうございました。 –

+0

@SarahMcNamaraそれは7以外の6です。行を印刷して見ることができます。 – haifzhan

+0

ありがとうございます。 7の代わりに6を使用すると、データが失われるというエラーが表示されます。私は、11の行と77の合計セルがあるので、11行を使ってみました。空の.csvファイルがまだ残っています。私はまだ私のコードに何が間違っているか見ることはできません。 –

関連する問題