我在完成一个项目之前迈出了一步。据我所知,代码的所有部分都有效,我已经单独测试过了。但是,由于某种原因,输出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'
这是我作为初学者尝试解决的第一个更大的项目之一。然而,如此接近而如此困难却令人沮丧。任何帮助表示赞赏。
答案 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: