Запись данных в CSV-файл из таблицы - PullRequest
0 голосов
/ 28 августа 2018

У меня проблемы с выяснением, как записать этот файл в 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 голосов
/ 28 августа 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...