2016-12-10 144 views
0

我是完成項目之前的一步。據我所知,代碼的所有部分都起作用,並且我已經分別對它們進行了測試。但是,出於某種原因,輸出CSV仍爲空。我的代碼:CSV輸出爲空

import requests, bs4, csv, sys 

reload(sys) 
sys.setdefaultencoding('utf-8') 

url = 'http://www.constructeursdefrance.com/resultat/?dpt=01' 
count = 1 

def result(): 
    res = requests.get(url) 
    res.raise_for_status() 
    soup = bs4.BeautifulSoup(res.text,'html.parser') 
    links = [] 
    try:  
     for div in soup.select('.link'): 
      link = div.a.get('href') 
      links.append(link) 

     with open('french.csv', 'wb') as file: 
      writer = csv.writer(file) 
      for i in links: 
       res2 = requests.get(i) 
       soup2 = bs4.BeautifulSoup(res2.text, 'html.parser') 
       for each in soup2.select('li > strong'): 
        writer.writerow([each.text, each.next_sibling]) 

    except: 
     pass 

while not url.endswith('?dpt=010'): 
    print 'downloading %s' %url 
    result() 
    count += 1 
    url = 'http://www.constructeursdefrance.com/resultat/?dpt=0' + str(count) 

url = 'http://www.constructeursdefrance.com/resultat/?dpt=10' 
count = 10 
while not url.endswith('?dpt=102'): 
    print 'downloading %s' %url 
    result() 
    count += 1 
    url = 'http://www.constructeursdefrance.com/resultat/?dpt=' + str(count) 

print 'done' 

這真的是我嘗試作爲初學者解決的第一大項目之一。然而,如此接近卻如此卡住令人沮喪。任何幫助表示讚賞。

+1

我猜你在嘗試有一個例外塊,而except:pass不會告訴你它是什麼。如果異常對代碼的邏輯非常重要,請不要使用except:pass。 – TigOldBitties

回答

0

首先,不要使用嘗試除了在一個大塊,只是在一個小地方使用。 如果你嘗試不同的聲明發表評論,此錯誤將提高:

Traceback (most recent call last): 
    File "/home/li/PycharmProjects/tw/1.py", line 29, in <module> 
    result() 
    File "/home/li/PycharmProjects/tw/1.py", line 26, in result 
    writer.writerow([each.text, each.next_sibling]) 
TypeError: a bytes-like object is required, not 'str' 

與此錯誤信息是明確的,當它寫入文件,它需要一個bytes_like對象,你可以檢查該文件已打開在「WB」模式,「b」代表字節模式,所以這個問題是清楚的,只是改變模式需要一個str_like對象正常模式:

with open('french.csv', 'w') as file: