返回列表 上一主題 發帖

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

本帖最後由 koshi0413 於 2016-9-20 14:21 編輯

下面是找到的文章,用 python的可以看一下:
小弟附上的代碼是為了應付這類的,其它的就參考了,看看總沒壞處

http     +      s://zhuanlan.zhihu.com/p/20520370

0x02 通过Headers反爬虫
从用户请求的Headers反爬虫是最常见的反爬虫策略。很多网站都会对Headers的User-Agent进行检测,
还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。
如果遇到了这类反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;
或者将Referer值修改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。

目前想針對這種的下手:
0x03 基于用户行为反爬虫
还有一部分网站是通过检测用户行为,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。

現在卡在這種@@
0x04 动态页面的反爬虫

TOP

回復 152# koshi0413
原本是快將之前學習的 Python 忘記了,多虧這篇文章讓我重拾對它的興趣,
有了一個醒目實用的主題,讓大家來一同探討,真的有助於吸引大家的學習心。
希望大大們能無私地將其心得分享,有了實際得以應用的實用範例,真實地
觸發求知慾的得以滿足,這亦是我個人的理想。
謝謝囉!

TOP

回復 151# c_c_lai

這是隨機排列,並不是每項排列,所以可能是沒輪到吧?
就算真的沒有也無所謂,去多收集幾個就好了~~

TOP

回復 150# 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

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

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

回復 146# jackyq

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

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

TOP

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

回復 145# koshi0413

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

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

        靜思自在 : 【行善要及時】行善要及時,功德要持續。如燒開水一般,未燒開之前千萬不要停熄火候,否則重來就太費事了。
返回列表 上一主題