rjwang 發表於 11-1-20 19:22

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

大家好,
我想下載期交所的每日交易行情下載
http://www.taifex.com.tw/chinese/3/3_1_2.asp
但不太瞭解asp網頁的寫法,請問我如果要直接到指定的某日到某日的某合約要怎寫這網頁?
例如說從2011/01/04~2011/01/07全部的契約,我該怎指定這個網頁的參數?
感謝

hhy 發表於 11-1-21 08:21

3_1_2dl.asp
DATA_DATE=2011/1/4
DATA_DATE1=2011/1/7
COMMODITY_ID=all

rjwang 發表於 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檔
感恩

hhy 發表於 11-1-21 15:21

python我不懂也
你要不要解釋一下urlretrieve的用法

rjwang 發表於 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)

MorganLiu 發表於 11-1-22 10:27

注意在ptyhon 2.6 與 python 3.1用urlretrieve
結果會不同
http://bugs.python.org/issue8035有說明
我用python 3.1直接去抓資料,會hang
不過用網頁提供的方法就不會了
你可以參考一下

hhy 發表於 11-1-24 10:01

回復 5# rjwang


我裝了2.71版試過了
可是不會寫python
一直抓到page not found
可能urlretrieve不能用在asp上吧?

rjwang 發表於 11-1-25 11:27

回復 6# MorganLiu

謝謝回覆,剛開始看您提供的網頁,再跟您請教。

rjwang 發表於 11-1-25 11:31

回復 7# hhy

謝謝您的幫忙,我還在看Morgan提供的網頁,還沒試作,不知道會不會有問題,
有結果再跟您回覆,如果我要在IE直接到指定的網頁的話,
http://www.taifex.com.tw/chinese/3/3_1_2.asp?
這後面參數要怎寫呢

hhy 發表於 11-1-25 11:51

回復 9# rjwang


   用我上面po的參數就可以下載csv檔

MorganLiu 發表於 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")

rjwang 發表於 11-1-26 08:56

回復 11# MorganLiu

真是太感謝您了....馬上來試

luck.tw 發表於 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()

Branson 發表於 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++

MorganLiu 發表於 11-5-4 21:54

本帖最後由 MorganLiu 於 11-5-4 09:56 PM 編輯

回復MorganLiu

不好意思,想再請問您一下:
我參考您的例子,想以此類推自己試著練習試著下載其他資料, ...
Branson 發表於 11-5-4 05:53 PM http://coco-in.net/images/common/back.gif
參數要問2樓,如何去找我也不知道
我只是將它翻譯成python而已
頁: [1] 2 3
查看完整版本: 請教以vba或python下載網頁的問題