python - 如何爬取登錄后的socket連接
問題描述
需要爬取一個登錄以后的socket連接,這個socket會不定期的傳數據到網頁上,然后我目前只能通過不斷刷新網頁去完成,有沒有什么好的辦法可以去爬取需要網頁登錄后的socket呢?
===繼續描述:
已實現的部分模擬登錄 (selenium模擬登錄)
偽造UA,刷新cookies,刷新sessionID(通過不停的登錄登出換cookie,定時結束webdriver再重啟來刷新sessionID)
通過Xpath 來獲取頁面的數據(lxml)
想要的結果(未實現)他的socket數據是這樣傳給瀏覽器的,我就是想用python搞個socket client接進這個socket,然后等服務器推給我數據.
總的來說,爬一個時間點的數據并不困難,但是對于長連接的持續爬蟲,持續監控,響應式監控我在網上找不到好的辦法,如果是設置定時任務去爬蟲,則當采樣周期過小的時候(小于1秒),則運算等成本過高且容易被封掉,有沒有什么好的辦法呢
問題解答
回答1:HTTP是無狀態的,所以你的登陸以后狀態是通過傳給服務器一個或多個特殊值(一般在報文頭的cookie字段里)來確定的。抓一下HTTP包,然后模擬時帶上這些特殊值就OK了。
更新內容:看到它Status Code了,這應該是將連接換成websocket了,那么這個頁面一定是對方來提供的了。你可以看一下頁面的源碼,應該會有var ws = new WebSocket('ws://ip:3000'); 之類的內容。看一下對方客戶端的要求,然后改寫ws.onmessage回調函數,這個函數的話內容就任你拿捏了,你可以用它來判斷返回了新內容或者再去請求另一個服務器來處理這些新內容。你可以看一下這篇文章 網頁實時聊天之PHP實現websocket 的客戶端部分,試著修改來實現你的需求。
回答2:找個websockt客戶端庫連就好了啊
相關文章:
1. 為什么我ping不通我的docker容器呢???2. java - 自己制作一個視頻播放器,遇到問題,用的是內置surfaceview類,具體看代碼!3. 服務器端 - 采用nginx做web服務器,C++開發應用程序 出現拒絕連接請求?4. javascript - 有什么兼容性比較好的辦法來判斷瀏覽器窗口的類型?5. 關于docker下的nginx壓力測試6. javascript - vue 移動端的input 數字輸入優化7. javascript - Angular controlller控制域和原生js的關系8. javascript - npm start 運行’webpack-dev-server’報錯 Cannot find module ’webpack’9. HTML5禁止img預覽該怎么解決?10. python - pandas按照列A和列B分組,將列C求平均數,怎樣才能生成一個列A,B,C的dataframe
