Python爬虫--网络编程

Posted 来一块小饼干

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫--网络编程相关的知识,希望对你有一定的参考价值。

Python 网络编程

Python提供两个基本的Socket模块:

  • Socket,提供了标准的BSD Sockets API
  • SocketServer, 提供了服务器中心类,可以简化网络服务器的开发

1、Socket类型
套接字格式为: socket(family, type[,protocall]),使用给定的地址族、套接字类型、协议类型(默认为0)创建套接字。

2、Socket函数

TCP编程

服务端
  1. 创建Socket,绑定Socket到本地IP和端口
  2. 开始监听连接
  3. 进入循环,不断接收客户端的连接请求
  4. 接收传来的数据,并发送给对方数据、
  5. 传输完毕后,关闭Socket
# coding=utf8
"""
1. 创建Socket,绑定Socket到本地IP和端口
2. 开始监听连接
3. 进入循环,不断接收客户端的连接请求
4. 接收传来的数据,并发送给对方数据
5. 传输完毕后,关闭Socket
"""
import socket
import threading
import time


def dealClient(sock, addr):
    # 4. 接收传来的数据,并发送给对方数据
    print \'Accept new connection from %s:%s...\' % addr
    sock.send(b\'Hello, I am server!\')
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode(\'utf-8\') == \'exit\':
            break
        print \'-->>%s!\' % data.decode(\'utf-8\')
        sock.send(\'Loop_Msg: %s!\' % data.decode(\'utf-8\').encode(\'utf-8\'))
    # 5. 传输完毕后,关闭Socket
    sock.close()
    print \'Connection from %s:%s closed.\' % addr

if __name__ == \'__main__\':
    # 1. 创建Socket,绑定Socket到本地IP和端口
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((\'127.0.0.1\',9999))
    # 2. 开始监听连接
    s.listen(5) # listen(n)传入的值, n表示的是服务器拒绝(超过限制数量的)连接之前,操作系统可以挂起的最大连接数量。n也可以看作是"排队的数量"
    print \'Waiting for connection...\'
    # 3. 进入循环,不断接收客户端的连接请求
    while True:
        sock, addr = s.accept()
        t = threading.Thread(target=dealClient, args=(sock, addr))
        t.start()
客户端
  1. 创建Socket,连接远端地址
  2. 连接后发送数据和接收数据
  3. 传输完毕后,关闭Socket
# coding=utf8
"""
1. 创建Socket,连接远端地址
2. 连接后发送数据和接收数据
3. 传输完毕后,关闭Socket
"""
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((\'127.0.0.1\', 9999))
print \'-->>\'+s.recv(1024).decode(\'utf-8\')
s.send(b\'Hello I am a client\')
print \'-->>\'+s.recv(1024).decode(\'utf-8\')
s.send(b\'exit\')
s.close()

UDP 编程

服务端
  1. 创建Socket,绑定指定的IP和端口
  2. 直接发送数据和接收数据
  3. 关闭Socket
# coding=utf8
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((\'127.0.0.1\',9999))
print \'Bind UDP on 9999...\'
while True:
    data, addr = s.recvfrom(1024)
    print \'Received from %s:%s\' % addr
    s.sendto(b\'Hello, %s!\' % data, addr)
客户端

与TCP不同,UDP客户端不需要建立连接,创建Socket后可以直接后服务端进行数据交换

# coding=utf8
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for data in [b\'Hello\',b\'World\']:
    s.sendto(data,(\'127.0.0.1\',9999))
    print s.recv(1024).decode(\'utf-8\')
s.close()

以上是关于Python爬虫--网络编程的主要内容,如果未能解决你的问题,请参考以下文章

python网络爬虫

学习《从零开始学Python网络爬虫》PDF+源代码+《精通Scrapy网络爬虫》PDF

Python网络爬虫学习手记——爬虫基础

python网络爬虫入门

Python爬虫是啥?

手把手教你利用爬虫爬网页(Python代码)