CSV输出为空

时间:2016-12-10 15:32:49

标签: python csv web-scraping beautifulsoup

我在完成一个项目之前迈出了一步。据我所知,代码的所有部分都有效,我已经单独测试过了。但是,由于某种原因,输出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 个答案:

答案 0 :(得分:0)

首先,不要在大块中使用try,只需在小地方使用即可。 如果你评论你尝试except语句,这个错误会引发:

  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对象,您可以检查您打开的文件是否在&#39; wb&#39;模式,&#39; b&#39;表示字节模式,所以问题很明显,只需将模式更改为需要str_like对象的正常模式:

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