返回列表 上一主題 發帖

[原創] python上市櫃三大法人買賣超日報資料下載

本帖最後由 koshi0413 於 2016-9-12 20:33 編輯

小弟我終於可以回覆了,感動!!
這文章我追很久了 python 也是看到這篇才開始學的,
在此論壇學了不少vba  也看了些c_c_lai 學到不少,剛好看到c_c_lai有提問,來報答一下
下面為 c_c_lai  之需求,下載csv很方便,也很快!!!  但匯入 SQL麻煩,要在轉碼,故小弟會選擇直接提取(其實是還不會用python直接轉csv碼在自動匯入SQL)
ps:代碼為zyzzyva修改版
pps:源碼中段落有 # 皆為提取網頁時,反覆實驗用,這網頁為了提取所而段落也花了一小時來試各種網頁代碼來用BeautifulSoup提取
  1. # -*- coding: utf-8 -*-
  2. import requests
  3. import time
  4. import os
  5. from bs4 import BeautifulSoup as BS
  6. from datetime import date

  7. headers = {"User-Agent":"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"}
  8. url1 = "等級不夠,網址請自行輸入"
  9. payload = {"download":'',
  10.             "qdate":'105/09/10',
  11.             "selectType":"ALL"}
  12. res = requests.post(url1, headers=headers, data=payload)
  13. #print res.text

  14. soup = BS(res.text)
  15. #print soup.select('.board_trad')[0].text
  16. #tb = soup.select('#main-content')
  17. #print tb
  18. #tb = soup.findAll('table')
  19. soup = soup.select('table')[1]
  20. #print tb
  21. for ta in soup.select('tr')[3:]:
  22.     print ta.select("td")[0].text,ta.select("td")[1].text,ta.select("td")[2].text,ta.select("td")[3].text,ta.select("td")[4].text,ta.select("td")[5].text,ta.select("td")[6].text,ta.select("td")[7].text,ta.select("td")[8].text,ta.select("td")[9].text,ta.select("td")[10].text,ta.select("td")[11].text,ta.select("td")[12].text,ta.select("td")[13].text,ta.select("td")[14].text
複製代碼
這是結果。只po前幾段
0050   元大台灣50       194 104 0 1,056 1,146 194,125 0 5 0 496 501 194,125 19
0051   元大中型100      0 0 0 2 2 4,500 0 0 0 0 0 4,500 0
0052   FB科技           0 0 0 0 0 2,000 0 0 0 0 0 2,000 0
0053   元大電子         0 0 0 0 0 3,247 0 0 0 0 0 3,247 0
0054   元大台商50       0 0 0 0 0 4,656 0 0 0 0 0 4,656 0
0055   元大MSCI金融     20 5 0 622 637 17,163 0 4 0 118 122 17,163 0
0056   元大高股息       7 1 0 94 100 67,508 4 0 0 25 21 67,508 3
0057   FB摩台           0 0 0 0 0 2,006 0 0 0 0 0 2,006 0
0058   FB發達           0 0 0 0 0 1,299 0 0 0 0 0 1,299 0

TOP

回復 104# c_c_lai

soup.select('table')[1] 為何是 [1]?
網頁代碼中,取第二個'table'

soup.select('tr')[3:] 的 [3:]
網頁代碼中,取第三個'tr'

第一、二個為標題,小弟直接匯入sql,所以不需要這二項目,所以沒提取~~
z大有最新回文,他的代碼比較正確,小弟的代碼都是簡易型的,只要取到資料能導入sql即可

TOP

對了   個人覺的這段可以像vba一樣用 i = 1 to 14 來迴圈表示
只是還不會用

for ta in soup.select('tr')[3:]:
    print ta.select("td")[0].text,ta.select("td")[1].text,ta.select("td")[2].text,ta.select("td")[3].text,ta.select("td")[4].text,ta.select("td")[5].text,ta.select("td")[6].text,ta.select("td")[7].text,ta.select("td")[8].text,ta.select("td")[9].text,ta.select("td")[10].text,ta.select("td")[11].text,ta.select("td")[12].text,ta.select("td")[13].text,ta.select("td")[14].text

