【问题标题】:Writing to new row - Xlsxwriter写入新行 - Xlsxwriter
【发布时间】:2019-10-25 10:54:12
【问题描述】:

第一次发帖要温柔,因为我目前正在工作中快速学习 Python。 :)

任何人,我决定尝试编写一些东西,使用 xlsxwriter 和 Selenium 来获取网页,每 2 分钟打印一次股票价格到 Excel。

我的问题是,当它写入 excel 时,只会填充第一行。当 2 分钟结束时,新价格(如果有的话)不会写入新行。

当然,我们非常感谢任何帮助 - 非常期待成为社区的一员! :)

干杯,伙计们!

代码是:

times = time.strftime('%H:%M:%S')
workbook = xlsxwriter.Workbook(r'\\dub-ppfs-001\Home\rglennon\Desktop\Firefox_Web_driver\Stock_Price.xlsx')
sheet = workbook.add_worksheet()
col = 1
row = 0


browser = webdriver.Firefox()
browser.get('https://www.marketwatch.com/investing/stock/pypl')

WebDriverWait(browser, 60, 5).until(ec.visibility_of_all_elements_located((By.XPATH, '//*[@class="value"]')))
browser.minimize_window()
pypl = browser.find_element_by_xpath('//*[@class="value"]')
openprice = (browser.find_element_by_xpath('//*[@class="intraday__close"]').text)


while True:
    for row in range(1):
        sheet.write(row, 0, pypl.text)
        row =+1
    for col in range(1):
        sheet.write(col, 1, times)
         col =+1
    if pypl.text >= '105.50':
        ps('metal.mp3')



    workbook.close()
    time.sleep(120)     

【问题讨论】:

  • 请注意,此脚本不会每两分钟获取最新的股票价格,而只会每两分钟写入相同的数据,您需要重新加载页面并在@987654323 中分配pypl @ 环形。此外,您不需要两个 for 循环 for row in range(1):,因为在这种情况下它们没有实现任何目标。尽管您将变量命名为 col,但您在 .write 方法中使用它的值作为行参数。
  • 作为建议,使用 urllibrequests 模块可能更适合您的用例,因为您实际上不需要打开浏览器来实现您想要的做 =)
  • 第一次迭代后什么都没有发生的主要原因是因为您在循环结束时.close 工作簿但再也没有打开它。您实际上希望在循环完成后关闭工作簿(在这种情况下这将不起作用,因为您缺少 try - except 语句以离开无休止的 while True 循环)。
  • 嘿,沙尔克!感谢您迄今为止的所有帮助!当我有机会时,我会重新打开脚本并尝试 try-except 语句。 :)

标签: python excel xlsxwriter stock


【解决方案1】:

在上面的帮助下修复了它!谢谢你:)

只需要真正改变循环:

try:

pypl = browser.find_element_by_xpath('//*[@class="value"]')
openprice = browser.find_element_by_xpath('//*[@class="intraday__close"]').text




while True:
    pypl = browser.find_element_by_xpath('//*[@class="value"]')
    times = strftime('%H:%M:%S')

    sheet.write(row, 0,   pypl.text)
    row =row+1
    sheet.write(col, 1,   times)
    col =col+1

    print('PayPals current price is: $' +pypl.text)
    print('recorded at the time of : ' +times)
    print('\n')
    time.sleep(10)

    browser.refresh()
    WebDriverWait(browser, 60, 5).until(ec.visibility_of_all_elements_located((By.XPATH, '//*[@class="value"]')))
    pypl = browser.find_element_by_xpath('//*[@class="value"]')

except KeyboardInterrupt:
sheet.write_formula('D1', '=MAXA(A:A)')
workbook.close()


browser.quit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2018-10-20
    • 2019-08-04
    • 2017-03-30
    • 2016-03-28
    • 2021-07-31
    • 2017-02-05
    相关资源
    最近更新 更多