尝试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
要按照这个来转换.
比如我的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写一遍试试
实在是提不起兴趣.大概的看了下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
Format | C Type | Python type | Standard size | Notes |
---|---|---|---|---|
x | pad byte | no value | ||
c | char | string of length 1 | 1 | |
b | signed char | integer | 1 | (3) |
B | unsigned char | integer | 1 | (3) |
? | _Bool | bool | 1 | (1) |
h | short | integer | 2 | (3) |
H | unsigned short | integer | 2 | (3) |
i | int | integer | 4 | (3) |
I | unsigned int | integer | 4 | (3) |
l | long | integer | 4 | (3) |
L | unsigned long | integer | 4 | (3) |
q | long long | integer | 8 | (2), (3) |
Q | unsigned long long | integer | 8 | (2), (3) |
f | float | float | 4 | (4) |
d | double | float | 8 | (4) |
s | char[] | string | ||
p | char[] | string | ||
P | void * | 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抓取熊猫TV弹幕
- 用python抓取斗鱼网的弹幕
- 尝试使用Python多线程抓取代理服务器IP地址的示例
- 【尝试】python BeautifulSoup特定内容的抓取
- python抓取初步尝试
- 尝试使用Python多线程抓取代理服务器IP地址的示例
- python 自动提交和抓取网页
- 尝试解释Python中的yield
- Python库详解之网络(1)--抓取网页
- 用Python尝试RabbitMQ
- Python网页抓取、模拟登录
- python实践 - 抓取网页中的图片和数据
- 用python进行分布式网页数据抓取(一)——设计
- 程序 python 抓取新浪读书频道小说
- 05-访问超时设置 | 01.数据抓取 | Python
- 10-穿墙代理的设置 | 01.数据抓取 | Python
- 用Python实现页面内容抓取
- 使用Python多线程抓取并验证代理
- 使用python写的如何自动提交和抓取网页
- Python3.0 如何抓取网页