ªð¦^¦Cªí ¤W¤@¥DÃD µo©«

python ¿Ä¸ê¿Ä¨é·JÁ` (¥þ³¡)"¸ê®Æ

python ¿Ä¸ê¿Ä¨é·JÁ` (¥þ³¡)"¸ê®Æ

ÁÙ¤£·|»s§@°õ¦æÀÉ¡I¨ä¤º®e¶È¨Ñ°Ñ¦Ò¤§
  1. #-*- coding:utf-8 -*-

  2. '''
  3. ¥»µ{§Ç¥Ñ Python 3.52 ¼g¦¨¡A¬°§@ªÌ°Ñ¦Ò³Â»¶®a±Ú°Q½×°Ï "python¤W¥«Âd¤T¤jªk¤H¶R½æ¶W¤é³ø¸ê®Æ¤U¸ü" °Q½×¤º®e½m²ß
  4. ¨ä¤º®e¤j³¡¥÷°Ñ¦Ò zyzzyva¤j¤j¡Bc_c_lai ¤j¤j ¡Bkoshi0413 ¤§°Q½×¤º®e¡A·PÁ¡I
  5. ¥»µ{§Ç·|¦Û°Ê¥Í¦¨ Access ªº twsedata.mdb¸ê®Æ®w¡A¤Î«Ø¥ß¦U©Ò»Ý¤§¸ê®Æªí¡A¦ý¥u¯à¤U¸ü"¿Ä¸ê¿Ä¨é·JÁ` (¥þ³¡)"¸ê®Æ
  6. £°¡I¨S¦³«H¥Î¥æ©ö²Î­p¸ê®Æ ¡A¥u«Ø¥ß¨ä¸ê®Æªí
  7. ¥»µ{§Ç»Ý­n pip ¦w¸Ë requests ¡BBeautifulSoup4¡Bpypyodbc
  8. ¥H¤Î»Ý¤U¸ü pywin32 : https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/
  9. ¨Ï¥Î¤èªk¡G¥u¦b input ®É ¡A¿é¤J¶}©lÂ^¨ú¤é´Á¤Îµ²§ôÂ^¨ú¤é´Á§Y¥i¡A²Ä¤@¦¸°õ¦æ®É¡A·|«Øºc¸ê®Æ®w¡A¦Ó«á¥u¼W¥[¸ê®Æ¡A
  10. ¨C¤é¸ê®ÆÂ^¨ú¨ìÀx¦s¦Ü¸ê®Æ®wªº®É¶¡¬ù 21¬í(¨Ì§@ªÌ¹q¸£°õ¦æ­p®É )
  11. ¥»µ{§Ç¶È¨Ñ°Ñ¦Ò¡A¤£­t³d§ó·s¤º®e¡A¤£­t³d°£¿ù(¦]¬°§Ú¤]¬O·s¤â¡A°£¿ù¹ï§Ú¨Ó»¡¤Ó#%%$...)¡A·dÃa¨Ï¥ÎªÌ¹q¸£¡A¤]¤£Ãö§@ªÌªº¨Æ¡I¡I
  12. §@ªÌ¡G³Â»¶®a±Ú°Q½×°Ï lpk187
  13. §¹¦¨¤é´Á¡G2016/9/22
  14. '''

  15. import requests
  16. from bs4 import BeautifulSoup
  17. import random
  18. import os
  19. import win32com.client
  20. import pypyodbc
  21. import datetime
  22. import time

  23. # ÀH¾÷§ó§ï headers
  24. def head_random():
  25.       for i in range(10):
  26.             hs = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
  27.                    'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16',
  28.                    'Mozilla/5.0 (Linux; U; Android 4.1.2; zh-tw; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
  29.                    'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10'
  30.                    'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)']
  31.             hes = {"User-Agent":random.choice(hs)}
  32.       return hes

  33. # ¶°¥xÃҩҿĸê¿Ä¨é¾lÃB¥þ³¡¸ê®Æ
  34. def read_network_data(date,from_number):
  35.       url = 'http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/MI_MARGN.php'
  36.       head =head_random()
  37.       payload = {"download":'',
  38.                  "qdate":date,
  39.                  "selectType":"ALL"}
  40.       res = requests.post(url, headers=head, data=payload)
  41.       soup=BeautifulSoup(res.text, "lxml")
  42.       tab = soup.select('tbody')[from_number] # 2­Óªí®æ¤§2
  43.       regs=[] # ªì©l°}¦C
  44.    
  45.       for i in range(len(tab.select('tr')[0].select('td'))): # ©w¸q2ºû°}¦Cºû«×
  46.             regs.append([])

  47.       for tr in tab.select('tr'): #Â^¨úªí®æ¸ê®Æ
  48.             for i in range(len(tab.select('tr')[0].select('td'))):
  49.                   regs[i].append(tr.select('td')[i].text)
  50.       return regs

  51. def conn_db():
  52.       Conn = win32com.client.Dispatch("ADODB.Connection")
  53.       strMDB ='Provider=Microsoft.ACE.OLEDB.12.0; Data Source=' + os.getcwd() + '\\twsedata.mdb;'
  54.       Conn.ConnectionString = strMDB
  55.       Conn.Open()
  56.       return Conn

  57. def check_db_exists(regs):
  58.       if not os.path.exists('twsedata.mdb'):
  59.             pypyodbc.win_create_mdb( os.getcwd() + '\\twsedata.mdb')
  60.             Conn=conn_db()
  61.             sql = "CREATE TABLE ªÑ²¼(ªÑ²¼¥N¸¹  char(10) PRIMARY KEY,ªÑ²¼¦WºÙ  char(20));"
  62.             Conn.Execute(sql)
  63.             sql = "CREATE TABLE  ¿Ä¸ê¿Ä¨é«H¥Î¥æ©ö²Î­p(¤é´Á  datetime,¶µ¥Ø  char(20),¶R¶i INTEGER,¶R¥X INTEGER,²{ª÷¡]¨é¡^ÀvÁÙ INTEGER,«e¤é¾lÃB INTEGER,¤µ¤é¾lÃB INTEGER);"
  64.             Conn.Execute(sql)
  65.       n = 0
  66.       Conn=conn_db()
  67.       for i in regs[0]:
  68.             try:
  69.                   Conn.Execute('select * from ' + i); # table does not exist
  70.             except Exception as e:
  71.                   sql="CREATE TABLE " + i + "(¤é´Á  datetime,"
  72.                   sql= sql + "¸ê¶R¶i  INTEGER,"
  73.                   sql= sql + "¸ê½æ¥X INTEGER,"
  74.                   sql= sql + "¸ê²{ª÷ÀvÁÙ INTEGER,"
  75.                   sql= sql + "¸ê«e¤é¾lÃB INTEGER,"
  76.                   sql= sql + "¸ê¤µ¤é¾lÃB INTEGER,"
  77.                   sql= sql + "¸ê­­ÃB INTEGER,"
  78.                   sql= sql + "¨é¶R¶i  INTEGER,"
  79.                   sql= sql + "¨é½æ¥X INTEGER,"
  80.                   sql= sql + "¨é²{ª÷ÀvÁÙ INTEGER,"
  81.                   sql= sql + "¨é«e¤é¾lÃB INTEGER,"
  82.                   sql= sql + "¨é¤µ¤é¾lÃB INTEGER,"
  83.                   sql= sql + "¨é­­ÃB INTEGER,"
  84.                   sql= sql + "¸ê¨é¤¬©è INTEGER,"
  85.                   sql= sql + "µù°O char(5));"
  86.                   Conn.Execute(sql)
  87.                   rs = win32com.client.Dispatch('ADODB.RecordSet')
  88.                   rs.ActiveConnection = Conn
  89.                   rs.Open('select * from ªÑ²¼', Conn, 3, 3)
  90.                   rs.AddNew()
  91.                   rs.Fields.Item(0).Value = regs[0][n]
  92.                   rs.Fields.Item(1).Value = regs[1][n]
  93.                   rs.Update()
  94.             n += 1

  95. def add_data(regs,date):
  96.       Conn=conn_db()
  97.       for i in range(len(regs[0])):
  98.             rs = win32com.client.Dispatch('ADODB.RecordSet')
  99.             rs.ActiveConnection = Conn
  100.             sql='select * from ' + regs[0][i]
  101.             rs.Open(sql, Conn, 3, 3)
  102.             for j in range(2,len(regs)):
  103.                   if j==2:
  104.                         rs1 = win32com.client.Dispatch('ADODB.RecordSet')
  105.                         rs1.ActiveConnection = Conn
  106.                         sql="SELECT * FROM " + regs[0][i] + " WHERE ¤é´Á = #" + date + "#;"
  107.                         rs1.Open(sql,Conn,3,3)
  108.                         if rs1.EOF:
  109.                               rs.AddNew()
  110.                               rs.Fields.Item(0).Value = date
  111.                               rs.Fields.Item(j-1).Value = regs[j][i]
  112.                               rs1.Close()
  113.                         else:
  114.                               rs1.Close()
  115.                               break
  116.                   rs.Fields.Item(j-1).Value = regs[j][i]
  117.             rs.Update()

  118. # ¥H¤U¬°µ{¦¡ªº±Ò©lÂI¡G
  119. StartDate=input('½Ð¿é¤J¶}©lÂ^¨ú¤é´Á(¦è¤¸¤é´Á¦p¡G2016/1/1)¡G')
  120. EndDate=input('½Ð¿é¤Jµ²§ôÂ^¨ú¤é´Á(¦è¤¸¤é´Á¦p¡G2016/1/31)¡G')
  121. #³B²z¤é´ÁÁÙ¯uªº«Ü³Â·Ð
  122. ts=time.time()
  123. StartDate = time.strptime(StartDate, "%Y/%m/%d")
  124. EndDate =time.strptime(EndDate, "%Y/%m/%d")
  125. StartDate = datetime.date(StartDate[0], StartDate[1], StartDate[2])
  126. EndDate =  datetime.date(EndDate[0], EndDate[1], EndDate[2])
  127. RangeDate = datetime.timedelta(days = 1)
  128. while StartDate <= EndDate:
  129.       yy,mm,dd=str(StartDate).split('-')
  130.       dat=datetime.datetime(int(yy), int(mm), int(dd))
  131.       dd=dat.strftime('%Y/%m/%d')
  132.       year=str(int(dd[0:4])-1911)
  133.       date=dd.replace(dd[0:4], year)
  134.       print('¥Ø«e°õ¦æºô¸ôÂ^¨ú',date ,'¤éªº¸ê®Æ¡A½Ðµy«á...')
  135.       re=read_network_data(date,1)
  136.       if re[0][0]=='¬dµL¸ê®Æ':
  137.             print(date,'¤é¡A¥i¯à¬°¥ð¥«¤é¡A¬dµL¸ê®Æ¡C')
  138.             StartDate = StartDate + RangeDate
  139.             continue
  140.       print('Àˬd¬O§_¦³·sªÑ²¼¥[¤J¡A½Ðµy«á...')
  141.       check_db_exists(regs=re)
  142.       print('±N¸ê®Æ¼g¤J¸ê®Æ®w¤¤¡A½Ðµy«á...')
  143.       add_data(regs=re,date=dd)
  144.       StartDate = StartDate + RangeDate
  145.       te = time.time()
  146.       print('ºI¦Ü¥Ø«e¡A®É¶¡¤w¯Ó¶O¡G', int(te - ts),'¬í')

  147. print('°õ¦æ§¹²¦¡I')
