使用socket方法如何抓取网页 python 使用中文

Python抓取网站图片,Python socket C/S结构的聊天室应用 | Python |
_数据库_运维_开发_IT学习_无忧IT学习网
一起学习!一起进步!
Python抓取网站图片,Python socket C/S结构的聊天室应用
浏览: 158 views
使用python抓取网站图片
#!/usr/bin/env python
#coding:utf8
import re,urllib
url='/'
def getHtml():...
使用抓取网站图片
#!/usr/bin/env python
#coding:utf8
import re,urllib
url=&#39;http://blog.<//&#39;
def getHtml():
page = urllib.urlopen(url)
html = page.read()
return html
def getImg(html):
reg = r&#39;&img src=&(.*?\.\w{3,4})&&#39;
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
print imglist
for imgurl in imglist:
pic_suffix = imgurl.split(&#39;.&#39;)[-1]
if imgurl[0:4] == &#39;http&#39;:
print imgurl
urllib.urlretrieve(imgurl,&#39;%d.%s&#39; % (n,pic_suffix))
print url + imgurl
urllib.urlretrieve(url + imgurl,&#39;%d.%s&#39; % (n,pic_suffix))
U=getHtml()
&socket C/S结构的聊天室应用
#!/usr/bin/env python
#coding:utf8
import socket,select
def broadcast_data (sock,message):
for socket in conn_list:
if socket != server_socket and socket != sock :
socket.send(message)
socket.close()
conn_list.remove(socket)
if __name__ == &__main__&:
conn_list = []
recv_buffer = 4096
PORT = 9999
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #端口重用,可选
server_socket.bind((&#39;&#39;, PORT))
server_socket.listen(99)
conn_list.append(server_socket)
print &Chat server started on port & + str(PORT)
read_sockets,write_sockets,error_sockets = select.select(conn_list,[],[])
for sock in read_sockets:
if sock == server_socket:
sockfd, addr = server_socket.accept()
conn_list.append(sockfd)
print &Client (%s, %s) connected& % addr
broadcast_data(sockfd, &[%s:%s] entered room\n& % addr)
#进入聊天室
data = sock.recv(recv_buffer)
broadcast_data(sock, &\r& + &#39;&&#39; + str(sock.getpeername()) + &#39;& &#39; + data)
broadcast_data(sock, &Client (%s, %s) is offline& % addr)
print &Client (%s, %s) is offline& % addr
sock.close()
conn_list.remove(sock)
server_socket.close()
#!/usr/bin/env python
#coding:utf8
import socket,select,string,sys
def prompt() :
sys.stdout.write(&#39;&You& &#39;)
sys.stdout.flush()
if __name__ == &__main__&:
if(len(sys.argv) & 3) :
print &#39;Usage : python chat_client.py hostname port&#39;
sys.exit()
HOST = sys.argv[1]
PORT = int(sys.argv[2])
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2)
s.connect((HOST, PORT))
print &#39;Unable to connect&#39;
sys.exit()
print &#39;Connected to remote host. Start sending messages&#39;
socket_list = [sys.stdin, s]
read_sockets, write_sockets, error_sockets = select.select(socket_list , [], [])
for sock in read_sockets:
if sock == s:
data = sock.recv(4096)
if not data :
print &#39;\nDisconnected from chat server&#39;
sys.exit()
sys.stdout.write(data)
msg = sys.stdin.readline()
s.send(msg)
& | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | &
最热门文章
36333 views
9887 views
8766 views
4958 views
4632 views
3918 views
3721 views
3136 views
友情链接 |
本站进行135次查询使用Chrome或Fiddler抓取WebSocket包
引用地址:
注意: 该地址仅在今日23:59:59之前有效
背景:以为微信用的是websocket,试一下想抓包看下。现在做网页游戏开发的同学,肯定会使用到WebSocket来通讯,毕竟相对于长轮询和iFrame等方式,WebSocket给我们开了一扇大门,更简单快捷。首先,HTTP是建立在TCP协议基础上的,而WebSocket通常也是建立在TCP上,所以说为什么有些网页游戏抓不到包而有些又可以,这仅是因为你使用的抓包工具是针对了HTTP的通信协议。我先从抽象的层面,举一个可能不太恰当的例子,只为了让不明白HTTP和WebSocket两者之间抓包有何区别的同学大概了解这两个协议的异同。客户端/服务端用C/S简称,我把数据抽象成水流,而HTTP是用水枪传递水流的(无状态),至于WEBSOCKET则是使用水管传递水流(实时)。HTTP通讯方式:客户端C把数据封装好了要交给服务端S,所以把水放到水枪里面,射过去给SS用桶把水挡下来了,然后分析水的成分(数据内容),完成后再把新的水(返回的数据)射回去给C这个过程中,任何人都可以随时在C和S之间用海绵吸一点水然后拿去分析(嗅探数据),或者是直接用桶把水都挡下来分析完后再装到水枪中,模仿C的动作射给S(也就是代理抓包)WEBSOCKET方式:客户端C和服务端S,双方之间先用一条水管连起来(用的是HTTP握手),然后水流都通过这个小水管来传输水管里面一直有水在流动,所以要通讯只需要C或者是S把数据水流放到水管中,则会立刻传输到对方那边这个过程中,要嗅探就比较麻烦了,需要先在水管中先打个洞,然后再把分析器放进去、或者是斩断这个水管在中间接个水表之类的设备去分析水质成分好了,乱说一通完毕,说一下抓取WebSocket的两个工具,都是常见的程序,只是可能很多同学不清楚有这样的功能而已。第一个:Chrome,也就是谷歌的浏览器进入你要抓包的网页,然后按F12打开我们最爱的开发者工具然后点Network,再从过滤器中找到WebSockets(上方或下方的状态栏)选中过滤出来的WebSocket,在弹出来的右边栏中可以找到Frames,里面就是抓到的包如果要看新通讯产生的数据包,则要先点其他的位置比如Headers再点Frames才可以刷新第二个:Fiddler,抓包调试的利器,已经人手一个了吧打开Fiddler,点开菜单栏的Rules,选择Customize Rules...这时会打开CustomRules.js文件,在class Handlers中加入以下代码static function OnWebSocketMessage(oMsg: WebSocketMessage) &#123;&&&&// Log Message to the LOG tab&&&&FiddlerApplication.Log.LogString(oMsg.ToString());&#125;保存后就可以在Fiddler右边栏的Log标签里,看到WebSocket的数据包到了这里,还有一个情况要说明,就算是有工具可以抓到WebSocket中的包,看到的也不一定是明文。这个要看传输的水是什么,如果是普通水那谁都可以分析;但如果是水银,那这个分析水的设备很可能就显示乱码了。 所以也就有同学明明使用了可以抓WebSocket包的程序,却抓出来的是乱码。那是因为别人传输的是二进制数据流(比如AMF包),而不是JSON之类的对人类可读的明文。参考资料:Debug Inspect WebSocket traffic with Fiddler 【荐】Logging WebSocket Frames using Chrome Developer Tools, Net-internals and Wireshark原始链接: http://blog.jtwo.me/post/use-chrome-or-fiddler-sniffer-websocket作者:@地址:版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
[9/9]北京市海淀区中关村理想国际大厦18层 Address:Sina 18th floor Ideal plaza Zhongguancun Haidain
Beijing 100080, P.R.China
[1/9]深圳南山腾讯大厦8楼 Address:Tencent Plaza High-tech One Road, Middle Zone, High-new Science & Technology Park, Nanshan Distrcit, Shenzhen City, Guangdong Province 518057, P.R. China
[2/9]深圳南山腾讯大厦旁大族激光大厦三楼 Address:Han's Building,Kejizhongyi Avenue, Hi-tech Pack,Nanshan District, Shenzhen City, Guangdong Province 518057, P.R.China
[2012/10-Now]北京海淀区西三环中路10号望海楼B座7层央视国际网络有限公司 Address:Seaview floor, Haidian District No.10,West Sanhuan Road,Beijing 100142, P.R.Chinapython socket编程入门(编写server实例)+send 与sendall的区别与使用方法 - 推酷
python socket编程入门(编写server实例)+send 与sendall的区别与使用方法
python 编写server的步骤:
1. 第一步是创建socket对象。调用socket构造函数。如:
socket = socket.socket( family, type )
family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。
type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。
2. 第二步是将socket绑定到指定地址。这是通过socket对象的bind方法来实现的:
socket.bind( address )
由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。
3. 第三步是使用socket套接字的listen方法接收连接请求。
socket.listen( backlog )
backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。
4. 第四步是服务器套接字通过socket的accept方法等待客户请求一个连接。
connection, address = socket.accept()
调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。
5. 第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接收信息。调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。
6. 传输结束,服务器调用socket的close方法关闭连接。
python编写client的步骤:
1. 创建一个socket以连接服务器:socket = socket.socket( family, type )
2.使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下:
socket.connect( (host,port) )
host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。如连接成功,客户就可通过套接字与服务器通信,如果连接失败,会引发socket.error异常。
3. 处理阶段,客户和服务器将通过send方法和recv方法通信。
4. 传输结束,客户通过调用socket的close方法关闭连接。
下面给个简单的例子:
from datetime import datetime
import socket
address = ('localhost', 6789)
max_size = 1000
print('Start server at {}'.format(datetime.now()))
print('Waiting for a client now !')
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socket.AF_INET表示创建一个IP套接字;socket.SOCK_STREAM 表示流式socket , for TCP
sock_DGRAM表示数据报式socket , for UDP
server.bind(address)
服务器必须用socket包中的两个方法来建立网络连接,
第一个是socket.socket,它会创建一个空的套接字;
第二个是bind会绑定(监听这个IP地址和端口的所有数据)到这个套接字上
server.listen(5)
表示最多可以和5个客户端连接,超过5个就会拒绝
client,addr = server.accept()
调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。
accept方法返回一个含有两个元素的 元组(connection,address)。
第一个元素connection是新的socket对象,服务器必须通过它与客户通信;
第二个元素 address是客户的Internet地址
data = client.recv(max_size)
指定最大可以接受消息长度为1000字节
print(&AT&,datetime.now(),client,&Said&,data)
client.sendall(b'Are you want to talk to me')
client.close()
server.close()
import socket
from datetime import datetime
address = ('localhost',6789)
max_size =1000
print(&Start the client at {}&.format(datetime.now()))
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(address)
client.sendall(b'Hey~~~')
data = client.recv(max_size)
print(&AT&,datetime.now(),&some reply& , data)
client.close()
在终端运行server.py,然后运行clien.py
----------------------------------------------------------------------------------------------------------------------------------------------------------------
在python socket编程中,有两个发送TCP的函数,send()与sendall(),区别如下:
socket.send(string[, flags])发送TCP数据,返回发送的字节大小。这个字节长度可能少于实际要发送的数据的长度。换句话说,这个函数执行一次,并不一定能发送完给定的数据,可能需要重复多次才能发送完成。
data = &something you want to send&
while True:
len = s.send(data[len:])
if not len:
socket.sendall(string[, flags])&看懂了上面那个,这个函数就容易明白了。发送完整的TCP数据,成功返回None,失败抛出异常
data = &something you want to send&
s.sendall(data)
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&推荐这篇日记的豆列
······

我要回帖

更多关于 python 使用中文 的文章

 

随机推荐