python - 使用 Python 从网上下载 csv 文件

标签 python url csv download

目标:希望自动从 http://www.tocom.or.jp/historical/download.html 下载各种 .csv 文件使用 Python(虽然这不是主要问题)

细节:特别是,我正在尝试下载“报价数据”的 csv 文件(从底部开始的第五个标题,可用的 5 天。

问题:当我看到这个网页的源代码时,寻找“Tick Data”,我看到了对这 5 个 .csv 文件的引用,但它们没有通常的 href 标签。因为我使用的是 Python (urllib),所以我需要知道这 5 个 .csv 文件的 URL,但不知道如何获取它们。

这不是Python本身的问题,而是关于如何找到一些可以从网页下载的.csv的URL。因此,没有提供代码。

最佳答案

该页面使用 JavaScript 创建 URL:

<select name="tick">
  <option value="TOCOMprice_20121122.csv">Nov 22, 2012</option>
  <option value="TOCOMprice_20121121.csv">Nov 21, 2012</option>
  <option value="TOCOMprice_20121120.csv">Nov 20, 2012</option>
  <option value="TOCOMprice_20121119.csv">Nov 19, 2012</option>
  <option value="TOCOMprice_20121116.csv">Nov 16, 2012</option>
</select>
  <input type="button" onClick="location.href='/data/tick/' + document.form.tick.value;" 
        value="Download" style="width:7em;" />

它结合了浏览器将针对当前站点使用的路径。所以每个 URL 是:

http://www.tocom.or.jp + /data/tick/ + TOCOMprice_*yearmonthday*.csv

看起来,数据只涵盖工作日。

这些很容易拼凑成自动 URL:

import requests
from datetime import datetime, timedelta

start = datetime.now() - timedelta(days=1)
base = 'http://www.tocom.or.jp/data/tick/TOCOMprice_'

next = start
for i in range(5):
    r = requests.get(base + next.strftime('%Y%m%d') + '.csv')
    # Save r.content somewhere
    next += timedelta(days=1)
    while next.weekday() >= 5:  # Sat = 5, Sun = 6
        next += timedelta(days=1)

我使用 requests 是因为它更易于使用 API,但如果您愿意,您也可以使用 urllib2 来完成此任务。

关于python - 使用 Python 从网上下载 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13536118/

上一篇:Python乘法

下一篇:python - Gmpy sqrt精度

相关文章:

python - 如何在文本文件中查找短语并删除其之前/之后的内容?

python - 在 CSV python 中添加列并枚举它

python - 我什么时候应该考虑使用线程

python - 为什么在尝试使用请求库进行网络抓取时,我得到的正文标签内容为空?

python - 无法在 Django Flatpages 中使用 {{MEDIA_URL}}?

Java 从 anapioficeandfire 读取 URL 返回 403

python - 从包含在 Excel 单元格中的 CSV 导入的文本

python - IPython.display.Audio 无法正确处理 `.ogg` 文件类型?

html - 如何获取框架的url?

c++ - Qt 检查有效的 URL