selenium爬蟲被檢測到 該如何破?
你好, 我現在用selenium抓取一個網站的時候,被識別為爬蟲,請問有什麼破解的方法么? 代碼如下
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutExceptionbrowser = webdriver.Chrome()
browser.implicitly_wait(40)
browser.get("https://www.crunchbase.com/app/search/companies/")time.sleep(60)
頁面返回:
Pardon Our Interruption...As you were browsing crunchbase accelerates innovation by bringing together data on companies and the people behind them. something about your browser made us think you were a bot. There are a few reasons this might happen:
- You"re a power user moving through this website with super-human speed.
- You"ve disabled JavaScript in your web browser.
- A third-party browser plugin, such as Ghostery or NoScript, is preventing JavaScript from running. Additional information is available in this support article.
To request an unblock, please fill out the form below and we will review it as soon as possible.
該網站使用了http://distilnetworks.com的反爬服務.
謝邀。。。我剛用selenium+phanotomjs試了一下,發現返回結果和題主的一樣。不得已使用了selenium+chrome/firefox,發現均出現這些問題。我覺得它的反爬策略不是根據爬蟲的行為來判斷的,因為使用爬蟲打開網頁它就已經把你認定為爬蟲了,根本沒給你展示你的行為的機會。依據我的經驗,它是直接提取的瀏覽器驅動的指紋特徵,比如常用的驅動有chromedriver,這種方式基本上我還沒找到一個好的應對方式。為了驗證我的想法,我選擇了使用geckodriver(Releases · mozilla/geckodriver · GitHub)來驅動firefox(沒有使用firefox自帶的webdriver,因為自帶的webdriver它已經被收集指紋了),第一次返回的結果的意思是:不能識別該瀏覽器。從這點可以看出它有一個可識別的指紋特徵列表,不在次範圍內的都不能訪問,在此範圍內的,只有是合法的(非webdriver驅動的)才能訪問。另外,它一旦發現你用的webdriver驅動,那麼它就會把你的IP暫時列入黑名單,這時候就算你手動輸入網址都不能訪問,但是過一段時間又可以訪問了,我這邊測試的情況就是這樣。
以前我也做過類似的研究,可以看看我提的問題(怎麼識別自動化的Web爬蟲(比如採用selenium或者phantomjs)? - Python)。當時我們組做了兩個解決方案,一個就是使用它未採集的webdriver來驅動瀏覽器,這裡似乎不行,因為未採集的它都一律不給通過。另外一個方法就是讀它的js源碼了,然後挨著步驟調試,這種方法需要很深的js功底。
說了這麼多,很慚愧我還是沒有找到有效採集目標網站的方法爬蟲要用一些調度策略,避免觸發機器人識別程序。機器人識別程序有些很簡單,比如,根據單位時間內訪問的網頁數量,有些比較複雜,比如根據訪問的網頁間關係,還有更複雜的根據監聽網頁上的事件。
反正要讓爬蟲的行為特別像真人,目前我重點是做行為建模,比如,我從GooSeeker爬蟲6.x版本開始增加了一個開發者工具:錄製真人瀏覽網頁的事件,期望建立一個十分逼真的模型。在這個回答中有說明:直接用Charles抓包的信息, python 模擬登錄網站的一點問題? - 華天清的回答
其實反爬就是提高爬蟲成本,直到高到爬數據不划算為止。crunchbase和其它好多種企業信息有關的網站我都爬過,多用一些爬蟲電腦,各自用不同的ADSL線路或者使用proxy輪換等,每爬一個網頁隨機歇一下等等。phantomjs 會被好些網站自動認作爬蟲。因為正常人是不會用這個瀏覽器的……建議嘗試直接上chrome 的 webdriver。使用方法和 phantomjs 完全一樣。還可以實時方便的監控網頁的爬取進程。之前做過一個爬取google的小項目,最後就是用chrome加隨機延時防止被捉的。
PS:我簡單測試了一下,用chrome是可以自動打開這個網站的。
from selenium import webdriver
test_url = "https://www.crunchbase.com/app/search/companies"
spider = webdriver.Chrome("C:/Program Files (x86)/Chromedriver/chromedriver.exe")
spider.get(test_url)
PS:如果用了chrome還有問題,那應該就是爬蟲策略太簡單了,或者掉進蜜罐了,要仔細看源代碼或者嘗試降低爬取速度
stackoverflow上有個相同問題。鏈接在這裡:
Can a website detect when you are using selenium with chromedriver?
高票答案說這種識別是通過辨認一些帶有selenium特徵的javascript預定義變數來實現的,且不同的瀏覽器所能暴露出來的特徵不一樣。那哥們也是用的chrome,他提出的解決方法是改掉這些變數的名稱。他自己下了chromedriver的源碼,把裡面特徵變數的名字改掉,然後重新編譯,結果似乎是騙過了目標網站。但是他後面補充了一點:在此之前你最好不要被網站加入黑名單里,因為你的瀏覽器有自己獨特的指紋可以被追蹤。 更具體的討論還得看原帖。
裡面第二個回答還引用了一段 "Distil Networks" (題主提到的那個distilnetworks.com)CEO的話,提到了逆向工程和模式識別。他們似乎是通過多種技術來實現對機器人的識別,但是更多的細節並沒有透露。
我對webdriver的實現細節並不清楚,之前一直覺得 手動打開瀏覽器 和 使用webdriver打開瀏覽器 應該沒有差別,都是貨真價實的瀏覽器嘛,但從現在這個情況看,在使用selenium時,瀏覽器的某些特徵和手動打開時是不一樣的。只要你用webdriver打開了瀏覽器,瀏覽目標網站時即便不對瀏覽器進行更多操作,也能被網站發現。就看這個網站是不是使用了這樣的識別技術了。
不知題主找到解決方法沒,感覺重新編譯還是有點麻煩啊。今天也遇到這個問題,現在我只能先附上最上面的鏈接,如果後面解決了這個問題,我會把步驟補上供大家參考。要是題主已經解決了的話還請分享一下解決方法呀!星星眼!!
可以設置headers試試
根據描述來看,你沒有給phantomjs設置user-agent
你試一試直接訪問首頁,看能不能正常訪問。
如果可以的話,你在首頁通過點擊鏈接的方式進到你需要的那個頁面。
用selenium+chromedriver可以獲取到源代碼。為什麼一樣用的distilnetworks反爬蟲。
NikeLab x Kim Jones Tech Fleece Hoody (Hyper Pink Heather Clear) 這個網站就獲取不到
這個問題我已經整理一些方案了,詳細請參考Python爬蟲防封殺方法集合
如果上面鏈接掛了,還有一個Python爬蟲防封殺方法集合,內容都是一樣的,就是有時候CSDN抽了,就掛簡書上了
推薦閱讀:
※Nginx、Gunicorn在伺服器中分別起什麼作用?
※Python 如何入門?
※那麼,Python做爬蟲究竟比其他語言好在哪裡呢?
※關於用python抓取知乎關注的人?