python - 如何爬取登錄后的socket連接
問題描述
需要爬取一個登錄以后的socket連接,這個socket會不定期的傳數(shù)據(jù)到網(wǎng)頁上,然后我目前只能通過不斷刷新網(wǎng)頁去完成,有沒有什么好的辦法可以去爬取需要網(wǎng)頁登錄后的socket呢?
===繼續(xù)描述:
已實現(xiàn)的部分模擬登錄 (selenium模擬登錄)
偽造UA,刷新cookies,刷新sessionID(通過不停的登錄登出換cookie,定時結(jié)束webdriver再重啟來刷新sessionID)
通過Xpath 來獲取頁面的數(shù)據(jù)(lxml)
想要的結(jié)果(未實現(xiàn))他的socket數(shù)據(jù)是這樣傳給瀏覽器的,我就是想用python搞個socket client接進這個socket,然后等服務器推給我數(shù)據(jù).
總的來說,爬一個時間點的數(shù)據(jù)并不困難,但是對于長連接的持續(xù)爬蟲,持續(xù)監(jiān)控,響應式監(jiān)控我在網(wǎng)上找不到好的辦法,如果是設置定時任務去爬蟲,則當采樣周期過小的時候(小于1秒),則運算等成本過高且容易被封掉,有沒有什么好的辦法呢
問題解答
回答1:HTTP是無狀態(tài)的,所以你的登陸以后狀態(tài)是通過傳給服務器一個或多個特殊值(一般在報文頭的cookie字段里)來確定的。抓一下HTTP包,然后模擬時帶上這些特殊值就OK了。
更新內(nèi)容:看到它Status Code了,這應該是將連接換成websocket了,那么這個頁面一定是對方來提供的了。你可以看一下頁面的源碼,應該會有var ws = new WebSocket('ws://ip:3000'); 之類的內(nèi)容。看一下對方客戶端的要求,然后改寫ws.onmessage回調(diào)函數(shù),這個函數(shù)的話內(nèi)容就任你拿捏了,你可以用它來判斷返回了新內(nèi)容或者再去請求另一個服務器來處理這些新內(nèi)容。你可以看一下這篇文章 網(wǎng)頁實時聊天之PHP實現(xiàn)websocket 的客戶端部分,試著修改來實現(xiàn)你的需求。
回答2:找個websockt客戶端庫連就好了啊
相關(guān)文章:
1. linux - 將java項目部署在vbox的centos系統(tǒng)上,無法實現(xiàn)外網(wǎng)訪問到java項目2. node.js - nodejs+express+vue3. javascript - node得到req不能得到boolean4. 數(shù)據(jù)庫 - Mysql的存儲過程真的是個坑!求助下面的存儲過程哪里錯啦,實在是找不到哪里的問題了。5. mysql時間格式問題6. javascript - 我的站點貌似被別人克隆了, google 搜索特定文章,除了域名不一樣,其他的都一樣,如何解決?7. python對8000行csv添加列8. DADB.class.php文件的代碼怎么寫9. java - web端百度網(wǎng)盤的一個操作為什么要分兩次請求服務器, 有什么好處嗎10. python 字符串匹配問題

網(wǎng)公網(wǎng)安備