2016-12-10 2 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

Я предполагаю, что у вас есть исключение в вашей попытке block, а за исключением: pass не сообщает вам, что это такое. Никогда не используйте кроме: 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: