Экспорт в файл CSV - PullRequest
       38

Экспорт в файл CSV

0 голосов
/ 03 июня 2018

Я пытаюсь экспортировать результаты этого кода в файл CSV.Я скопировал 2 результата ниже, после кода.Для каждой акции есть 14 позиций, и я хотел бы записать в файл CSV и иметь столбец для каждой из 14 позиций и одну строку для каждой акции.

import requests
from bs4 import BeautifulSoup

base_url = 'http://finviz.com/screener.ashx?v=152&s=ta_topgainers&o=price&c=0,1,2,3,4,5,6,7,25,63,64,65,66,67'
html = requests.get(base_url)
soup = BeautifulSoup(html.content, "html.parser")
main_div = soup.find('div', attrs = {'id':'screener-content'})
table = main_div.find('table')
sub = table.findAll('tr')
rows = sub[5].findAll('td')
for row in rows:
    link = row.a
    if link is not None:
        print(link.get_text())

Это формат результатов, 14 элементов / столбцов для каждой акции.

PTN
Palatin Technologies, Inc.
Healthcare
Diagnostic Substances
USA
240.46M
9.22
193.43M
2.23M
0.76
1.19
7.21%
1,703,285
3
LKM
Link Motion Inc.
Technology
Application Software
China
128.95M
-
50.40M
616.76K
1.73
1.30
16.07%
1,068,798
4

Попробовал это, но не смог заставить это работать.

TextWriter x = File.OpenWrite ("my.csv", ....);

x.WriteLine("Column1,Column2"); // header
x.WriteLine(coups.Cells[0].Text + "," + coups.Cells[1].Text);

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Это должно работать:

import requests
from bs4 import BeautifulSoup

base_url = 'http://finviz.com/screener.ashx?v=152&s=ta_topgainers&o=price&c=0,1,2,3,4,5,6,7,25,63,64,65,66,67'
html = requests.get(base_url)
soup = BeautifulSoup(html.content, "html.parser")
main_div = soup.find('div', attrs = {'id':'screener-content'})

light_rows = main_div.find_all('tr', class_="table-light-row-cp")
dark_rows = main_div.find_all('tr', class_="table-dark-row-cp")

data = []
for rows_set in (light_rows, dark_rows):
    for row in rows_set:
        row_data = []
        for cell in row.find_all('td'):
            val = cell.a.get_text()
            row_data.append(val)
        data.append(row_data)

#   sort rows to maintain original order
data.sort(key=lambda x: int(x[0]))

import pandas
pandas.DataFrame(data).to_csv("AAA.csv", header=False)

Несколько вещей здесь:

  1. Я использовал «table- [light | dark] -row-cp», потому что все строки интереса имелиодин из этих классов (и ни у каких других строк их не было)
  2. Есть две отдельные части: одна - выборка данных в правильной структуре, другая - запись файла CSV.
  3. Я использовал pandas CSV Writer,потому что я знаком с этим, но когда у вас есть прямоугольные данные (называемые здесь «данными»), вы можете использовать любой другой писатель CSV
  4. Никогда не следует называть переменные с зарезервированными именами, например, «sub» или «link».':)

Надеюсь, это поможет.

0 голосов
/ 03 июня 2018

Почему бы вам не использовать встроенный csv.writer ?

...