按鍵精靈等以GUI介面為基礎的程序在爬蟲界的地位是怎樣的?

我發現基本上提及爬蟲就是Python和R或者Excel。
但是很騷有人提及按鍵精靈當做爬蟲。
很多人都知道這是輔助軟體(終於知道為什麼之前dota2里打不出「輔助」這種英雄的類型了)
按鍵精靈如何跟爬蟲掛鉤?
這東西不是能打開網頁,複製粘貼嗎,這就是爬蟲的初級形式了。這個工具最為變態的地方就是

  1. 他能夠直接讀取動態HTML,就是F12中的網頁動態DOM elements,所有的東西,可以運行javascript,最為關鍵的一點就是你不需要會特別深入的python語言學習,你只要會操作滑鼠鍵盤,以及進行必要的VBS正則表達式,就可以從DOM中提取出你想要的任何東西了,不管是ajax還是靜態片段。方法很簡單,就是滑鼠指向DOM片段單擊,鍵盤Ctrl+C,讀取剪貼板內存就行了。正則還是要會的。
  2. 從源頭杜絕了很多爬蟲的反制問題,包括訪問者行為鑒別等,因為你的操作就是鍵盤滑鼠。
  3. 還可以點擊各種按鈕操作。各種輸入輸出。js代碼加密了你不知道怎麼調用,那就直接用滑鼠來調用。

唯一的缺點就是程序運行要保持操作系統清潔,不能過一小時來個彈窗,來個提示窗口什麼的。因為程序很難判斷這種異常。
另外,調試的時候會方便很多,運行不下去了,一看網頁就知道:今天它們更新頁面了,加了某個驗證,等等。

題主自身也用這種爬蟲解決了很多其他問題。在沒有深入的編程理論、爬蟲工具使用、http協議以及數據包分析的基礎上,只用滑鼠點擊,就可以爬取很多網站的內容。只需要vbs腳本基礎以及createobject("regexp")的食用方法就行了。

當然題主寫node.js了解上述這些東西,但我感覺按鍵精靈完全就跟上述理論基礎隔離開了。

比如數據載入完畢,理論上需要http request執行結束返回一個值交由程序判斷,但在按鍵精靈里這個操作就變成了「當網頁中出現了一個長得跟xxx.bmp文件一樣的對話框的時候就表示數據載入完畢,下一步就去複製F12源文件了,用正則提取裡面新加的數據」

接下來就是問題了:

一般來說爬蟲都不要求多麼高的實時程度。那麼此類按鍵精靈爬蟲究竟算是奇技淫巧,還是效率工具?


這個東西的優勢是近乎萬能,缺點是成本太高。


按鍵精靈做爬蟲限制很多,比如程序換電腦可能無法運行。

很多動態頁面直接save不行,要點擊打開再保存。

現在頁面內容越來越大,頁面打開時間也不穩定,即使你有等待或超時機制,因為瀏覽器本身的問題,也會經常出現莫名的錯誤 比如Chrome自己當掉了。

而且按鍵爬蟲不能多線程,這樣逐頁完全打開效率就非常非常低了。

