Shopping Cart

購物車內沒有任何商品。

爬蟲第四步:偽裝一個headers吧!

立即訂閱電子報,掌握最新資訊!

    稱呼

    電子郵件

    以下非必填,但若您願意分享,我們將能推送更精準的內容給您

    投資經驗

    是否為理工科背景、工程師或有寫程式的經驗?

    有興趣的主題
    量化交易台股期貨海外期貨虛擬貨幣美股

    有興趣的量化交易軟體/平台
    不清楚MultiChartsTradingViewPythonXQ

    想透過量化交易達成甚麼目的?
    不確定自動交易選股回測投資績效量化自己的投資方法想找現成的策略套用

    還有什麼想詢問的?

    20241111 1920 400
    20241111 978 258


    大家是不是常常會在爬蟲中,發現某些網站怎樣就是爬不下來呢?沒錯,這是非常常見的問題!
    以下我們來看為什麼沒辦法成功爬蟲,以及要如何解決!

    一、網站server端的loading不足

    這是啥意思呢?也就是指可承載的流量很低,

    導致如果爬蟲一次要很多資料,它就爆炸 overload(超載),

    於是你的爬蟲就失敗了…

    這狀況雖然現在比較少見,但如證交所的證券清單,

    那頁的 loading 量就很低,很常掉封包或失敗呢!

    Py 101209161710
    Py 101209161711

    二、有防爬蟲的設置

    但多數時候都是以下狀況 2,只要是這狀況,就會讓爬蟲爬失敗,

    那這時候該怎麼辦呢?首先我們先區別幾種爬蟲失敗可能的狀況:

    狀況1:一秒太多次requests
    狀況2:一定時間內太多有規律、同IP的爬蟲
    狀況3:特殊渲染的網頁
    狀況4:直接判定送來的requests有沒有headers

    狀況 1、2 的解決方案:

    其實防爬蟲並不是因為他們不想讓你取得資料,而是為了保護伺服器(server),因為對於爬取方很簡單,就是我全都要!

    但對於網站方,如果人人都用程式來把網站當吃到飽 buffet,那網站隨之而來的就是大量的 loading,這樣不只對網站增加負擔,還會讓網站管理費用扶搖直上呢!

    那因為防爬蟲的最基本就是找出那些定期登入網站的對象,

    或是瘋狂按 F5 重新整理的狂人……

    當你用 while 每秒都爬一次時,你就是那個狂按F5的狂人 …… 那這時候當然得對這些人下點限制,否則就侵占了其他人使用這個網站的權益啦!

    所以我們得加上 schedule 與 time.sleep() ,並在相關函式內加上隨機,讓爬蟲週期產生隨機性,例如:

    schedule:

    import schedule
    import time
    import random
    import datetime

    def job():
      t = datetime.datetime.now().replace(microsecond=0)
      print(str(t) + ” Here is QP, Hello”)

    i = 0
    for i in range(10):
      delay = random.randrange(1, 5)
      print(delay)
      schedule.every(delay).seconds.do(job)

    while True:
      schedule.run_pending()
      time.sleep(.01)

    time.sleep

    from random import randint
    from time import sleep

    sleep(randint(10,100))

    狀況 3 的解決方案:

    得靠 Selenium 去解決,這個會很依照網頁需求去討論。

    狀況 4 的解決方案:

    也就是今天的主題囉!

    在任何爬蟲開始之前,加入以下 Code:

    headers:

    headers = {
      ’content-type’: ‘text/html; charset=UTF-8’,
      ’user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
    (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36′
    }

    上面那個就是告訴爬蟲以什麼方式執行:

    1. Mozilla
    2. AppleWebKit
    3. Chrome

    以及用什麼解析這個網頁:

    • ‘text/html; charset=UTF-8’

    小備註:上面的意思就是用 text/html 的方式,以 UTF-8 的格式去做解析,UTF-8 通常就是指中文字型哦!

    最後就是把 headers 加入我們的爬蟲設定囉!

    res = requests.get(你要爬的url, headers=headers)

    這樣一來,我們想要的爬蟲就可以被認為是正常的登入,進而就可以取得想要的資料囉!


    加入LINE社群量化交易討論群」無壓力討論與分享!

    加入Discord 「量化交易討論群」即時獲取實用的資源!

    Write Together 101306261122
    Write Together 101306261121
    RoWay
    RoWay

    多年投資經驗的兩岸三地操盤手,曾任海外資產管理公司交易平台的產品經理、與各外商投資公司合作開發各式交易策略與系統。

    擅長用Python執行資料蒐集、整理、分析與交易;也善於用Multicharts、MetaTrader等系統建構並回測期貨、期權、區塊鏈策略進而完成投資組合管理。

    文章: 28

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *