COCO研究院

 找回密碼
 註冊
搜索
查看: 21488|回復: 37

請教以vba或python下載網頁的問題

  [複製鏈接]
發表於 11-1-20 19:22 | 顯示全部樓層 |閱讀模式
大家好,
我想下載期交所的每日交易行情下載
http://www.taifex.com.tw/chinese/3/3_1_2.asp
但不太瞭解asp網頁的寫法,請問我如果要直接到指定的某日到某日的某合約要怎寫這網頁?
例如說從2011/01/04~2011/01/07全部的契約,我該怎指定這個網頁的參數?
感謝
發表於 11-1-21 08:21 | 顯示全部樓層
3_1_2dl.asp
DATA_DATE=2011/1/4
DATA_DATE1=2011/1/7
COMMODITY_ID=all
 樓主| 發表於 11-1-21 13:55 | 顯示全部樓層
回復 2# hhy

不好意思,請問如果以python的urlretrive要怎寫這個網址?

urlretrieve('http://www.taifex.com.tw/chinese/3/3_1_2.asp?DATA_DATE="2011/1/4"&
DATA_DATE1="2011/1/7"&COMMODITY_ID="all",... )

可以自動存成指定的檔案csv檔
感恩
發表於 11-1-21 15:21 | 顯示全部樓層
python我不懂也
你要不要解釋一下urlretrieve的用法
 樓主| 發表於 11-1-21 21:41 | 顯示全部樓層
回復 4# hhy


  我是想直接改之前綠茶妹的程式,但我不確定asp的網頁是否指定參數,
就可直接到指定參數的網頁。

http://coco-in.net/viewthread.php?tid=4082&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D21

  • from urllib import urlretrieve
  • from datetime import date
  • from datetime import datetime, timedelta
  • #today = date.today().strftime('%Y_%m_%d')
  • today = datetime.today()
  • yesterday=today
  • for daynum in range(1, 61):
  •   path = yesterday.strftime('%Y_%m_%d')
  •   name = 'Daily_'+path+'.zip'
  •   print name
  •   try:
  •      urlretrieve('http://www.taifex.com.tw/DailyDownload/'+name, 'C:\\test\\'+name)
  •   except IOError as IOE :
  •     print 'fault'
  •   except ContentTooShortError('!!',50) as CE:
  •     print 'too short'
  •   yesterday = yesterday - timedelta(1)
發表於 11-1-22 10:27 | 顯示全部樓層
注意在ptyhon 2.6 與 python 3.1用urlretrieve
結果會不同
http://bugs.python.org/issue8035有說明
我用python 3.1直接去抓資料,會hang
不過用網頁提供的方法就不會了
你可以參考一下
發表於 11-1-24 10:01 | 顯示全部樓層
回復 5# rjwang


我裝了2.71版試過了
可是不會寫python
一直抓到page not found
可能urlretrieve不能用在asp上吧?
 樓主| 發表於 11-1-25 11:27 | 顯示全部樓層
回復 6# MorganLiu

謝謝回覆,剛開始看您提供的網頁,再跟您請教。
 樓主| 發表於 11-1-25 11:31 | 顯示全部樓層
回復 7# hhy

謝謝您的幫忙,我還在看Morgan提供的網頁,還沒試作,不知道會不會有問題,
有結果再跟您回覆,如果我要在IE直接到指定的網頁的話,
http://www.taifex.com.tw/chinese/3/3_1_2.asp?
這後面參數要怎寫呢
發表於 11-1-25 11:51 | 顯示全部樓層
回復 9# rjwang


   用我上面po的參數就可以下載csv檔
發表於 11-1-25 16:14 | 顯示全部樓層
python 3.1 的code
######################
#!C:\Python31\python
#coding=utf-8
import string
import codecs
import urllib.request
import configparser
import os
import datetime
url_path1="http://www.taifex.com.tw/chinese/3/3_1_2dl.asp?DATA_DATE="
start_date="2011/01/04"
url_path2="&DATA_DATE1="
end_date="2011/01/07"
url_path3="&COMMODITY_ID=all"
##合併字串
url=url_path1+start_date+url_path2+end_date+url_path3
urllib.request.urlretrieve(url,'C:\\tw_se.csv')
print("done")
 樓主| 發表於 11-1-26 08:56 | 顯示全部樓層
回復 11# MorganLiu

真是太感謝您了....馬上來試
發表於 11-2-10 17:06 | 顯示全部樓層
用python會抓到 Page Not Found 的原因是 cookie
因為他有302轉址,所以urlretrieve有時成功有時會失敗

要用opener加上urllib2去做
但urllib2沒有urlretrieve,所以改用寫入檔案
source code如下

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)
cvs_content = urllib2.urlopen(url, data).read()

f = open(filename, 'w')
f.write(cvs_content)
f.close()
發表於 11-5-4 17:53 | 顯示全部樓層
回復 11# MorganLiu

不好意思,想再請問您一下:
我參考您的例子,想以此類推自己試著練習試著下載其他資料,但是有些下載,參數好像不是相同的規則?
例如:
http://www.taifex.com.tw/chinese/3/7_9_1.asp
下載網址:
http://www.taifex.com.tw/chinese/3/7_9_1dl.asp?DATA_DATE=2011/5/3&DATA_DATE1=2011/5/4
(這個例子沒有商品類別)
我還猜了好幾種參數組合,可是都沒有成功 ~>_<~
請問您當初是怎麼知道正確的參數呢?我也試著理解網頁的原始程式碼,但是無法全部理解。。。
像是您原本的例子,我可能會不會馬上猜到商品種類是 COMMODITY_ID?
document.myform.submit()
下載的按鈕應該是執行這個 locally 執行這個 document.myform.submit() ,送出正確的鏈結,可是我怎麼也找不到對應的程式碼看他到底送了甚麼出去。。。我是不是漏了甚麼?理論上應該在哪裡會有產生鏈結的程式碼。。?


不好意思,可以請您稍微指點一下嗎,在下感激不盡! <(_ _)>
我會的語言是 VBA, C#, C++
發表於 11-5-4 21:54 | 顯示全部樓層
本帖最後由 MorganLiu 於 11-5-4 09:56 PM 編輯
回復  MorganLiu

不好意思,想再請問您一下:
我參考您的例子,想以此類推自己試著練習試著下載其他資料, ...
Branson 發表於 11-5-4 05:53 PM

參數要問2樓,如何去找我也不知道
我只是將它翻譯成python而已
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-12-23 05:11

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |