скачать csv файл с помощью Python из Интернета
Цель: автоматизировать загрузку различных 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, который можно загрузить с веб-страницы. Следовательно, код не предоставляется.
Используйте Chrome w/Dev Tools, Firefox w/Firebug или Fiddler, чтобы посмотреть URL-адрес запроса, когда вы нажмете кнопку загрузки.
(например, я вижу это для 22 ноября: http://www.tocom.or.jp/data/tick/TOCOMprice_20121122.csv)
На странице используется 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
для этой задачи, если хотите.
Вы можете определить ссылку для загрузки. В частности, с помощью меню разработчика вашего браузера. Я использую хром, и мне показывают, что ссылка
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-минутными интервалами.
Удачи!