将python列表值写入csv文件

时间:2017-07-03 02:37:04

标签: python csv selenium

我尝试将生成的列表导出到csv文件,其中网站表中的每一行对应于文件中的新行,并且每个值都在单个单元格中,例如:

  

NAME ..... ICO DATE .... ICO PRICE .... CURR。价格...... 24人力资源投资回报率   STRATIS ..... 16年6月20日....... $ 0.007 ........... $ 7.480 + ................ 38.80%

当前输出如下:

  

[' Patientory \ N05 /一十七分之三十一\ n $的0.104 \ N $ 0.274 \ N + 46.11%\ N + 25.54%\ NN / A']

import csv
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait

csvrows = []

def get_css_sel(selector):
    posts = browser.find_elements_by_css_selector(selector)
    for post in posts:
        print(post.text)
        csvrows.append([post.text])

browser = webdriver.Chrome(executable_path=r'C:\Scrapers\chromedriver.exe')
browser.get("https://icostats.com")
wait(browser, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#app > div > div.container-0-16 > div.table-0-20 > div.tbody-0-21 > div:nth-child(2) > div:nth-child(8)")))

get_css_sel("#app > div > div.container-0-16 > div.table-0-20 > div.tableheader-0-50")              #fetch header of table
get_css_sel("#app > div > div.container-0-16 > div.table-0-20 > div.tbody-0-21 > div")              #fetch rows of table

def create_csv(thelist):
    with open('ICO.csv', 'w') as myfile:
        for i in thelist:
            wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
            wr.writerow([i])

create_csv(csvrows)

2 个答案:

答案 0 :(得分:2)

get_css_sel()中,每个post.text包含由换行符\n分隔的行文本 - 与输出示例相同。因此,附加[post.text]会在整个行附加一个包含单个项目的列表。将其更改为:

csvrows.append(post.text.split('\n'))  # remove the extra list brackets
                                       # since split returns a list.

例如:

>>> y = 'Patientory\n05/31/17\n$0.104\n$0.274\n+46.11%\n+25.54%\nN/A'
>>> y.split('\n')
['Patientory', '05/31/17', '$0.104', '$0.274', '+46.11%', '+25.54%', 'N/A']

此外,在您的编写循环中,您不应为每一行重新创建csv.writer,只需在循环thelist之前执行一次。

由于您在csvrows中拥有了所需的所有行,因此您可以直接使用csvwriter.writerows

def create_csv(thelist):
    with open('ICO.csv', 'w') as myfile:
        wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
        wr.writerows(thelist)

答案 1 :(得分:1)

试试这段代码:

//li[contains(text(),'Next')]