Я пытаюсь скопировать данные в файл .xls с помощью xlsxwriter, но сами данные записываются на лист 5 раз, а не только один раз. - PullRequest
0 голосов
/ 01 февраля 2019

Я могу записать в лист Excel важные данные, которые мне нужны, с моей веб-страницы, но он записывает в нее 6 раз, прежде чем перейти к следующему символу тикера в моем цикле "Tickers.csv".

Значения [0] <== (числа) - это данные, которые записываются 5 раз, и я не уверен, почему.Values2 [0] <== (буквы) записывает только один раз, что я ожидаю, что значения [0] также будут делать. </p>

Пример,

Значения2 [0] = Apple Inc, AAPL

Значения [0] = 123 123 123 123 123 123

Значения [0] должны равняться этому в моем ходу мыслей:

Значения [0] = 123

Мой код записывает это в электронную таблицу:

Apple Inc, AAPL

123

123

123

123

123

123

International Business Machines, IBM

456

456

456

456

456

456

Мне бы хотелось, чтобы лист получился таким, и не понимаю, почему это не так:,

Apple Inc, AAPL

123

International Business Machines, IBM

456

Я использую XPath для очисткиданные на листе, так что единственный способ, которым я знаю, чтобы получить их на листе, это добавить индекс (т.е. значения [0] вместо просто vaсифилис).Когда я не добавляю индекс, я получаю сообщение об ошибке, в котором мне запрещено писать списки.

Если вам нужна дополнительная информация о моей ситуации, просто спросите и поблагодарите за потраченное время.

def main (): импорт CSV, импорт ОС из селена, импорт веб-драйвера из селена, импорт веб-драйвера

                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()

1 Ответ

0 голосов
/ 01 февраля 2019

Вы запускаете цикл 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")
...