當然你非要多線程也可以,開個十台八台虛擬機一起上(′ε` )?

最後請教題主一個問題,按鍵怎麼可以把網易雲音樂的一張專輯裡的歌曲鏈接或是id提取出來保存txt?


我是題主,針對其他答主的回答我繼續補充一下題目,我的知乎沒法在回答里評論了,我家瀏覽器應該壞了。

普通python爬蟲只需要引用一個http的分析包就行了。如果一個爬蟲需要獲取ajax信息,那就需要程序引用一個支持js的環境了。而按鍵精靈可以看做是引用的dwm,沒有通過內核介面與瀏覽器產生信息交互,而通過瀏覽器程序的GUI介面與之產生交互。原則上兩者是相通的,GUI只是充當了中間件,無論內核介面多麼複雜或簡易,都統一轉變為滑鼠點擊、按鍵響應與顯存遍歷,無非就是數學中常見的直角坐標轉化為球面座標而已,得到的結果必然是相同的,不同的就是有些方程在直角坐標系下無法求解而球面座標下易解,也就是說有些東西你沒有做到爬蟲大師級你就求不出來,但轉化為按鍵精靈之後,菜鳥級也可以做出來大師能做出來的東西了。舉個例子,大師需要仿造瀏覽器標籤,充分將自己程序偽裝成瀏覽器,什麼head,什麼agent,聽都聽不懂的東西,大師都要熟悉,都得親自測試好用了。菜鳥就用按鍵精靈就行了,首先網站是給人而不是給robot用的,網站再怎麼反爬蟲,也不能把人給反了,只要人能用滑鼠鍵盤做的,按鍵精靈都可以模擬出來。這樣的爬蟲,可能初期會有反爬蟲策略應付一下,但到了後期,按鍵精靈爬蟲將充分利用自己跟人類的操作完全一樣的優勢,甚至讓爬蟲搭上深度學習順風車,開發AI精靈爬蟲, 教給他頁面排版下哪裡的數據有用,自己學著從網頁中獲取數據,而且所有數據都通過OCR獲取,那將是反爬蟲的末日。

回到按鍵精靈上來,對於伺服器布置問題,這就需要有一定的操作系統知識了。按鍵精靈可以通過與虛擬機+瀏覽器+按鍵精靈軟體封裝在一起的方式實現多線程處理。無非就是多消耗一些內存,128G的內存空間,也沒i7 6代CPU貴。安裝一系列win7閹割版的虛擬機就可以了。這麼大的空間能跑60個線程的按鍵精靈爬蟲,按理說夠用了。自己用nodejs建一個伺服器,讓自己的爬蟲在任務完成以後前來領取新任務【都是自己人就不用設置反爬蟲門檻了,這樣做很爽,不要忘記設置自己的域名為不通過代理的白名單】,讓爬蟲將自己的任務都提交給伺服器,伺服器可以用python連資料庫進行內容組合,生成僱主需要的材料。同時python可以通過分析新的數據生成新的爬蟲任務,通過nodejs後台分發,而與此同時,按鍵精靈則沒有任務的時候就等著10秒刷一次任務【刷自己的網站就不需要瀏覽器參與了,直接用vbs內置網路訪問介面就行】,領取到了任務就做任務。輕量級的爬蟲任務就不用搭伺服器了。專業爬蟲製作者自己搭爬蟲任務分發系統就好了。


有關瀏覽器崩了的問題,如果崩潰,按鍵精靈就無法識別,然後自動進入狀態重置程序,比如執行cmd文件,這個cmd寫好了如何重置系統,多次重置無法解決問題則重啟,多次重啟無果則報警,以便節約寶貴的人力。


當然了,都到這個程度了,按鍵精靈應該已經使用付費版了,也就是你的爬蟲目前正在以.exe形式開機自動運行著,這將帶來很大便利。

另外,為什麼我說的是按鍵精靈,而不是其他的工具,就是因為按鍵精靈已經做好了我想要的任何功能,價錢也不貴,沒有必要從底層重新造輪子了,自己寫滑鼠操作、找圖操作等驅動也可以,但這是要轉行做C++的節奏?AHK不知是否可行,沒用過。如果你的爬蟲價值足夠高,那你自己花錢找人外包一個底層驅動C++模塊也可以啊,爬蟲就可以擴充到任意語言環境下了,甚至linux、mac都可以用。


其他:

我發現有人爬蟲里寫了個這個東西完成頁面交互

post_url = "http://www.zhihu.com/login/phone_num"
postdata = {
"_xsrf": get_xsrf(),
"password": secret,
"remember_me": "true",
"phone_num": account,
}

其中secret是密碼變數

但實際上,很多網站並不是直接傳輸密碼的,而是傳輸加密後的密碼,而加密演算法卻都用js混淆加密技術讓你無法分析,這種情況下還是只能採用激活頁面內js的方法,比如模擬js環境設置value並模擬click事件,或者識圖找到輸入框,輸入文字,然後單擊提交按鈕


看到題主的回復讓我想起之前在公司里和一個學長一起爬Facebook數據的事情。Facebook的反爬蟲做的也很嚴格,比反爬蟲更麻煩的事情是,你得把網頁往下拉,換句話說,你需要向下拉網頁,新的狀態才會被載入出來,才能夠獲取新的數據。

當時我們也沒想到什麼好辦法,所以用了類似於按鍵精靈的方案。當然並不是真的用按鍵精靈了,我把C#的一些操作滑鼠鍵盤的內置庫簡單包裝了一下,給學長調用。將程序運行在機器上,按鍵精靈負責向下拉網頁,拉到一定程度時,啟動爬蟲腳本獲取json格式的數據,然後自動換網頁繼續往下拉………當時是設置每個網頁往下拉給定的時間長度,比如兩分鐘。

當時公司里搞了十幾台機器在爬數據,專門有分析師負責值班。折騰幾天之後,需要的數據總算是都爬下來了。

這件事情給我的感觸是,按鍵精靈的方式和常規爬蟲手段其實是可以結合起來搞的,有時候能把一些看似不好解決的問題很好地繞開。畢竟,說到底,反爬蟲機制不可能把人給反了,你模擬人的操作終歸是可以的。

當然這樣做的缺點也很明顯,就是耗時長,沒有常規爬蟲方案高效,穩定性也難保證,可能需要有人在那裡看守。但是在解決複雜問題的時候,也不失為一個方案。


按鍵精靈不穩定,受限於windows,程序而且效率低。做單個的小東西可以的,簡單的外掛,自動點擊什麼的。
動態網頁抓取,我分析下來還是自己看js吧……


這不就是純模擬,python不也行


我們曾經用按鍵精靈觸發App採集數據,就是通過在app上配置點擊流程,然後觸發對app的點擊,通過設置代理獲取點擊產生的數據請求。

不過後來發現了一個更加好用的工具UIAutomator,可以實現按鍵精靈所有的工作,比較屌的是它可以定位到帶有某些關鍵字的控制項,也可以通過控制項類型、資源id、類路徑等方式去定位控制項,而按鍵精靈就只能按照位置去點擊。不過UIAutomator缺點是需要自己做些開發。

現在我們就通過UIAutomator對app定時觸發一串操作,然後通過Xposed hook app的方法,在方法前後做一些事情(比如循環請求數據),再通過代理將數據上傳到部署了anyproxy的代理伺服器,anyproxy攔截指定數據上傳至我們的伺服器,從而完成數據的採集。


如果用模擬鍵鼠操作的話,用CEF內置的介面模擬不是更好?


對於沒什麼編程基礎的人可能是效率工具,但是掌握Python爬蟲會讓你強大得多,體驗過高鐵之後沒人會想再坐上世紀的馬車 。


推薦閱讀:

用 Scrapy 爬蟲怎麼解決動態網頁的問題?
scrapy的request的meta參數是什麼意思?
用python寫爬蟲時用自帶的urllib好還是用request庫好,還是兩個都要學?
C#多線程發送http請求效率是否比python慢?
一個爬蟲框架需要具備哪些功能?

TAG:Python | 爬蟲計算機網路 | 按鍵精靈 |