将抓取的数据写入CSV

Ziggahunhow

我一直在试图将我抓取的数据传输到csv文件中。这是我的代码:

import requests, bs4, csv, sys
reload(sys)
sys.setdefaultencoding('utf-8')
url = 'http://www.constructeursdefrance.com/resultat/?dpt=01'

res = requests.get(url)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text,'html.parser')
links = []

for div in soup.select('.link'):
    link = div.a.get('href')
    links.append(link)
for i in links:
    url2 = i
    res2 = requests.get(url2)
    soup2 = bs4.BeautifulSoup(res2.text, 'html.parser')
    for each in soup2.select('li > strong'):
        data = each.text, each.next_sibling
    with open('french.csv', 'wb') as file:
        writer = csv.writer(file)
        writer.writerows(data)

输出显示:

Traceback (most recent call last):
File "test_new_project.py", line 23, in <module>
writer.writerows(data)
csv.Error: sequence expected

但是我正在尝试将元组放入csv文件中,并且只要我知道csv接受元组和列表即可。我该如何解决这个问题?

凯文·谢伦伯格

Atirag是正确的,但是您还有另一个问题,就是打开输出文件的with调用嵌套在for循环中。因此,如果有多个链接,则每次都将覆盖该文件,并且输出将不会达到您的期望。我认为这应该生成您想要的输出:

for div in soup.select('.link'):
    link = div.a.get('href')
    links.append(link)

with open("french.csv", "w") 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])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章