我在弄清楚如何将此文件写入csv时遇到麻烦。我正在从表中解析数据,并且可以正常打印,但是当我尝试写入csv文件时,出现错误“ TypeError:write()参数必须为str,而不是list”。我不确定如何将数据指向字符串。
代码:
from bs4 import BeautifulSoup
import urllib.request
import csv
html = urllib.request.urlopen("https://markets.wsj.com/").read().decode('utf8')
soup = BeautifulSoup(html, 'html.parser') # parse your html
filename = "products.csv"
f = open(filename, "w")
t = soup.find('table', {'summary': 'Major Stock Indexes'}) # finds tag table with attribute summary equals to 'Major Stock Indexes'
tr = t.find_all('tr') # get all table rows from selected table
row_lis = [i.find_all('td') if i.find_all('td') else i.find_all('th') for i in tr if i.text.strip()] # construct list of data
f.write([','.join(x.text.strip() for x in i) for i in row_lis])
有什么建议吗?
答案 0 :(得分:1)
w.write()
仅将字符串作为参数,但是您将字符串列表传递给它。
csv.writerows()将列表写入csv
文件。
将文件句柄f
更改为:
f = csv.writer(open(filename,'wb'))
并通过将最后一行替换为:
f.writerows([[x.text.strip() for x in i] for i in row_lis])
将产生一个csv
,其内容为: