Python3进阶-6-网络请求 request、requests

avatar 2024年03月18日19:50:07 0 144 views
博主分享免费Java教学视频,B站账号:Java刘哥

本文介绍 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

 

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0