从表抓取将数据写入CSV文件

时间:2018-08-28 17:50:10

标签: python-3.x beautifulsoup

我在弄清楚如何将此文件写入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])

有什么建议吗?

1 个答案:

答案 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,其内容为:

enter image description here