Python爬虫:Python+WebSocket获取体育实时赛事数据
苦于websocket的能跑的案例太少了,还没开始就要什么逆向,一来就是拦路虎,太折磨人了,无意间看了一个类似的文章并学习更新了,感谢大佬,对websocket有了一个新的认识。
python版本:
目标网站:http://m.611.com/
1、打开开发者工具(Ctrl+Shift+I)启用浏览器仿真器
2、触摸启用仿真
将鼠标移到设备上可查看圆形“触摸”光标。这将对基于触摸的 JavaScript 事件( 如touchstart,touchmove和touchend)做出反应。鼠标特定的事件和 CSS 效果不会 做出反应。
按住Shift键,然后单击并移动鼠标以模拟双指缩放操作。
通过观察数据一段时间会变~
没发现比分是怎么和球队怎么拼接而成,疑惑~
通过查看发现是基于websockt实时更新数据,接下来开始分析:
3、参数分析:
{“command”:“RegisterInfo”,“action”:“Web”,“ids”:[],“UserInfo”:{“Version”:“[1667099935000]{“webkit”:true,“version”:“605.1.15”,“safari”:true}”,“Url”:“http://m.611.com/”}}
{“command”:“JoinGroup”,“action”:“SoccerLive”,“ids”:[303794138,303747120,303794153,303748872,303747117,303749323,303755706,303747122,303755264,303794150,303794144,303747115]}
{“command”:“JoinGroup”,“action”:“BasketSoccerLive”,“ids”:[303683091,303683092,303674542,303674543,303674544,303674545,303674546,303683093,303683094,303683096,303683097,303683098]}
通过多次刷新页面/更换浏览器得出结论:
第一条内容是连接服务器用的,action、ids、Url都是不变的,只有UserInfo里面内容是变化的,其中Version中括号里面是一个时间戳+000,后面加浏览器参数,那么只需要更改时间戳就可以了,浏览器参数直接复制就行。
第二、三条内容是加入群组用的,参数都是固定的,不需要改。
4、分析完发送的内容,后面就容易了,只需要再得到url就可以尝试连接了,返回headers界面,发现url后面加了一段字符串参数,字符串每次刷新后都不同,应该是js加密生成的,找js文件逆向太麻烦,先看看前面的请求有没有这个参数;
直接复制f3fa2472b9db40f89bcf82c32e2357e6
ctrl+f搜索:
发现这样GET不就可以了,太喜欢这样了,对刚开始学爬虫的小白我才能学的起走……
pip install websocket-client
开始写代码:
import requests
def get_token():
# 获取token
token_url = 'http://m.611.com/Live/GetToken'
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Referer': 'http://m.611.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
return requests.get(token_url, headers