½Æ»s¥N½X

¥»©«³Ì«á¥Ñ lpk187 ©ó 2016-9-22 22:04 ½s¿è

¦^´_ 3# c_c_lai


    pypyodbc ©Mpyodbc¬O¤£¦Pªº¡A­n¤U¸üpypyodbc ÁÙ¬O­n¦bCMD ¤¤¤U¸ü
pip install pypyodbc




pypyodbc ¨ä¥Îªk§Ú¤]¤£·|¡A¤£¹L·í®É¥u¬Ý¨ì¤@¥y«ü¥O´N¥i¥H²£¥Í¸ê®Æ®w¡A©Ò¥H§Ú´N¤U¸ü¤F
¨ä»yªk¬°    pypyodbc.win_create_mdb( os.getcwd() + '\\twsedata.mdb')

TOP

¥H¤U¬O§Ú°õ¦æªº¹Lµ{¡G






TOP

¦^´_ 6# koshi0413


    ¬d¸ß³t«×¡AÀ³¸Ó©M¸ê®Æ®w¥»¨­¦³«Ü¤jªºÃö«Y¡IAccess¥»¨­¡A´N¥u¬O­Ó¤H¹q¸£©Ò¨Ï¥Îªº¤p¤p¸ê®Æ®w¡A
·íµM­n³B²z¹³ªÑ¥«¸ê°Tªº¸Ü¡A§Ú¤£·|±ÀÂË¥ÎAccess ¡AÁöµM·L³n¸¹ºÙ¥i¹F·¥­­¬°2G¡AÁöµM§Ú¨S¸Õ¹L¹F¨ì2G·¥­­­Èªº³t«×¡A
¤£¹L¨Ì§Ú·Q¤j·§ºâ¥¦10%¦n¤F¡A¨ä³t«×¤j¬ù´N·|¦³©úÅ㪺®t²§¤F¡C
ÁÙ¦³¦U¤è¼Ò¶ô¡A³£¦³¨äÀu¶Õ¡A·í§Ú¥¿¦b¾Ç²ßpython®É¡A¦³¬Y­Ó¼Ò¶ôªº¬Y¨ç¼Æ¤ñ¥t¥~¼Ò¶ôªº¨ç¼Æ±j®É¡A§Ú·|¥Î³o­Ó¼Ò¶ô¡A
·íµM¡A³o¥u¬O«ü§Ú¥Ø«e¥¿¦b¾Ç²ß¶¥¬qªº·Qªk¡A(¦]¬°ÁÙ¤£¬O«ÜÁA¸Ñ¨ä¨ç¼Æ¥Îªk)

TOP

¦^´_ 10# c_c_lai


   

TOP

¦^´_ 13# c_c_lai


    ¦bpython ¤¤¡A§Ú¤]ÁÙ¬O¦b¾Ç²ß¡A©Ò¥Hª¾¹Dªº¬Æ¤Ö
­n±q¸ê®Æ®w¤¤®³¥X¨Ó¡A¥HPywin32 ADODBªº¥Îªk©MVBA«ÜÃþ¦ü

§A¥i¥H°Ñ¦Òhttp://wiki.alarmchang.com/index.php?title=Python ¸Ì­±¦³«Ü¦h¨Ò¤l°Ñ¦Ò
¬Æ¦Ü±±¨îExcel³£¥i¥H¡A´N­n¬Ý±q¸ê®Æ®w¤¤´£¨ú¥X¨Ó«á­n°µ¤°»ò(¦]¬°§Ú¨Sª±ªÑ²¼¡A¤]¤£ª¾¹D³o¨Ç¼Æ¾Ú¸Ó¥Î¤°»ò¡H³o°ÝÃD¥i¯à­n½Ð±Ð¦U¦ì¤j¤j¤F)

TOP

¥»©«³Ì«á¥Ñ lpk187 ©ó 2016-9-25 17:22 ½s¿è

¦^´_ 13# c_c_lai


¬ã¨s¤F¤@¤U   pandas ¨ú¥X ¦A¾É¤J¨ìCSV ©ÎExcel
  1. import pypyodbc
  2. import pandas as pd

  3. MDB = 'D:\\Python\\¿Ä¸ê¿Ä¨é·JÁ`\\twsedata.mdb'
  4. DRV = '{Microsoft Access Driver (*.mdb, *.accdb)}'
  5. con = pypyodbc.connect('DRIVER={};DBQ={}'.format(DRV, MDB))
  6. data = pd.read_sql('select * from 1220', con) # ¨ú¥X
  7. data.to_excel('1220.xlsx', sheet_name='1220')  #¾É¤J¨ìExcel
  8. data.to_csv('1220.csv') #¾É¤J¨ì CSV
  9. data
½Æ»s¥N½X

TOP

¦^´_ 19# c_c_lai


   ¤£¦n·N«ä¡I¨S¥Î¹LSQLite3¡A¤£ª¾«ç»ò¦^µª§A
§A¥i¥H°Ñ¦Òhttp://www.runoob.com/sqlite/sqlite-python.html
¥H¤Îhttps://docs.python.org/3.5/library/sqlite3.html

TOP

¥»©«³Ì«á¥Ñ lpk187 ©ó 2016-9-28 11:07 ½s¿è

