2017-04-04 3 views
0

次のコードは、名前変数とアドレス変数をcsvファイルに書き込めません。数字や単語、または "書き込み"変数を使ってテストすると、これらはcsvに記録されますが、 "Writeaddress"と "WriteName"は*ではありません(また、これらの変数の元のソースを使用すると、空白)Writerowがcsvファイルにいくつかの変数を出力しない

import requests, sys, pyperclip, bs4, csv 
StationList = open('CTA Station Addresses.csv', 'w', newline='') 
StationWrite = csv.writer(StationList) 
for i in range(149): 
    id = str(i) 
    res = requests.get('http://www.transitchicago.com/travel_information /station.aspx?StopId=' + id) 
    res.raise_for_status() 
    Station = bs4.BeautifulSoup(res.text) 
    Name = Station.select('.rtehdng') 
    Address = Station.select('#ctl07_divAddress') 
    Write = 0 
    if Name == []: 
     print('missing name') 
     Write = 1 
    else: 
     #print(Name[0].getText()) 
     WriteName = Name[0].getText() 
     pass 
    if Address == []: 
     print('missing address') 
     Write = 1 
    else: 
     #print(Address[0].getText()) 
     WriteAddress = Address[0].getText() 
     pass 
    if Write == 0: 
     StationWrite.writerow([Write, WriteName, WriteAddress]) 
    Write = 0 
StationList.close() 

*(私は "writerows([3、Writenameを書く]およびCSVの行はなります行うことができます)"「、0、3)

+0

あなたはコメントアウトされた印刷ステートメントと、コメントされていない別のステートメントを参照してください。それらは何を印刷しますか? – zondo

+0

はい、*デバッグトレースからの出力を表示してください! – Prune

+0

私はあなたのコードを、URLからスペースを取り除くなどのいくつかの微調整を行い、 'WriteName'と' WriteAddress'の値を取得しました。彼らは改行を含んでいたので、CSVは少し奇妙に見えましたが、彼らはそこにいました。私は問題を再現できません。あなたはこのスクリプトを実行しましたか? – tdelaney

答えて

0

私はあなたのエラーを再現することができませんでしたが、取得したデータには、csvを奇妙に見せる改行やスペースが埋め込まれています。私はスクリプトをクリーンアップし、csvを書き込む前にデータをスクラブし、ステーションのアドレスエントリで終わった。 Writeを書く必要はありませんでした。なぜなら、あなたのスクリプトでは常に0だったので、代わりに例外処理を利用しているので、私の中には存在しません。

import requests, sys, pyperclip, bs4, csv 

with open('CTA Station Addresses.csv', 'w', newline='') as StationList: 
    StationWrite = csv.writer(StationList) 
    for i in range(149): 
     _id = str(i) 
     res = requests.get('http://www.transitchicago.com/travel_information/station.aspx?StopId=' + _id) 
     res.raise_for_status() 
     Station = bs4.BeautifulSoup(res.text, 'lxml') 
     try: 
      name = Station.select('.rtehdng')[0].getText().strip() 
      address = Station.select('#ctl07_divAddress')[0].getText().splitlines()[-1].strip() 
     except IndexError as e: 
      print("No data for station", _id) 
      continue 
     if not name or not address: 
      print('Empty elements for station', _id) 
      continue 
     print(repr(name), repr(address)) 
     StationWrite.writerow([name, address]) 
関連する問題