寫Python爬蟲一定要用到chromedriver嗎?

李亞東


如果是讓我寫,我優先選用selenium(chromedriver),模擬正常瀏覽。效率低很多,但是數據靠譜。


爬蟲與反爬,就像生存與死亡,是一個值得考慮到問題。

寫爬蟲,目的是獲得數據。如果是簡單、無爭議公開的數據,只要不對服務器造成壓力,方法都不重要。但往往要獲取的數據,很多情況下對方都不希望通過爬蟲自動化輕易得到。這時候,雙方工程師、甚至是律師就要博奕了。

紅方:基於數據統計、機器學習的方法,判斷區別與常人瀏覽的途徑很多。

藍方:針對紅方的可能手段,也有很多途徑。所謂上有政策,下有對策。比如維護一個IP池自動切換。博奕,說白了就是鬥爭。沒有永遠勝利的一方。花費精力寫一個專業爬蟲,但這個爬蟲可能也需要維護的。個人覺得不值得,應該想想其他方式。


專業爬蟲,核心不會用python寫的

大前端的語言,js+抓包分析是更加勝任爬蟲的語言。一是爬取的數據,大部份都是來自網站或APP。用原汁原味的js,再對口不過。同時,效率會更高。據我所知,很多競爭對手爬取對方的價格,基本都繞不開js。用python會適得其反。


說個反爬的損招

通過nginx配置,能實現簡單的反爬,這裡說一個損招。

一般對方爬取我方數據時,我們都會設置路障,比如要求對方輸入手機驗證碼、識別圖片、或者告知,請24小時候再來訪問。

不妨反其道而行之,如果能確認對方是爬蟲,不要阻止對方來爬取,二是造隨機數據給對方爬。數據偽裝成什麼樣,可以靈活控制。可以80%假,20%真。或者比例反過來。甚至比例可以隨機。這種方法可以捉弄對方的工程師。


最後友情提醒,爬蟲有風險,碼農要謹慎。


平凡科技


不一定,這個要看目前網站的反爬措施

如果能用requests庫區抓取數據的話,就不必用selenium,因為這個再執行效率上並不是很快。


下面介紹一下selenium

selenium是一個自動化運維的工具,它可以驅動谷歌瀏覽器、火狐瀏覽器等,去自動打開網址並對其進行相關操作,比如填寫表單、點擊按鈕、滑動驗證碼等。

能從web界面獲取信息。 比如獲取12306票務信息,招聘網站職位信息,財經網站股票價格信息 等等,然後用程序進行分析處理。

Selenium 的自動化原理是這樣的

從上圖可以看出:

我們寫的自動化程序 需要使用 客戶端庫

我們程序的自動化請求都是通過這個庫裡面的編程接口發送給瀏覽器。

比如,我們要模擬用戶點擊界面按鈕, 自動化程序裡面就應該 調用客戶端庫相應的函數, 就會發送 點擊元素 的請求給 下方的 瀏覽器驅動。 然後,瀏覽器驅動再轉發這個請求給瀏覽器。

這個自動化程序發送給瀏覽器驅動的請求 是HTTP請求。

客戶端庫從哪裡來的? 是Selenium組織提供的。

Selenium組織提供了多種 編程語言的Selenium客戶端庫, 包括 java,python,js, ruby等,方便不同編程語言的開發者使用。

我們只需要安裝好客戶端庫,調用這些庫,就可以發出自動化請求給瀏覽器咯。

瀏覽器驅動

也是一個獨立的程序,是由瀏覽器廠商提供的, 不同的瀏覽器需要不同的瀏覽器驅動。 比如 Chrome瀏覽器和 火狐瀏覽器有 各自不同的驅動程序。

瀏覽器驅動接收到我們的自動化程序發送的界面操作請求後,會轉發請求給瀏覽器, 讓瀏覽器去執行對應的自動化操作。

瀏覽器執行完操作後,會將自動化的結果返回給瀏覽器驅動, 瀏覽器驅動再通過HTTP響應的消息返回給我們的自動化程序的客戶端庫。

自動化程序的客戶端庫 接收到響應後,將結果轉化為 返回給 我們的代碼。

我們的程序就可以知道這次自動化操作的結果如何了。

我們再總結一下,selenium 自動化流程如下:

  1. 自動化程序調用Selenium 客戶端庫函數(比如點擊按鈕元素)
  2. 客戶端庫會發送Selenium 命令 給瀏覽器的驅動程序
  3. 瀏覽器驅動程序接收到命令後 ,驅動瀏覽器去執行命令
  4. 瀏覽器執行命令
  5. 瀏覽器驅動程序獲取命令執行的結果,返回給我們自動化程序
  6. 自動化程序對返回結果進行處理

