这次爬取斗鱼弹幕,想的之后在对海量弹幕进行数据分析,作图做表。
首先想的是打开斗鱼直播间,想从F12中看是否能找到相应的api,但是发现没有一个api是返回弹幕数据的,再检查HTML,发现弹幕数据是在li标签里一个一个动态加载上去的,但是找不到相应的js代码。后来百度之后才知道是flash的socket来获取数据的,遂跳入socket坑。看了斗鱼的协议文档,仿着代码敲出来却发现返回一对byte(unicode)数据,还要进行转换。但是数据回复码是错误的,后来改正后又发现没有数据返回,初步原因认为是没有加入传输心跳数据导致的,或者是数据阻塞。需要添加多进程
一、socket(客户端开发)
1、TCP链接
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
2、链接
socket.connection(address) address是元组(host,port)
3、获取数据
socket.recv(bufsize[,flag])
4、传输数据
socket.send(string[,flag])
socket.sendall(string[,flag])
二、byte unicode utf-8 等编码
1、Python 3的bytes/str之别
文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。
2.int.from_bytes和int.to_bytes函数介绍
int.from_bytes 将bytes转化为int
int.to_bytes将int转化为bytes
三、多线程
使用threading库
t1 = threading.Thread(target = xx,args = (xx,xx))
t1.start()
四、IP代理
在一次手贱的操作中,IP被斗鱼服务器限制了一次连接只能收到一个消息,所以着手进行IP代理操作。
网友评论