【问题标题】:How to download CSV link in a python program如何在 python 程序中下载 CSV 链接
【发布时间】:2022-01-20 18:14:33
【问题描述】:

该网站是“https://www.nseindia.com/companies-listing/corporate-filings-announcements”。一位朋友向我发送了将某些日期之间的数据下载为 csv 文件的基础链接,如“https://www.nseindia.com/api/corporate-announcements?index=equities&from_date=14-01-2022&to_date=20-01-2022&csv=真\27" 此链接在网络浏览器中运行良好 首先,如果有人可以教育他如何获得此链接,或者更确切地说我如何获得此链接。 其次,我无法从 python 中的此链接将 csv 文件读取到数据框。可能是 %27 或其他问题。代码是

csv_url='https://www.nseindia.com/api/corporate-announcements?index=equities&from_date=14-01-2022&to_date=15-01-2022&csv=true%27'
df = pd.read_csv(csv_url)
print(df.head())

【问题讨论】:

  • 这里已经有人问过这个问题:stackoverflow.com/questions/32400867/pandas-read-csv-from-url
  • 我的问题可能是如何传递作为 URL 字符串一部分的 %27
  • 我刚刚在网络浏览器上打开了您的链接,它说找不到资源。你确定这是正确的链接吗?另外链接中的%27有什么用?
  • 我看了你提到的答案。我的程序进入调试模式
  • 您是否需要任何身份验证才能打开此 URL?就像我试图在我的浏览器上打开该链接一样,它说找不到资源并且我的熊猫代码被卡住了,可能是因为资源不可用。

标签: python pandas csv url


【解决方案1】:

使用 wget.py
DATA_URL = 'http://www.robots.ox.ac.uk/~ankush/data.tar.gz'

DATA_URL = '/home/xxx/book/data.tar.gz'

out_fname = 'abc.tar.gz'

wget.download(DATA_URL, out=out_fname)

【讨论】:

  • 请在代码部分添加代码并详细说明答案。和 wget.py 一样,是库还是自定义脚本?
  • 你能试试给定的网址吗?我不确定如何表示位于 URL 末尾的 \%27 。这似乎是问题
  • 在浏览器中下载csv的url是nseindia.com/api/…\27
  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

好的,对于这个问题,首先您需要请求带有this post 中提到的标头的 NSE 网站,然后一旦您访问主网站,您会在会话中获得一些 cookie,使用它们可以访问您想要的 url .为了将该 url 数据转换为 pandas 兼容的字符串,我关注了this answer

确保在标题中包含自定义用户代理,否则它将失败。

import pandas as pd
import io
import requests

base_url = 'https://www.nseindia.com'
session = requests.Session()
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
                         'like Gecko) '
                         'Chrome/80.0.3987.149 Safari/537.36',
    'accept-language': 'en,gu;q=0.9,hi;q=0.8',
    'accept-encoding': 'gzip, deflate, br'}

r = session.get(url, headers=headers, timeout=5)
cookies = dict(r.cookies)
response = session.get('https://www.nseindia.com/api/corporate-announcements?index=equities&from_date=14-01-2022&to_date=20-01-2022&csv=true', timeout=5, headers=headers)

content = response.content
df=pd.read_csv(io.StringIO(content.decode('utf-8')))
print(df.head())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2016-07-10
    • 1970-01-01
    • 2022-01-13
    • 2018-06-20
    • 1970-01-01
    相关资源
    最近更新 更多