關於Java爬蟲工程師(中級)應該會的技術與知識

關於Java爬蟲工程師(中級)應該會的技術與知識


  • 數據包及抓包相關內容
  • 數據的追蹤與反追蹤
  • 數據的整理與維護
  • 常見反爬思路及反反爬思路
  • 調度器與下載分離,且學會使用配置文件
  • 學會使用python腳本來調用python庫
  • 對目標源的蒐集要學會套用SEO思路
  • 學會一種融合的蒐集思路

如果沒有看之前的初級篇的話,建議還是去看一下,因爲確實引了很多新人入手的鏈接及資料查找思路。下面進入正題:


數據包及抓包相關內容

直接開始最主要的部分。首先,數據包這東西到底指的是什麼,爲什麼要去了解這個東西?
引用一下百度百科的開頭介紹:
包(Packet)是TCP/IP協議通信傳輸中的數據單位,一般也稱“數據包”。
TCP/IP協議是工作在OSI模型第三層(網絡層)、第四層(傳輸層)上的,幀工作在第二層(數據鏈路層)。上一層的內容由下一層的內容來傳輸,所以在局域網中,“包”是包含在“幀”裏的。
這裏我所說的數據包,並不一定是TCP/IP協議下的數據包。這裏還要來說一下網絡七層模型(OSI)與各協議之間的關係。OSI,由低到高:物理層->數據鏈路層->傳輸層->網絡層->會話層->表示層->應用層。那麼我們來逆向思維,應用層,就是我們能看到的嘛,也就是接近web界面的東西了。那web界面那些數據依據什麼協議傳輸呢?一般都會想到其中的一個http協議。表示層及會話層的東西呢,在目前爬蟲裏至少還沒有做的那麼深,這裏跳過。然後就是網絡層了,網絡層裏有什麼呢?TCP and UDP,也就是說我們既然是經常抓的web上面的數據,那麼抓包的話至少要看到TCP裏面的東西纔可以,也就是至少要滲透到網絡層。剩餘的層呢,因爲不需要去做很深的工作比如嗅探等,所以也不介紹。
因此在中級爬蟲的領域,我們要去了解的協議,必不可少的是http,tcp,那麼,我會問一下我們到底瞭解了多少呢?簡單列舉下,源端口、長度大小、標誌位、序號等。爲什麼要去了解這些東西呢,雖然看上去知道與不知道這些並沒有什麼區別,但是一定要去了解,因爲在一些發爬研究中你就必須知道這些內容。我們怎麼去獲得數據包裏面的這些內容呢,其實也很簡單,好多博主都給出了文章,比如:
Wireshark-TCP協議分析(包結構以及連接的建立和釋放)
https://blog.csdn.net/ahafg/article/details/51039584
既然到了抓包這部分,再來說一下抓包。我們抓包到底該怎麼抓呢?用自己的IP去抓嗎?當然不是,你會瞬間被人家記錄IP地址。我們可以用代理ip去做探測工作,那代理ip我們應該怎麼找呢?首先我們最好是找高匿的代理,找不到的話隨便一個代理都行。然後把代理掛到不同的瀏覽器中去探測,如果你感覺下載很多個類型的瀏覽器很麻煩,可以使用一款最近出來的比較好用的軟件叫postman。它主要做的工作就是模擬你的request數據包去給目標網站發送請求,然後得到相應的response。當然了,是建立在代理ip基礎上發送的數據包,這個軟件因爲是圖形化界面所以用起來比較方便。代理ip怎麼去做呢?不知道有沒有了解過動態代理鏈或者隨機代理鏈呢?(這裏只是提供一個思路,是次要的,畢竟代理不好的話排查起來也很麻煩)代理ip的操作網上有很多教程,搬一個下來即可。初步的僞造身份工作做好之後呢,我們去尋找一款喜歡的抓包工具去抓包,這裏就不列舉了,多的很。然後爲了去研究反爬到底對我們的數據包做了什麼呢,我們要去打開wireshark這個抓包工具,從我們發送的ACK包開始尋找爲什麼我們得不到receive包的原因。找到之後呢,我們可以尋找更多的思路,接下來就是滲透的思路了,比如在輸入完正確的驗證碼的時候,能不能抓到新出現的包,能否找到目標的ip/端口等信息,如果目標數據庫的ip與該目標的ip處於同一c段呢?我是不是可以查看開放的端口?如果我能找到目標網關ip呢?等等等等。
中級大致有些掌握有些瞭解就可以了,有方向走才不至於卡到什麼什麼瓶頸。


數據的追蹤與反追蹤

這裏的意思我是想表達這是對目標網站的監視部分。即如果你去抓一個目標網站,且目標網站是動態網站,那麼怎麼去做增量?怎麼去判斷這個源地址及信息是變化了還是沒變化。
首先要了解,這是個對抗與反對抗的行爲,你想簡單的追蹤我的數據,我肯定不能讓你輕易追蹤到,而且你想用監控的爬蟲來日常監控我,我肯定也不能讓你輕易監控。所以,我還是以常用的爲例。我們應該知道緩存型數據庫,像redis,這類似是key-value型的數據庫,當然還要mongoDB。我們可以把它當作中間件,我們不把每次抓到的url基本信息存到隊列裏了,我們放到數據庫,這樣關機什麼的,至少丟不了數據。然後我們可以指定相關的更新字段,版本號等標誌位來進行追蹤定位。如果我們的網站有非常之多,我們可以定義一個優先級的字段,先追蹤優先級高的再追蹤低的。接下來開始追蹤,定義一個規則庫,維度根據業務由大到小,怎麼去定義這個小的維度呢?因爲追蹤的話,我們業務都是不一樣的,那怎麼通用啊?主要是一個思路:能符合業務線每天需求的最新數據的索引查詢夠快。比如輿情,我要最新的數據,越快越好,那就去分析這個網站數據到底每天怎麼變化的,業務需要的數據大致能怎麼分類,如何將文字搜索轉變成最快的索引搜索等。
再說一下反追蹤,反追蹤就是在你的監控爬蟲被目標站點識別出來之後,可能修改了源網址的訪問信息,使你的爬蟲不能正常工作。那麼我們要做的工作呢,就是滲透裏面的情報收集。在一開始確定目標源的時候把它的基本信息都存到數據庫的一張單獨使用的信息表裏,比如它的domain,服務器ip地址,所屬地,主頁的相關鏈接等。就說這些把。


數據的整理與維護

這塊就是根據業務需要啊,數據分析啊,數據倉庫啊什麼的,將線連起來。然後再打造一個爬蟲的數據庫信息,比如基本信息表,網站維護表,規則表,分類表等。這樣分開的話做索引的思路就會清晰很多。主要是知道分開存放的思路就好,可能ETL在這方面做的會更多。
然後偶爾也要做一些速度測試,形成一套測試數據,來檢查與目標源的數據傳輸情況。


常見反爬思路及反反爬思路

反爬思路,反反爬思路在網上例子也是非常多的,直接參考就可以了。
最全反爬蟲技術介紹
https://blog.csdn.net/vampirekalus/article/details/79779779
Python網絡爬蟲反爬破解策略實戰 作者:韋瑋 轉載來自: 雲棲社區
https://yq.aliyun.com/articles/149571
簡單列一下反爬:
1.限速 2.ip被檢測到 3.驗證碼 4.js跳轉 5.token加密 6.js加密 7.數據僞造 8.身份驗證
9.c段查封 10.ip被列黑名單
反反爬思路:
1.切換ip,排查客戶端與服務端哪邊的原因
2.切換ip,ip池等
3.最簡單的接人工大碼;難的機器學習訓練,最新第3代驗證碼:點擊+順序+不規範漢字+圖片背景
4.phantomjs,chromeDriver….
5.phantomjs,chromeDriver….
6.phantomjs,chromeDriver….
7.不能用phantomjs的,就找js公式然後模擬發送http數據包
8.能找到get/post發送的url的話最好,不能就selenium模擬
9.切換其他c段ip
10.排查列黑名單的原因,永久查封總有原因吧。然後切換ip


調度器與下載分離,且學會使用配置文件

意思就是說管理端與下載端要分離開,因爲管理端任務並不多,一個主線程就可以搞定。下載端因爲任務量巨大,所以要開多個線程去下載。有時還會開多個進程,如果不把這兩個部分分離開,那麼管理端也用了這麼多線程,如果一個下載線程卡殼了那全程都卡殼了。同時分離開也方便後面的二次種子下載入隊。
配置文件分爲基本配置文件以及數據配置文件,也就是說在這裏我們就要爲之後的規則庫打下基礎了,否則抓完數據之後會很亂,而且不易追蹤。


學會使用python腳本來調用python庫

就隨便說一點吧,目前主流的滲透工具都是python寫的。因爲python有個比較好的特性就是調用了module模塊,而每個模塊相當於封裝到了不同的庫中,即想用到什麼模塊的時候就引入什麼模塊的庫。比如目前的驗證碼識別這裏,tesseract在python裏面被應用的例子相當多了,如果你會python腳本,寫一個簡單驗證碼識別,然後放在phantomjs裏面調用一下,不就直接搞定簡單的驗證碼了嗎。
再一個就是最近的機器學習,深度學習,幾乎都是用python的多。因爲跟數據打交道,免不了要配合分析工作,而分析工作主要用的是python語言,雖然hadoop主要是與java耦合度高,但是還是要兼顧兩邊工作同時進行才行。


對目標源的蒐集要學會套用SEO思路

對目標網站進行SEO搜查工作的話,可以發現該站點的搜索引擎收錄排名,備案記錄,創建時間,PV等值,可以進行參考來篩選有高質量數據的網站。


學會一種融合的蒐集思路

綜合的蒐集思路就是我說的要像滲透那樣去認真對待蒐集工作。

最後:
因爲時間原因,還要面試等情況,虎頭蛇尾了點,稍後有時間的話我會再補充的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章