Python全棧之巔


這篇文章主要是從Python編程語言生態系統的角度編寫的。我注意到,Selenium已經成為非常流行地用來抓取從網頁上的數據,所以chromedriver也是必備的。是的,您可以使用Selenium進行網絡抓取,但我覺得這不是一個好主意

我個人也認為,教導如何使用Selenium進行網頁抓取的文章為日常使用工具進行網頁抓取提供了一個不好的例子

1.為什麼不應該使用Selenium進行網絡抓取

首先,Selenium不是Web抓取工具。它是“用於自動化Web應用程序以進行測試”,該聲明來自Selenium主頁。其次,在Python中,有一個更好的工具Scrapy開源Web爬網框架精明的讀者會問:“ 與Python相比,使用Scrapy有什麼好處?”,您將獲得速度和很多速度,開發速度和Web抓取時間的速度,而且代碼更乾淨些。

有一些技巧可以使Selenium Web抓取速度更快,如果使用Scrapy,則不會出現此類問題,而且速度更快

僅僅因為這些文章的存在證明了(至少對我而言)人們使用了錯誤的工具進行工作,例如“ 當您唯一的工具是錘子時,一切看起來都像釘子 ”。

2.你什麼時候該用Selenium

我個人僅使用Selenium進行網頁測試。我會嘗試使用它來自動化Web應用程序(如果沒有其他選擇),但是到目前為止,我還沒有這種用例。使用Selenium作為Web抓取工具時,我可以看到的唯一例外是,如果要抓取的網站正在使用JavaScript來獲取/顯示需要抓取的數據,而且它防爬蟲技術很厲害,需要你模仿瀏覽器去捕獲,這時候用Selenium是個明智的選擇。

3.用什麼代替Selenium來進行網絡抓取

如您所料,我的建議是使用Scrapy。我選擇Scrapy是因為我花了更少的時間來開發Web抓取程序(Web Spider),並且執行時間很快。我發現由於Scrapy Shell和緩存,Scrapy的開發速度更快。在執行過程中,由於可以同時完成多個請求,因此速度很快,這意味著數據傳遞將不會按照請求的順序進行,只是您在調試時不會感到困惑。

4.總結

但存使用Selenium進行Web抓取是不足夠的,因為不是生產系統和學習/愛好,這很好

雖然Selenium很容易啟動,您可以在屏幕上實時看到正在隱藏的內容,這對於開始學習/學習網絡抓取的人們來說是一個巨大的好處,並且在出現這種情況時要擁有這種早期道德觀念很重要。

但是我確實認為所有使用Selenium進行Web抓取的文章和教程都應聲明免於現實生活中不使用Selenium(如果您每天需要抓取100K頁面,則不可能在單個Selenium實例中做到這一點)

要開始使用Scrapy很難,您必須編寫XPath選擇器並查看要調試的HTML頁面的源代碼並不好玩,但是如果您想快速進行網絡抓取,那就是需要花多點時間研究技術,畢竟因地制宜



Hacker


不一定,要看網頁使用的技術

爬蟲的目的是抓取頁面元素,普通的網站,頁面都是在後端渲染以後發送到瀏覽器顯示,爬蟲可以直接定位元素,而另一些則不然,所以如果沒有形成頁面肯定需要使用瀏覽器驅動來,渲染頁面,然後我們才能拿到頁面元素。

如果是後端渲染好,直接在瀏覽器呈現的,不需要用Chrome驅動,

如果是在瀏覽器才開始渲染,也就是說傳輸到瀏覽器的不是靜態頁面,而是一堆js文件,那麼就需要用chrome driver了。


搬磚農民工


如果網站混淆加密級別不高,完全沒必要用Chromedriver(一般稱著無頭瀏覽器)來模擬請求。可以分析網站請求邏輯,直接使用http的post或者get來模擬請求。如果涉及到加解密的話,需要去破解js代碼邏輯。



素描一世繁華


不是,你說的那個driver是用谷歌瀏覽器驅動,通常代碼中如果用到headless的谷歌瀏覽器,則必須用這個驅動;

其他情況,則沒有必要用,也沒有用!


SunFlow007


首先告訴你,不是。

這個驅動是基於selenium庫的。使用這個驅動表示可以使用瀏覽器來進行數據採集。

如果你知道某個資源的具體地址,你也可以直接使用

reques.get

(“...”)直接進行數據的採集。只是使用這個插件可以簡化咱們很多的工作量,最初這個插件其實是用來模擬人工進行web測試的。所以告訴你,爬蟲不一定用chromedriver驅動

蜜蜂攻城獅


不用,你說的是用來模擬操作瀏覽器的。平常爬蟲開發的話,基本都是用request庫做的。


分享到:


相關文章: