當前位置:
首頁 > 最新 > websocket與爬蟲

websocket與爬蟲

背景

寫爬蟲的目的應該就是為了拿到數據,或者說模擬某種操作 如果他使用的是http(s) 協議來傳輸數據的,那麼我們就模擬http協議來發送數據 如果它使用的是websocket協議來傳輸數據的, 那麼我們理所當然的就模擬websocket來發送數據~

首先,我們需要了解什麼是websocket

websocket的介紹

WebSocket是一種在單個TCP連接上進行全雙工通訊的協議。WebSocket通信協議於2011年被IETF定為標準RFC 6455,並由RFC7936補充規範。WebSocket API也被W3C定為標準。

WebSocket使得客戶端和伺服器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在WebSocket API中,瀏覽器和伺服器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,並進行雙向數據傳輸。

上面是維基百科的介紹. 簡單的將,websocket 和http一樣,都是一種網路傳輸協議

他比http協議好的地址有哪些呢?

較少的控制開銷。在連接創建後,伺服器和客戶端之間交換數據時,用於協議控制的數據包頭部相對較小。在不包含擴展的情況下,對於伺服器到客戶端的內容,此頭部大小只有2至10位元組(和數據包長度有關);對於客戶端到伺服器的內容,此頭部還需要加上額外的4位元組的掩碼。相對於HTTP請求每次都要攜帶完整的頭部,此項開銷顯著減少了。

伺服器響應

和http欄位不一樣的地方

可以看到只是在http協議上增加了幾個硬性規定,http協議的user-agent,cookie都可以在websocket握手過程中使用

抓包時候的注意事項:因為websocket只有一次握手,握手成功後就可以雙方發送消息了,假如你打開網頁後沒有找到你要抓的數據,那麼你就需要重新刷新網頁,讓他重新握手一次

websocket的事件on_open

表示剛剛連接的時候

onmessage

表示收到消息怎麼做

send

表示給伺服器發送消息

on_close

表示關閉連接

那麼知道了這些對我們有什麼好處么? 找js的時候會很好找,這幾個關鍵詞基本上都是固定的 你可以直接全局搜搜,然後很容易能找到發送的js代碼

模擬發送的時候也是一樣的.

實際案例

前面介紹了一堆websocket協議相關的東西,估計很多人已經暈了. 沒關係,先看實例,有問題再回到上面看

抓包可以使用fiddle,chrome也是可以的

我們先使用chrome

本次要抓的網站的一個投票網站 大家可以先隨便投一個票,抓抓包看看 會發現怎麼沒有找到他是如何提交數據的...

選擇ws,然後刷新下網頁,再點擊下投票,會發現有一個請求

可以看到是在握手階段,請求頭裡面的參數和我們上面講的是一樣的.

請求地址是 這邊順帶說一下,有時候這邊會看到 那麼這兩個有啥區別的,簡單的講就是http與https協議的區別一樣...

看一下交互的內容(點擊Frames) 可以看到已經有四條消息了,但是消息內容是二進位的,chrome這邊無法預覽... 那麼我們使用fiddle試一下

抓包與分析

打開fiddle,刷新一下網頁不刷新的話是看不到的,然後隨便投一下票.

怎麼找到請求呢,很簡單,看狀態碼為101的就行,然後雙擊這一行

然後這邊還是看到四條消息,我們點擊第一條,然後用 展示,可以看到消息是這些 為啥用 呢?其實是一個一個的試過來的,假如你發現都試過了,還是亂碼,那應該是他使用了其他的壓縮或者加密方法,需要查看js看看他是如何加密的

這個網站的數據是沒有加密過的. 帶向上的箭頭的是我們向伺服器發送的,向下的箭頭是伺服器返回的(下面的數據,前面帶黑點?,是我們發送的)

可以看出來 首先我們發送 然後伺服器返回一串信息給我們, 然後我們根據伺服器返回的算出一個值,也就是 再發送給伺服器. 伺服器返回 ,表示驗證通過 然後我們投票,發送了投票的一些信息給服務 伺服器告訴我們投票成功.

以上就是整個通訊過程.

那如果我們要模擬發送的話,需要知道哪些信息呢

itemid 就是你投票的公司的id,catid之前講過,captcha就是驗證碼,auth和上面的authtype一樣rnd是通過搜索js發現了.

再看看驗證碼是如何生成的呢

檢查驗證碼是否正確

我們已經拿到所有需要的東西了,只要用程序模擬發送就行了.

模擬發送

使用的包是websocket

官方demo

可以看到使用還是很簡單的,也是

所以我們只要用我們上面得到的信息就行模擬發送就可以了

因為是投票網站,所以不提供代碼...有啥問題,請留言~


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python爬蟲分享 的精彩文章:

TAG:Python爬蟲分享 |