【问题标题】:How to save scraped data to multiple .csv files如何将抓取的数据保存到多个 .csv 文件
【发布时间】:2021-11-23 22:30:53
【问题描述】:

我正在尝试在金融时报网站上抓取一些基金的历史数据表。其中一只基金的网址是:https://markets.ft.com/data/funds/tearsheet/historical?s=LU0526609390:EUR(其中 LU0526609390:EUR 是该基金的 ISIN)。我有 40 只基金的列表,我需要其历史数据,每个基金都有自己的 ISIN,但 url 始终遵循相同的模式:https://markets.ft.com/data/funds/tearsheet/historical?s='ISIN' 然后我需要将每个基金的数据保存在单独的“ISIN”中.csv 文件。

我似乎能够使用下面的代码获取所有基金的数据,但我很难将这些数据导出到基金特定的“ISIN”.csv 文件中。

此外,日期列中的值似乎重复了两次(即 2021 年 9 月 30 日星期四、2021 年 9 月 30 日星期四),我不明白为什么。

import requests
import pandas as pd
import csv

urls = ['https://markets.ft.com/data/funds/tearsheet/historical?s=LU0526609390:EUR', 'https://markets.ft.com/data/funds/tearsheet/historical?s=IE00BHBX0Z19:EUR', '......']


for url in urls:
    html = requests.get(url).content
    df_list = pd.read_html(html)
    df = df_list[-1]
    print(df)
    df.to_csv('my data.csv')

【问题讨论】:

    标签: csv web-scraping html-table


    【解决方案1】:

    要保存到文件,每个文件都有不同的 ISIN 文件名,您可以在“=”号上拆分 url,然后选择拆分列表中的最后一个条目,该条目将提供 ISIN。文件名中不允许使用冒号,所以我在这里用下划线替换了它。

    ISIN = url.split('=')[-1].replace(':', '_')
    df.to_csv(ISIN + '.csv')
    

    对于不同大小的浏览器,网站上的日期似乎有两个版本。你正在刮他们两个。

    <span class="mod-ui-hide-small-below">Tuesday, September 21, 2021</span>
    <span class="mod-ui-hide-medium-above">Tue, Sep 21, 2021</span>
    

    您可以重新格式化日期的一种方法是编写一个函数来整理格式。这将用逗号分隔日期并将月份/日期附加到年份。我还用 [1:] 从月份前面删除了一个空格。

    def format_date(date):
        date = date.split(',')[-2][1:] + date.split(',')[-1]
    
        return pd.Series({'Date': date})
    

    然后将此添加到 for 循环中以对日期列执行功能。

    df['Date'] = df['Date'].apply(format_date)
    

    这会以如下格式给出日期:

    Oct 01 2021
    

    【讨论】:

      猜你喜欢
      • 2020-11-04
      • 2020-10-11
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 2022-09-28
      • 2020-06-16
      相关资源
      最近更新 更多