我正在尝试使用xlsxwriter将数据抓取到.xls文件中,但其自身的数据将被写入工作表5次而不是一次

时间:2019-02-01 18:02:59

标签: python excel xpath web-scraping xlsxwriter

我可以将我的网页上需要的重要数据写入excel工作表,但是在进入“ Tickers.csv”循环中的下一个股票代码之前,它已写入了6次。

Values [0] <==(数字)是写入5次的数据,我不确定为什么。 Values2 [0] <==(字母)只写一次,这也是我期望values [0]做的事情。

示例

Values2 [0] =苹果公司(AAPL)

值[0] = 123 123 123 123 123 123

  

在我的思维中,值[0]应该与此相等:

     

值[0] = 123

我的代码在电子表格中写道:

Apple Inc,AAPL

123

123

123

123

123

123

IBM国际商业机器

456

456

456

456

456

456

我希望工作表的结果是这样,但不明白为什么不是这样的,

Apple Inc,AAPL

123

IBM国际商业机器

456

我正在使用XPath将数据抓取到工作表中,因此我知道将其粘贴到工作表上的唯一方法是添加索引(即values [0]而不是值)。当我不添加索引时,会收到一条错误消息,指出不允许写列表。

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

def main():                     导入csv                     导入操作系统                     从硒导入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()

1 个答案:

答案 0 :(得分:2)

您使用“值”列表的范围启动for循环。

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

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

因此隐藏循环,更改行:

let bs_divs = new Array(bs_length);
for (let i = 0; i < bs_length; i++) {
  bs_divs[i] = document.createElement("div");
}

收件人:

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