您的位置:首页 > 理论基础 > 计算机网络

尝试Python-抓取弹幕和HTTP POST

2016-09-07 09:34 169 查看
今天翻了翻ORACLE数据库的书

实在是提不起兴趣.大概的看了下PL/SQL 触发器函数储存过程就赶紧丢一边了

想着找点什么书看.结果翻了半天.还是想着去学下新技术好了

Python.这个语言火的不要不要的.全栈工程师就应该从这里出来.然后哪也别去...

我今晚找了2篇博客.快速入门了一下Python,Python开发可真快卧槽...

然后拿点东西练练手吧.写个HTTP访问和抓斗鱼弹幕吧

正好刚拿C++写完.这次试试Python

额...这就是噩梦的开始...

HTTP很好写.一会就写完了.

import urllib2
import urllib

url="http://127.0.0.1:8080/BBS/login!Game_test.action"
request=urllib2.Request(url)
data=urllib2.urlopen(request)
print data.read()

value={"username":"OCKDIESO","password":"1"}
data=urllib.urlencode(value)
url="http://127.0.0.1:8080/BBS/login!Game_login.action"
request=urllib2.Request(url,data)
data=urllib2.urlopen(request)
print data.read()最简化到GET提交只需要一句代码就可以搞定.怪不得Python这么火.
嗯..然后再写个Socket的吧.刚拿C++写完.应该不难写

然后我发现...我错了.Python写这东西比C++...也不能说难....

毕竟代码量摆在那...问题是...斗鱼这个协议头.需要结构体...

然后Python又不区分int char...

这就难办了...上代码吧

先是连接

import socket
import struct

host="123.150.206.162"
port=8601
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))就这么几句就完了,真方便
然后就是地狱级了

看代码吧...magic = 689//消息类型
temp = 0//占位
content = 'type@=loginreq/roomid@=4809/\0'//内容
len_=4+2+1+1+len(content)//消息长度
a=struct.pack('iihbb29s',len_,len_,magic,temp,temp,content)//打包
print repr(a)
s.sendall(a)//提交
data=s.recv(4000)
print data用C/C++有结构体给你用
Python毛来的结构体啊!我只好手动转换...

最坑爹的是内容.一定要用\0结尾.卧槽我就因为这个\0.在那瞎调了一个小时还不知道怎么回事呢

struct.pack
FormatC TypePython typeStandard sizeNotes
xpad byteno value
ccharstring of length 11
bsigned charinteger1(3)
Bunsigned charinteger1(3)
?_Boolbool1(1)
hshortinteger2(3)
Hunsigned shortinteger2(3)
iintinteger4(3)
Iunsigned intinteger4(3)
llonginteger4(3)
Lunsigned longinteger4(3)
qlong longinteger8(2), (3)
Qunsigned long longinteger8(2), (3)
ffloatfloat4(4)
ddoublefloat8(4)
schar[]string
pchar[]string
Pvoid *integer(5), (3)
要按照这个来转换.
比如我的iihbb29s',len_,len_,magic,temp,temp,content
len消息长度 4个字节 对应i

消息类型 2个字节 对应h

无用字段 1个字节 对应b(之前用的c....不行....)

然后是内容.需要手动算一下长度....而且是算上\0的.不然接受不到数据

content = 'type@=joingroup/rid@=4809/gid@=-9999/\0'
len_=4+2+1+1+len(content)

a=struct.pack('iihbb38s',len_,len_,magic,temp,temp,content)
print repr(a)
s.sendall(a)

i=0
while i<1:
data = s.recv(4000)
print data;然后是加入弹幕组
最后老样子.循环.接受

这个Python写起来的难度...特别是pack...感觉已经直逼C++了...

不过回过头来的看的时候.发现,Python的确简单哈?

C++洋洋洒洒的写了一堆.Python几行代码就搞定了




最后上一张战利图


改天有时间再用JAVA写一遍试试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python