TOP

回復 110# c_c_lai

c大,只要能達到目的即是好方法,其它相關代碼只是每個人方式不同
zyzzyva大 & lpk187大 為畫表轉出 CSV  這方式很好,對於用EXCEL表格來說是一大好事
何況 c大在vba中挺活躍的^^
vba我也是看著你們的文章慢慢學的~

本來也是想把提取的檔案轉存csv
但看到csv to sql有許多轉碼問題,故才直接從python匯入sql

看到介紹 SQL好像可以多表聯合查詢顯示之類,才去碰的(剛碰,目前只會Python匯入sql,sql 匯出至EXCEL)
不同檔案多表聯合查詢  EXCEL 應該也可以吧?   沒試過,應該要用vba??

請教問一下sql可以拉資料至EXCEL,再用EXCEL畫圖
對於vba畫圖這塊,之後可能要請c大指點了@@
雖然python也可以畫圖,但整合性不知道有沒有差,還沒研究過,所以還是先選最了解的EXCEL來整合

TOP

回復 109# lpk187
import io

小弟的套件錯誤,無法執行,而且用 conda install io 裝不起來,太神奇了
下班後再來試 pip install io or easy install io 試試

TOP

本帖最後由 koshi0413 於 2016-9-13 09:36 編輯

回復 113# c_c_lai


所以小弟放棄這種寫法,先用手慢慢key,雖然很阿呆∼哈哈
要解的網頁太多了,所以解掉一個馬上解下一個
等把所需網頁全解完後在全加入時間迴圈+個股代號迴圈下去跑
畫圖是在下一步,到時在來研究~

TOP

回復 122# lpk187


小弟在研究一下,呼叫出錯,疑問?

TOP

回復 116# zyzzyva


    for ta in soup.select('tr')[3:10]:
    for i in xrange(15):
        print(ta.select("td").text, end='\t')
    print('\n')

非常感謝z大提供,但不知道是不是版本問題  加上 , end='\t'  這句就出錯,拿掉就ok @@
python2.7

TOP

回復 122# lpk187

l大,小弟看錯了,是卡在這行,有缺套件?

UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-9-9847a49d90d1> in <module>()
     15 deta=tbl[1]
     16 deta.columns = ['股票代號','股票名稱','買進','賣出','現金償還','前日餘額','今日餘額','限額','買進','賣出','現券償還','前日餘額','今日餘額','限額','資券互抵','註記']
---> 17 deta.to_csv('test1.csv')

C:\Users\Koshi\Anaconda2\lib\site-packages\pandas\core\frame.pyc in to_csv(self, path_or_buf, sep, na_rep, float_format, columns, header, index, index_label, mode, encoding, compression, quoting, quotechar, _terminator, chunksize, tupleize_cols, date_format, doublequote, escapechar, decimal, **kwds)
   1342                                      doublequote=doublequote,
   1343                                      escapechar=escapechar, decimal=decimal)
-> 1344         formatter.save()
   1345
   1346         if path_or_buf is None:

TOP

回復 129# lpk187


    ---> 17 deta.to_csv('test1.csv')

都是卡在這串,不會又是版本問題吧!!!!  小弟 2.7  l大是3.x ?

不過剛才在資料夾有看到 test1.csv
內容為:?∠巨隞??        ?∠巨?迂        鞎琿€?鞈?        ?暸???        ?擗?        隞擗?        ??        鞎琿€?鞈?        ?曉??        ?擗?        隞擗?        ??        鞈鈭        閮餉?
也許是編碼問題?

發現到,好像小弟試你們的代碼問題較多,神奇

TOP

        靜思自在 : 【生命在呼吸間】佛陀說:「生命在呼吸間。」人無法管住自己的生命,更無法擋住死期,讓自己永住人間。既然生命去來這麼無常,我們更應該好好地愛惜它、利用它、充實它,讓這無常、寶貴的生命,散發它真善美的光輝,映照出生命真正的價值。
返回列表 上一主題