Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Python循环以不同的行写入CSV?_Python_Csv_Selenium - Fatal编程技术网

如何使Python循环以不同的行写入CSV?

如何使Python循环以不同的行写入CSV?,python,csv,selenium,Python,Csv,Selenium,我是Python新手,我有一个脚本,可以根据我想要的代码获取雅虎金融公司的名称、行业和行业信息,所有内容都会在不同的单元格中写入CSV,但只在一行中。如何使每个excel行按我输入的股票代码显示公司名称、行业和行业 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC fr

我是Python新手,我有一个脚本,可以根据我想要的代码获取雅虎金融公司的名称、行业和行业信息,所有内容都会在不同的单元格中写入CSV,但只在一行中。如何使每个excel行按我输入的股票代码显示公司名称、行业和行业

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

def get_all():
    results = []
    for x in tickers:
        try:
            website = "http://finance.yahoo.com/quote/{0}/profile?p={0}".format(x)
            driver = webdriver.Chrome()
            driver.get(website)
            wait = WebDriverWait(driver, 10)
            company = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="main-0-Quote-Proxy"]/section/div[2]/section/div/div[1]/div/h3')))
            results.append(company.text)
            wait = WebDriverWait(driver, 10)
            sector = wait.until(EC.visibility_of_element_located((By.XPATH, "//span[. = 'Sector']/following-sibling::strong")))
            results.append(sector.text)
            wait = WebDriverWait(driver, 10)
            industry = wait.until(EC.visibility_of_element_located((By.XPATH, "//span[. = 'Industry']/following-sibling::strong")))
            results.append(industry.text)
            driver.close()
        except Exception as e: 
            error_msg = "Error on {0}-{1}".format(x,e) 
            results.append(error_msg)
            driver.close()
    print(results)
    out = csv.writer(open("yahoo_companies.csv","w"), delimiter=',',quoting=csv.QUOTE_ALL)
    out.writerow(results)

# Enter tickers below
tickers = ['COST', 'BBY']
get_all()
例如,我希望它给我(每个分号都是不同的单元格):

第1行:好市多批发公司;服务;打折,杂货店

第二行:百思买股份有限公司。;服务;电子商店

第三行:等等


现在我得到(全部在第一排):好市多批发公司;服务;折扣店、杂货店;百思买股份有限公司。;服务;Electronics商店

在每行末尾,您应该有一个换行符(\n\r),以便CSV编辑程序理解

如果将每一行添加到自己的列表中并将其附加到主“结果”列表中,writerows将为每个元素添加行终止

请参阅下面的代码

def get_all():
    results = []
    for x in tickers:
        # declare a new list to hold the values in each row
        newRow = []
        try:
            website = "http://finance.yahoo.com/quote/{0}/profile?p={0}".format(x)
            driver = webdriver.Chrome()
            driver.get(website)
            wait = WebDriverWait(driver, 10)
            company = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="main-0-Quote-Proxy"]/section/div[2]/section/div/div[1]/div/h3')))
            # appending to newRow list
            newRow.append(company.text)
            wait = WebDriverWait(driver, 10)
            sector = wait.until(EC.visibility_of_element_located((By.XPATH, "//span[. = 'Sector']/following-sibling::strong")))
            # appending to newRow list
            newRow.append(sector.text)
            wait = WebDriverWait(driver, 10)
            industry = wait.until(EC.visibility_of_element_located((By.XPATH, "//span[. = 'Industry']/following-sibling::strong")))
            # appending to newRow list
            newRow.append(industry.text)
            driver.close()
        except Exception as e: 
            error_msg = "Error on {0}-{1}".format(x,e) 
            # appending to newRow list
            newRow.append(error_msg)
            driver.close()
        # append the newRow list into 'results list'
        results.append(newRow)
    print(results)
    outFile = open("yahoo_companies.csv","w")
    out = csv.writer(outFile, delimiter=',',quoting=csv.QUOTE_ALL)
    # see the following line, its writerows (plural). different to your code.
    out.writerows(results)
    outFile.close()

检查缩进和
result
声明。问一个小问题,为什么要使用请求来代替selenium?顺便说一句,如果你使用API会更好谢谢你的提示!另外,我正在学习我听说要快得多的请求。@wu4m4n:您发布的链接以字典形式显示了所有公司信息。如何在新脚本中获取此信息?