本文介绍 Socket和HTTP请求
完整代码:https://github.com/saysky/python_demo
一、Socket
新建 server.py
import socket
server = socket.socket() # 1. 新建socket
server.bind(('127.0.0.1', 8881)) # 2. 绑定IP和端口
server.listen(5) # 3. 监听连接
s, addr = server.accept() # 4. 接受连接
print('来自:{},说了'.format(addr))
content = s.recv(1024)
print(str(content, encoding='utf-8')) # 接受来自客户端的消息,并编码打印出来
s.close()
新建 client.py
import socket
client = socket.socket() # 1. 新建socket
client.connect(('127.0.0.1', 8881)) # 2. 连接服务端
str = input('请输入一句话:')
client.send(bytes(str, encoding='utf-8')) # 发送内容
client.close()
先运行 server.py,再运行 client.py
二、官方库 urllib下的request
无法获取响应内容
from urllib import request
response = request.urlopen('https://liuyanzhao.com')
print(response.url) # URL
print(response.status) # 状态码
for k, v in response.getheaders(): # 响应头key-value
print('{}: {}'.format(k, v))
三、第三方库 requests
可以获取响应内容,举例获取本站首页的里的URL,类似爬虫
# Enter a code
import requests
# 如果报错urllib3 v2.0 only supports OpenSSL 1.1.1+,可以修改urllib3由2.0改成1.26版本
# pycharm设置里,Preferences | Project: 项目名 | Python Interpreter 里 点加号,搜索urllib3,安装1.26.15
response = requests.get('https://liuyanzhao.com')
print(response, response.status_code)
print(response.headers)
content = str(response.content, 'utf-8') # 页面内容
# print(content)
# 正则表达式,获得href里的链接
import re
def get_href_contents(html):
# 正则表达式匹配href属性
href_pattern = re.compile(r'href="(.*?)"')
# 使用findall方法获取所有匹配项
href_contents = href_pattern.findall(html)
return href_contents
content_list = content.split('\n') # 分行
len(content_list) # 打印页面内容的行数
for line in content_list:
if 'href' in line: # 包含href的行
list = get_href_contents(line.strip())
for item in list:
print(item)
备注:
如果报错urllib3 v2.0 only supports OpenSSL 1.1.1+,可以修改urllib3由2.0改成1.26版本
可以在pycharm设置里,Preferences | Project: 项目名 | Python Interpreter 里 点加号,搜索urllib3,安装1.26.15
完整代码:https://github.com/saysky/python_demo
test12-14
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