网络编程
目的
实现不同程序或不同计算机之间的通信
实现
'''套接字Socket
服务端:新建scoket,绑定IP和端口,监听连接,接受连接
客户端:新建sokcet,连接服务器
socket(): 建立socket
bind(): 绑定IP和端口
listen(): 监听连接,参数为最大挂起数量
accept(): 接受连接
send(): 发送数据,参数为字节数据
recv(): 接收数据,参数为一次所接收的最大数据量
'''
# server
import socket
server = socket.socket()
server.bind(('127.0.0.1', 8999))
server.listen(5)
s, addr = server.accept()
print('connect addr: {}',format(addr))
while True:
content = s.recv(1024)
if len(content) == 0:
break
s.send(content)
print(str(content, encoding='utf-8'))
s.close()
# client
import socket
client = socket.socket()
client.connect(('127.0.0.1', 8999))
while True:
content = input('>>> ')
if content == 'quit':
break
client.send(bytes(content, 'utf-8'))
content = client.recv(1024)
print(str(content, encoding='utf-8'))
client.close()
'''HTTP服务器
Python提供了简易的HTTP服务器,可以指定运行端口(默认端口8000)和运行目录
python -m http.server [port] [-d directory]
'''
'''发送HTTP请求
通过urllib的request,可以向其他HTTP服务器发起请求
'''
from urllib import request
response = request.urlopen('https://www.baidu.com')
print(response) # ==> <http.client.HTTPResponse object at 0x000002E0A6818F70>
print(response.status) # ==> 200
for k, v in response.getheaders():
print('{}: {}'.format(k, v))
'''requests库
requests库可以定制化地处理HTTP请求,由于是第三方库需先进行安装
'''
import requests
response = requests.get('https://baidu.com')
print(response.status_code)
print(response.headers)
'''HTTP响应的内容
HTTPResponse拥有状态码、回应头、内容主体等信息
网页的内容则主要是页面,通过一些简单的方法可以过滤得到自己想要的信息
'''
response = requests.get('https://baidu.com')
content = str(response.content, encoding='utf-8')
content_list = content.split('\n')
for line in content_list:
if 'href' in line and 'www' in line:
print(line.strip())