2017-11-06 3 views
1

HTMLをBeautifulSoupで解析してコードを出力するコードがあります。 Here is the source code(興味があればリンク要旨):CSVに書き込むと、各文字に独自のセルが表示されます

import csv 
import requests 
from bs4 import BeautifulSoup 
import lxml 

r = requests.post('https://opir.fiu.edu/instructor_evals/instr_eval_result.asp', data={'Term': '1175', 'Coll': 'CBADM'}) 
soup = BeautifulSoup(r.text, "lxml") 

tables = soup.find_all('table') 
print(tables) 



print(tables) 

CSVにエクスポートする前に、私のコードの出力は次のようになります。

Question No Response Excellent Very Good  
    Good Fair Poor 
    Description of course objectives and assignments 
    0.0% 76.1% 17.4% 6.5% 0.0%  
    0.0% 
    Communication of ideas and information 0.0%  
    78.3% 17.4% 4.3% 0.0% 0.0%  

私は本当にこの出力を好きで、CSVにエクスポートしたいです、

writer = csv.writer(open("C:\\Temp\\output_file.csv", 'w')) 

for table in tables: 
rows = table.find_all("tr") 
for row in rows: 
    cells = row.find_all("td") 
    if len(cells) == 7: # this filters out rows with 'Term', 'Instructor Name' etc. 
     for cell in cells: 
      print(cell.text + "\t", end="") 
      writer.writerow(cell.text) 
     print("") # newline after each row 
print("-------------") # table delimiter 

残念ながら、それぞれの単一のユニークな文字や文字は、独自のセルを有するでこのコードの結果:

私は、次を追加しました

error

だから私の質問はこれです:それは適切にそれぞれすべての文字のための新しいセルを追加することなく、CSVファイルへの出力をエクスポートするようにどのように私はこのコードを修正することができますか?私はそれがなぜこれをしているのか正確にはわかりません。また、最初のテーブルをエクスポートして、コード内の他のすべてのデータを無視するように見えるだけです。

答えて

2

cell.textは文字列ですが、writerowはデータの反復可能性を必要とするため、各要素を独自のセルに書き込むことができます。あなたがリストを渡したので、各文字は別々の要素として扱われ、別々のセルに書き込まれます。

あなたはそれが働いて取得するので、あなたは、文字列のリストを渡している文字列の周りに[]をラップする必要があります:

writer.writerow([cell.text]) 
+0

https://imgur.com/a/3Sq4bすごいです!今はもっと良く見えます。列Bの分類(良い、公正、悪いなど)の横にパーセンテージを得るための簡単な方法はありますか? –

+1

@JSowwyはい、それを行う方法があります。ラベルと%sを別々のリストにロードする必要があります。次に、あなたは 'zip'して各ペアでwriterowを呼び出します。コードが必要な場合は、私の答えを受け入れ、新しい質問を開いてください。ありがとう。 –

+0

私はあなたの答えを受け入れましたが、私はもうしばらく質問をすることはできません。 「最後の質問をしてから0日後です。もう一度聞く前に4日待つようにお願いします。 –