скачать csv файл с помощью Python из Интернета

57
5

Цель: автоматизировать загрузку различных CSV файлов с http://www.tocom.or.jp/historical/download.html с использованием Python (это не главная проблема)

Особенности: в частности, я пытаюсь загрузить файлы csv для "Tick Data" (пятый заголовок снизу, за 5 дней).

Проблема: когда я вижу исходный код для этой веб-страницы, ищите "Tick Data", я вижу ссылки на эти 5 CSV файлов, но они не с обычным тегом href. Поскольку я использую Python (urllib), мне нужно знать URL-адреса этих 5 CSV файлов, но не знаю, как их получить.

Речь идет не о Python как таковой, а о том, как найти URL-адрес некоторого.csv, который можно загрузить с веб-страницы. Следовательно, код не предоставляется.

спросил(а) 2012-11-24T00:49:00+04:00 7 лет, 10 месяцев назад
1
Решение
57

Используйте Chrome w/Dev Tools, Firefox w/Firebug или Fiddler, чтобы посмотреть URL-адрес запроса, когда вы нажмете кнопку загрузки.


(например, я вижу это для 22 ноября: http://www.tocom.or.jp/data/tick/TOCOMprice_20121122.csv)

ответил(а) 2012-11-24T00:54:00+04:00 7 лет, 10 месяцев назад
81

На странице используется 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 для этой задачи, если хотите.

ответил(а) 2012-11-24T00:55:00+04:00 7 лет, 10 месяцев назад
41

Вы можете определить ссылку для загрузки. В частности, с помощью меню разработчика вашего браузера. Я использую хром, и мне показывают, что ссылка

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

Указывает, как структурировать вытягивания. Хорошая ставка заключается в том, чтобы структурировать выходы csv с 5-минутными интервалами.

Удачи!

ответил(а) 2012-11-24T00:59:00+04:00 7 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема