返回列表 上一主題 發帖

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

回復 140# lpk187

其實   小弟就是裝 Anaconda 然後使用 2.7
很多套件還是小弟在補上的@@

所以,目前我碰上的情況,另外用  Anaconda 開一個3.4版本,用大家的代碼  也許就解決了?

TOP

回復 141# koshi0413


    其實也不用下載3.x版的Anaconda
在安裝目錄下\Anaconda3\Scripts .....找看看有沒有 2to3 或 3to2 的檔案,這是2.x版轉3.x版 以及3.x轉2.x版 檔案
以我版本來說只有 2to3,而且是執行檔 exe 檔,

TOP

回復 141# koshi0413

我先說明下載 3to2
在cmd 下  cd C:\Anaconda3\Scripts <<這是我安裝的目錄,應以你安裝的目錄為準
pip instsll 3to2

C:\Anaconda3\Scripts>pip install 3to2
Collecting 3to2
  Using cached 3to2-1.1.1.zip
Building wheels for collected packages: 3to2
  Running setup.py bdist_wheel for 3to2 ... done
  Stored in directory: C:\Users\lpk187\AppData\Local\pip\Cache\wheels\09\f6\6b\5220ff649a6eb703d0a1d55123ca5c6ccf5213a6bb87ddb806
Successfully built 3to2
Installing collected packages: 3to2
Successfully installed 3to2-1.1.1

這樣就表示安裝完成
接著在C:\Anaconda3\Scripts目錄下產生一個檔案, 沒有副檔名的3to2,
更改它的副檔名為3to2.py
再來就是轉換了
假設有個 py是以3版格式寫的放在D:\ 下,檔名為 tt.py
C:\Anaconda3\Scripts>python 3to2.py -w d:\tt.py
...
...
RefactoringTool: Files that were modified:
RefactoringTool: d:\tt.py
這樣就表示轉換成功了

再來是2to3以我的版本來說是執行檔2to3.exe,也因為是執行檔所以操作會簡易許多
以剛才那個檔案為例
C:\Anaconda3\Scripts>2to3 -w d:\tt.py
...
...
RefactoringTool: Files that were modified:
RefactoringTool: d:\tt.py
這樣就表示轉換成功了

TOP

下面圖片是轉換後的差異

TOP

回復 144# lpk187


  原來有版本轉換套件,感謝您了‧‧‧‧有空會來試試

另外,大家提取網頁資料時,在網上有查到,提到有些網站會記錄 headers = {"User-Agent": "Mozilla/5.0"} 資訊來判斷連線記錄(有些是判ip)
為了不讓提取的網頁這麼快就改版&有所警覺,所以上網查了些亂數排列的方式,給大家方便使用
項目可以自己上網找來新增,本身是打算找十個來用@@
  1. import random
  2. hs = random.choice([
  3. 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
  4. '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',
  5. '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'        
  6. ])
  7. headers = {"User-Agent":hs}
  8. print headers
複製代碼

TOP

本帖最後由 jackyq 於 2016-9-16 17:08 編輯

回復 145# koshi0413

觀察敏略喔
證交所常常在那改版
8,9成應該就是這個原因
之前有人在那放券商買賣日報表自動抓抓樂的程式 , 有人還散佈資料
買賣日報表就被改成要驗證碼機制
還被加註警語: 不可散佈

TOP

回復 146# jackyq

因為短時間重覆開網頁等於是攻擊對方的伺服器,所以有些會判斷 ip
解鎖定ip比較麻煩@@
要找一堆ip,速度又不穩,有些失敗率高,小弟懶了   哈哈

所以有些寫出來的  都很低調的~~
因為一開放,網頁就GG了@@

TOP

本帖最後由 koshi0413 於 2016-9-17 19:51 編輯

改一下隨機選取之作法
  1. import random
  2. hs = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
  3.        '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',
  4.        'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0',           
  5.        'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)',
  6.        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)']

  7. headers = {"User-Agent":random.choice(hs)}   #此行請丟在各網頁url前段,每次for至網址就會變換了
複製代碼

TOP

回復 148# koshi0413
能否以此方法舉一兩個範例,
方便明瞭其實際網頁的應用?
謝謝!

TOP

本帖最後由 koshi0413 於 2016-9-18 18:40 編輯

回復 149# c_c_lai

差別在於  User-Agent  內容 會隨機變換,避免用同一資訊大量提取網頁,下面有win10, iphone, ipad,Linux
其它的要在網上收集,反正就是看到就丟進去,隨機的越多越好,在短時間大量取網頁,送出至對方伺服器的資料才有所差別

不過這只是第一步,其實重要的還是在於  ip 隨機變換

應用例:
  1. import requests
  2. import random

  3. hs = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
  4.            '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',
  5.            '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',
  6.            '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'     
  7.            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)']


  8. headers = {"User-Agent":random.choice(hs)}
  9. url = '第一個網頁'  
  10. payload={'download':'csv',
  11.         'qdate':'105/09/07',
  12.         'selectType':'ALL'}
  13. res = requests.post(url, headers=headers, data=payload, stream=True)

  14. headers2 =  {"User-Agent":random.choice(hs)}
  15. url2 = '第二個網頁'
  16. payload2={'download':'csv',
  17.         'qdate':'105/09/07',
  18.         'selectType':'ALL'}
  19. res2 = requests.post(url2, headers=headers2, data=payload2, stream=True)
複製代碼
單純的隨機變換例:
  1. import random
  2. for i in xrange(10):
  3.     hs = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
  4.            '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',
  5.            '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',
  6.            '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'     
  7.            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)']
  8.     headers = {"User-Agent":random.choice(hs)}
  9.     print headers
複製代碼

TOP

        靜思自在 : 得理要饒人,理直要氣和。
返回列表 上一主題