2017-07-03 10 views
1

ウェブサイトテーブルの各行がファイルの新しい行に対応し、各値が次のような個々のセルにあるcsvファイルに生成されたリストをエクスポートしようとしています。Pythonリストの値をCSVファイルに書き込む

NAME.....ICO DATE....ICO PRICE....CURR. PRICE....24 HR ROI Stratis.....06/20/16.......$0.007...........$7.480................+38.80%

電流出力は次のようになります: - あなたのexampと同じget_css_sel()

['Patientory\n05/31/17\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

、各post.textは改行\nで区切られた行のテキストが含まれています出力の1/f。したがって、追加する[post.text]は、フル行の1つの項目を含むリストを追加します。ただthelistをループする前に一度それを行う、

>>> 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を再作成しないでください。

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

例:にすることを変更します。

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) 
+0

を!また、引用符を削除するにはどうしたらいいですか?私はそれにremove()を呼び出すことはできません:AttributeError: 'NoneType'オブジェクトは属性 'remove'を持っていません – tklein

+0

あなたは引用符を削除しようとしていますか? CSVでは、 'quoting = csv.QUOTE_ALL'を実行しました。あなたは不要な引用符をしたくない場合は削除してください。また、[デフォルトの 'dialect'は 'excel'です(https://docs.python.org/3/library/csv.html#csv.writer)。これで通常は十分です。 – aneroid

+0

空行があり、 'post.text'のテキストがない場合は' if post.text: 'を' csvrows.append ... 'の前に置きます。 – aneroid

1

このコードを試してみてください。それだけです

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'//Users/Pranavtadepalli/Downloads/chromedriver') 
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 
new=[",".join(elem.split("\n")) for elem in csvrows] 
newfile=open("csvfile.csv",'r') 
newfile1=open("csvfile.csv",'w') 
newstuff=newfile.read() 
for elem in new: 
    newfile1.write(elem+'\n') 
newfile1.close() 
newfile.close() 
関連する問題