2017-04-04 109 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行將是」 3,0「)

+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])