¦^´_ 22# c_c_lai


   ³o¬O§Úºô¸ô§ä¨ìªº¸ê®Æ ¡Aµ¹§A°Ñ¦Ò
http://www.asjh.tn.edu.tw/xuploa ... hap02/recordset.htm
Python»yªk©MVBA®t¤£¦h

¦Órs.Fields.Item(0).Value = regs[0][n]

rs.Fields.Item(0).Value ==> Fields:        ¬d¸ßµ²ªG¤¤Äæ¦ìª«¥óªº¶°¦X, (¤]´N¬O¤@­Ó¼È¦sªº§Ç¦C) ¡AItem(0)§Ç¦C¤¤²Ä¤@­Ó¶µ¥Ø(¤]¥i¥H¥Î¸ê®Æªíªº¶µ¥Ø¦WºÙ¡G¨Ò¦p¡GItem('ªÑ²¼¥N¸¹'))
regs[0][n] ¡G¬°ª¦¦^ªºªí®æªº°}¦C
¦b³o¤§«e¦³¥y rs.AddNew()  ¤]´N¬O·s¼W¤@¦C ¡A©Ò¥Hrs.Fields ´N¹³¬O¤@­Ó¤@ºû°}¦C¡A¬JµM¬O¤@ºû°}¦C¡A©Ò¥H¥¦ÁÙ¥u¬O¤@­Ó¼È¦sª«¥ó ©Ò¥H³Ì«á¡AÁÙ­nrs.Update()¤~·|¦s¤J¸ê®Æ®wªº¸ê®Æªí¤¤

TOP

¦^´_ 24# c_c_lai

²ßºD¤FVBAªº°Ï°ìÅܼƵøµ¡¡A¥H¤Î³v¨B°õ¦æ¨Ó°£¿ù¡A­è¨Ï¥Îpython ¯uªº«Ü¤£²ßºD¡A
¦³®É¡A¤ñ¦p»¡Åã¥Ü100¦æ¥X¿ù¡Aµ²ªG¬O¬Y¤@¦æªºÅܼƤº®e¼g¿ù¡A¯uªº«Ü¤£®e©ö°£¿ù
´N¦p zyzzyva ¤j¤j»¡ªº¡A¤]¥i¥H¥Îvisual studio¨Ó¼g¡A¦Ó¥B¥\¯à¤]ÆZ¦hªº

TOP

        ÀR«ä¦Û¦b : ºÉ¦h¤Ö¥»¥÷¡A´N±o¦h¤Ö¥»¨Æ¡C
ªð¦^¦Cªí ¤W¤@¥DÃD