我正在尝试使用 xlsxwriter 将数据抓取到一个 .xls 文件中,但它自己将数据写入 sheet 5 次而不是一次

I'm trying to scrape data into an .xls file with xlsxwriter but the data its self writes to the sheet 5 times instead of just once

我可以从我的网页向 excel sheet 写入我需要的重要数据,但它在移动到我的下一个 Ticker 符号之前向它写入了 6 次"Tickers.csv" 循环。

Values[0]<==(numbers) 是写入 5 次的数据,我不确定为什么。 Values2[0]<==(letters) 只写一次,这也是我希望 values[0] 也能做到的。

示例,

Values2[0] = Apple Inc, AAPL

值[0] = 123 123 123 123 123 123

Values[0] should equal this in my train of thought:

Values[0] = 123

我的代码是这样写的sheet:

苹果公司,AAPL

123

123

123

123

123

123

国际商用机器公司,IBM

456

456

456

456

456

456

我希望 sheet 变成这样,但不明白为什么不是这样:,

苹果公司,AAPL

123

国际商用机器公司,IBM

456

我正在使用 XPath 将数据抓取到 sheet 中,所以我知道将它放到 sheet 中的唯一方法是添加索引(即值 [0 ] 而不仅仅是值)。当我不添加索引时,我收到一条错误消息,提示我不允许编写列表。

如果您需要有关我的情况的更多信息,请询问并感谢您的宝贵时间。

def main(): 导入 csv 导入 os 从 selenium 导入 webdriver 从硒导入 webdriver

                chrome_path = r"C:\chromedriver\chromedriver.exe"
                browser = webdriver.Chrome(chrome_path)


                stocks_arr =[]
                pfolio_file = open("tickers.csv", "r")
                for line in pfolio_file:
                    indv_stock_arr = line.strip().split(",")
                    stocks_arr.append(indv_stock_arr)

                stock_info_arr = []

                for stock in stocks_arr:
                    stock_info = []
                    ticker = stock[0]
                    stock_info.append(ticker)

                    url="https://finance.yahoo.com/quote/{0}?p={0}&.tsrc=fin-srch".format(ticker)

                    browser.get(url)

                    try:
                        values_elementticker = browser.find_elements_by_xpath("//div[@class='D(ib) ']")

                        values2 = [x.text for x in values_elementticker]
                        print(values2[0])
                    except IndexError:
                            with open("results2.xls", "a") as f:
                                for i in range(len(values2)):
                                    f.write(values2[0] + "\n")
                    try:    
                        values_element = browser.find_elements_by_xpath("//span[@class='Trsdu(0.3s) ']")
                        values = [x.text for x in values_element]
                        print(values[0])
                    except IndexError:
                            with open("results2.xls", "a") as f:
                                    f.write("-" + "\n")     
                    with open("results2.xls", "a") as f:
                        for i in range(len(values2)):
                            f.write(values2[0] + "\n")  
                        for i in range(len(values)):
                            f.write(values[0] + "\n")       
                print("Script completed")

                browser.close()
                restart = input("Do you wish to start again?").lower()
                if restart == "yes":
                    main()

                else:
                    exit()
            main()

您使用 'values' 列表的范围启动 for 循环。

并且不是每次都写入新值(如:values[i]),而是每次都写入相同的第一个元素:values[0]

如果只需要一个元素,不需要循环...

所以隐藏循环,更改行:

for i in range(len(values)):
                f.write(values[0] + "\n")

至:

#for i in range(len(values)):
f.write(values[0] + "\n")