一日一技:如何捅穿 Cloud Flare 的 5 秒盾
攝影:產品經理
開胃小菜
經常寫爬蟲的同學,肯定知道 Cloud Flare 的五秒盾。當你沒有使用正常的瀏覽器訪問網站的時候,它會返回如下這段文字:
Checking your browser before accessing xxx.
This process is automatic. Your browser will redirect to your requested content shortly.
Please allow up to 5 seconds…
即使你把 Headers 帶完整,使用代理 IP,也會被它發現。我們來看一個例子。Mountain View Whisman students sent home after children test positive for COVID-19 [1] 這篇文章,使用正常瀏覽器訪問,效果如下圖所示:
直接查看原始的網頁源代碼,可以看到,新聞標題和正文就在源代碼裏面,說明新聞的標題和正文都是後端渲染的,不是異步加載。如下圖所示:
現在,我們使用 requests,帶上完整的請求頭來訪問這個網站,效果如下圖所示:
網站識別到了爬蟲行爲,成功把爬蟲請求擋住了。很多同學在這個時候就已經束手無策了。因爲這是爬蟲的第一次請求就被擋住了,所以網站不是檢測的 IP 或者訪問頻率,所以即使用代理 IP 也無濟於事。而現在即使帶上了完整的請求頭都能被發現,那還有什麼辦法繞過這個檢測呢?
實際上,要繞過這個 5 秒盾非常簡單,只需要使用一個第三方庫,叫做cloudscraper
。我們可以使用pip
來安裝:
python3 -m pip install cloudscraper
安裝完成以後,只需要使用 3 行代碼就能繞過 Cloud Flare 的 5 秒盾:
import cloudscraper
scraper = cloudscraper.create_scraper()
resp = scraper.get('目標網站').text
我們還是以上面的網站爲例:
import cloudscraper
from lxml.html import fromstring
scraper = cloudscraper.create_scraper()
resp = scraper.get('https://mv-voice.com/news/2021/05/04/mountain-view-whisman-students-sent-home-after-children-test-positive-for-covid-19').text
selector = fromstring(resp)
title = selector.xpath('//h1/text()')[0]
print(title)
運行效果如下圖所示:
破盾成功。
CloudScraper[2] 非常強大,它可以突破 Cloud Flare 免費版各個版本的五秒盾。而且它的接口和 requests 保持一致。原來用 requests 怎麼寫代碼,現在只需要把requests.xxx
改成scraper.xxx
就可以了。
參考資料
[1]
Mountain View Whisman students sent home after children test positive for COVID-19 : https://mv-voice.com/news/2021/05/04/mountain-view-whisman-students-sent-home-after-children-test-positive-for-covid-19
[2]
CloudScraper: https://github.com/venomous/cloudscraper
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/zwmatF3yTgSyS0gz8sinaA