【问题标题】:scraping a table from website using pandas and saving to csv file使用 pandas 从网站上抓取表格并保存到 csv 文件
【发布时间】:2021-05-01 17:11:41
【问题描述】:

我是 python 新手,我使用 pandas 从网站上抓取一个表格并将其保存为 csv 文件,并每 60 秒循环运行一次代码。 我希望每次循环运行时文件名都不同或编号。我已经尝试了以下

import pandas as pd
import time
starttime = time.time()
i=1
while True:
     url = 'https://www.moneycontrol.com/india/indexfutures/nifty/9/2021-05-27/OPTIDX/CE/12800.00/true
     optionchain = pd.read_html(url,attrs = {'class' : 'tblopt'})
     chaindata = pd.DataFrame(optionchain[1])
     chaindata1 = chaindata.rename(columns={0:'LTPcall',1:'Net Change',2:'Volume',3:'Open 
     Interest',4:'Change In Open Int',5:'StrikePrice',6:'LTPput',7:'Net Change',8:'Volume',9:'Open 
     Interest',10:'Change In Open Int'})
     s = 'file'
     x = (s+str(i))
     chaindata1.to_csv(r'C:\Users\dell\Desktop\data\%x.csv')
     i=+1
     time.sleep(60.0 - ((time.time() - starttime) % 60.0))

通过运行这个,我得到第一个文件为 file1,然后是 file(x),它一直覆盖 file(x),我希望它流动 file1、file2、file3 等等

【问题讨论】:

  • 不确定为什么您使用正则表达式作为文件名而不是 f 字符串 .... 您没有做任何事情来将文件编号替换为文件名。我建议使用路径 lib / Path 而不是文件名的不可移植代码
  • 仅供参考,它是 scraping(和 scraperscrapescraped)不是报废

标签: pandas dataframe web-scraping export-to-csv


【解决方案1】:

i=+1 不做任何事情,它只是将+1 分配给i。此外,您可以使用str.format 来格式化文件名。例如:

import pandas as pd
import time

starttime = time.time()
i = 1
while True:
    url = "https://www.moneycontrol.com/india/indexfutures/nifty/9/2021-05-27/OPTIDX/CE/12800.00/true"
    optionchain = pd.read_html(url, attrs={"class": "tblopt"})
    chaindata = pd.DataFrame(optionchain[1])
    chaindata1 = chaindata.rename(
        columns={
            0: "LTPcall",
            1: "Net Change",
            2: "Volume",
            3: "Open Interest",
            4: "Change In Open Int",
            5: "StrikePrice",
            6: "LTPput",
            7: "Net Change",
            8: "Volume",
            9: "Open Interest",
            10: "Change In Open Int",
        }
    )
    chaindata1.to_csv(
        r"C:\Users\dell\Desktop\data\file{}.csv".format(i)
    )  # <-- use str.format here
    i += 1  # <-- use i += 1 instead of i = +1
    time.sleep(60.0 - ((time.time() - starttime) % 60.0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    相关资源
    最近更新 更多