1

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

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

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

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

4

3 回答 3

3

该页面使用 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;" />

它结合了一个路径,浏览器将对当前站点使用该路径。所以每个网址都是:

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如果您愿意,也可以将其用于此任务。

于 2012-11-23T21:55:00.283 回答
1

当您点击下载按钮时,使用带有开发工具的 Chrome、带有 Firebug 或Fiddler的 Firefox 查看请求 URL。

(例如,我在 11 月 22 日看到这个:http ://www.tocom.or.jp/data/tick/TOCOMprice_20121122.csv )

于 2012-11-23T21:54:50.720 回答
0

您可以使用浏览器的开发者菜单等来确定下载链接。我使用 chrome,我显示链接是

http://www.tocom.or.jp/data/souba_d/souba_d_20121126_20121123_0425.csv

该 URL 结构似乎很容易猜到,页面上还有另一个链接:

http://www.tocom.or.jp/historical/keishiki_souba_d.html

指示如何构建拉取。一个好的选择是以 5 分钟的间隔构建 csv 拉动。

祝你好运!

于 2012-11-23T21:59:35.420 回答