python 笔记(3)——request

news2024/9/23 23:32:07

目录

1、使用requests发送http请求

1-1)发送get请求

1-2)发送 post 请求

1-3)发送 get 请求下载网络图片

1-4)使用 post 上传文件

1-5)自动维护 session 的方式

2、使用 os.popen 执行cmd命令

3、基于 beautifulSoup 的爬虫

3-1)初始化解析器

3-2)查找页面元素

3-2-1)find、findAll

3-2-2)使用css选择器来进行查找

4、socket 通信

5、多线程

多线程改进 socket ,一对多通信:


1、使用requests发送http请求

> pip install requests                        安装该模块

import requests

1-1)发送get请求

params = {}
headers = {}
resq = requests.get('https://www.baidu.com', params=params, headers=headers)
resq.encoding = 'utf-8'
# print(resq.text)              # 返回的数据 html内容
print(resq.headers)             # 响应头
# print(resq.content)             # 返回响应的内容
# print(resq.status_code)         # 返回状态码 200

1-2)发送 post 请求

data = {'name':'张三','age':23,'gender':'男'}
headers = {}
req = requests.post('http://www.test.cn', data=data,headers=headers)
print(req.text)
print(req.headers)

 

1-3)发送 get 请求下载网络图片

resq = requests.get('https://p.qqan.com/up/2018-5/2018050911304322378.jpg')
with open('./img_download2.png','wb') as f:
    f.write(resq.content)           # resq.content 得到的是二进制流;resq.text 得到的是文本型的响应

1-4)使用 post 上传文件

# 文件上传  先登录,再上传
cookie = resq.cookies             # 获取等录后的cookie
file = {'file':open('G:/test_img.xls', 'rb')}
data = {'name':'testFile'}
res = requests.post(url='http://target.cn', data=data, files=file, cookies=cookie)
print(res.status_code)
print(res.text)

1-5)自动维护 session 的方式

        利用 requests.session() 获取到 session 对象,使用 session 对象发送请求,可以维护cookies 和 session,不必自己操作。

session = requests.session()
data = {'user':'admin', password:'123112233'}
req = session.post('http://denglu.cn',data=data)    # 登录

file = {'file':open('G:/test_img.xls', 'rb')}
data = {'name':'testFile'}
res = session.post(url='http://target.cn',data=data,files=file)    # 上传文件
print(res.status_code)
print(res.text)

2、使用 os.popen 执行cmd命令

import os

ipconfig = os.popen('ipconfig').read()      # 使用popen不会直接输出,把执行结果赋值给变量
print(ipconfig)

 

# os.popen('notepad.exe')         # 打开记事本
os.popen('explorer.exe E:\\')       # 打开资源管理器并定位到 E 盘目录下

 

3、基于 beautifulSoup 的爬虫

> pip install bs4

> pip install lxml                                安装解析器lxml

解析器可以使用:html.parser、lxml、xml、html5lib 

from bs4 import BeautifulSoup
import requests

# 淘宝
res = requests.get('https://www.taobao.com/')
res.encoding = 'utf8'

3-1)初始化解析器

# html是 bs4.BeautifulSoup 实例,是经过解析的 HTML 代码
html = BeautifulSoup(res.text, 'lxml')

3-2)查找页面元素

print(html.head.title)          # <title>淘宝</title>
print(html.head.title.string)   # 淘宝
print(html.div)         # 获取到的是文档中的第一个div元素及其所有子元素
print(html.div.div)     # 获取到文档中的第一个div元素下的第一个div子元素

查找页面元素的通用方法:find、findAll、select
1、find、findAll 根据标签、属性等进行查找(find 是查找第一个匹配的;findAll是查找所有,会以列表的形式返回)
2、select 利用css选择器来进行查找:div  #id  .class

3-2-1)find、findAll

使用标签名来查找

links = html.findAll('a')     # 使用标签名来查找所有的链接
for link in links:
    print(link['href'])

使用类名 class 来查找

# 使用类名来进行查找 注意是 class_
hots = html.find(class_='search-hots-fline')
print(hots)

使用 id 来查找

'''
查找第一个 id=’J_Search‘ 的标签,再逐层往下找
'''
j_search = html.find(id='J_Search')         # 使用id查找
res= j_search.findAll('input')         # 使用标签名查找
print(res)                  # 返回的是包含若干 input 元素的列表
print(res[0])

指定内容 innerText 来查找

# 通过 innerText 进行查找
content = html.find(string='新款连衣裙')
print(content)      # 如果查找到,则返回的是:新款连衣裙
print(content.parent)   # 以 新款连衣裙 为innerText 的标签

指定标签名和属性值来进行查找

 # 返回第一个符合的form表单,data-sg-type属性的值为form
form = html.find('form',{'data-sg-type':'form'}) 
print(form)

 

3-2-2)使用css选择器来进行查找
'''
使用css选择器来查找
'''
# 返回 .search-hots-lines 下 .search-hots-fline 标签的全部内容
flines = html.select('.search-hots-lines .search-hots-fline')
print(flines)           # 是列表
print(len(flines))



lis = html.select('.search-hots-lines div a')      # div > div > a
print(lis)                      # 所有符合条件的 a 标签
print(lis[0].string)            # 新款连衣裙

4、socket 通信

服务端:

import socket

s = socket.socket()

# 绑定任何源都可以连接,开放 5544 端口用于该 socket 通信
s.bind(('0.0.0.0', 6660))

# 开始监听
s.listen()

# 只能接受一个客户端的连接,返回的第一个数据代表通信通道,可以回复信息;第二个数据是用户的信息(对方ip地址和端口号)
chanel, client = s.accept()

while True:
    # chanel, client = s.accept()           # 如果在这里接收,则客户端只能发送一次消息,然后循环回到accept时,accept会阻塞当前的连接,等待新的连接
    print('连接方信息:',client, end=' ;')                  # 打印用户ip和端口号
    receive = chanel.recv(1024).decode()        # 解码用户发生过来的信息,最大接收1024字节
    print(f'接受到消息:{receive}')               # 打印用户发过来的信息
    reply = receive.replace('吗','!')
    chanel.send(reply.encode())             # 返回信息

客户端

import socket

s = socket.socket()

s.connect(('192.168.1.11', 6660))       # 目标ip地址,目标端口号

while True:
    msg = input()                       # 在控制台中输入哟啊发送的内容
    s.send(msg.encode())                # 发送
    receive = s.recv(1024)             # 接收返回的信息,10240是接受的最大数据量(字节
    print(f'对方回复:{receive.decode()}')

5、多线程

import random,threading,time

def test(num):
    time.sleep(random.choice([0.1, 0.3, 0.6, 1]))
    print(f'当前线程为:{threading.currentThread().getName()},{num ** 2}')

if __name__ == '__main__':
    print(f'当前执行的线程为:{threading.currentThread().getName()}')
    for i in range(9):
        # 创建一个线程,该线程需要执行的函数是 test,传递的参数为 i
        thread = threading.Thread(target=test, args=(i + 1,))
        thread.start()              # 开始执行该线程

多线程改进 socket ,一对多通信:

服务端:

import threading,socket

s = socket.socket()
s.bind(('0.0.0.0',6660))
s.listen()

def socket_server():
    chanel, client = s.accept()
    while True:
        req = chanel.recv(1024).decode()
        if req == '':
            print(f'{client} 断开了连接')
            break
        print(f'接收到连接:{client};收到消息:{req}')
        str = req.replace('?','.')
        chanel.send(str.encode())
    socket_server()

for i in range(2):
    thread = threading.Thread(target=socket_server)
    thread.start()

几个客户端复用下面的代码:

import socket

s = socket.socket()

s.connect(('192.168.1.2',6660))

while True:
    msg = input()
    s.send(msg.encode())
    res = s.recv(1024).decode()
    print(f'收到对方回复:{res}.')

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/958641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git学习——细节补充

Git学习——细节补充 1. git diff2. git log3. git reset4. git reflog5. 提交撤销5.1 当你改乱了工作区某个文件的内容&#xff0c;想直接丢弃工作区的修改时5.2 当提交到了stage区后&#xff0c;想要退回 6. git remote7. git pull origin master --no-rebase8. 分支管理9. g…

【100天精通python】Day46:python网络编程_网络编程基础与入门

目录 专栏导读 1 网络编程的基础 2. 基本概念和协议 2.1 计算机网络基础 2.2 网络协议、IP地址、端口号 2.3 常见网络协议 3. 套接字编程 3.1 套接字的基本概念 3.2 套接字的基本操作 3.3 套接字通信模型和方法&#xff1a;send、recv 3.3.1 TCP通信模型 3.3.2 U…

linux-samba-window登不上

登不上查了很久发现是防火墙导致的 sudo firewall-cmd --list-all //查看所有的防火墙信息sudo firewall-cmd --permanent --zonepublic --add-servicesamba //service里添加sambafirewall-cmd --reload //重启 便可以登录了,小问题

VirtualBox7+Ubuntu22集群规划

1. 目的: 新入手了一台小主机&#xff08;8核 / Intel(R) Xeon(R) W-10885M CPU 2.40GHz 2.40 GHz, 16vCpu / 64G RAM / 系统类型 64 位操作系统, 基于 x64 的处理器&#xff09;&#xff0c;原装了一套Win11专业版&#xff0c;打算用VirtualBox 虚拟一个集群。 2. …

电脑可以上网,微信都可以用,但浏览器打不开网页

可以试试设置DNS&#xff08;其他windows版本步骤&#xff09;&#xff1a; 1.打开控制面板 2.网络和Internet 3.查看网络计算机和设备 4.按照下图步骤&#xff1a; 5.按下图进行

深度学习论文分享(九)Unifying Motion Deblurring and Frame Interpolation with Events

深度学习论文分享&#xff08;九&#xff09;Unifying Motion Deblurring and Frame Interpolation with Events 前言Abstract1. Introduction2. Related Work2.1. Frame Interpolation2.2. Motion Deblurring2.3. Joint Deblurring and Interpolation 3. Problem Statement4. …

BL122:钡铼技术驱动,实现无缝Modbus到Profinet转换

钡铼技术BL122协议转换网关是一款专业的设备&#xff0c;用于将Modbus协议转换为Profinet协议。BL122采用了先进的嵌入式ARM MCU和基于Linux OS系统的开发&#xff0c;具备出色的性能和高度的稳定性。 BL122支持多种下行采集方式&#xff0c;包括Modbus RTU、Modbus TCP和Modbu…

Playwright for Python:安装及初步使用

文章目录 一、Playwright介绍1.1 简单介绍1.2 支持的平台1.3 支持语言1.4 官方文档&#xff08;python&#xff09; 二、开始2.1 安装要求2.2 安装2.3 脚本录制2.4 代码示例 一、Playwright介绍 1.1 简单介绍 Playwright是微软推出来的一款自动化测试工具&#xff0c;是专门为…

机器视觉工程师,没有错误

记住&#xff0c;在生活中&#xff0c;自己要会享受。在工作&#xff0c;做到一丝不苟。在技术上&#xff0c;追求精益。 人生不是那么一帆风顺&#xff0c;更不是坎坎坷坷&#xff0c;希望你们是曲折上升的&#xff0c;虽不能大富大贵&#xff0c;只要自己努力完全可以小康。…

华为OD机试 - 符合要求的元组的个数 - 回溯(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 一、题目描述 给定一个整数数组nums、一个数字k&#xff0c;一个整数目标值target&#xff0c;请问nums中…

pdf加密如何解除?这样解除加密很简单

pdf加密如何解除&#xff1f;有时&#xff0c;我们可能会收到一些加密的PDF文件&#xff0c;它们不允许我们对其进行编辑或打印。这时&#xff0c;我们需要使用PDF解密工具&#xff0c;以便能够轻松地解除PDF加密并对其进行编辑。那么接下来就给大家介绍一下pdf加密解除的方法。…

Vue基础2:传值方法

Description 传值就是为了联动&#xff0c;能够及时准确传值获取值才是王道。 Valuation Methods props和$emit props是父传子&#xff0c;$emit是子传父。 props的使用 父组件传出值 <tableList ref"table" :options"options" :header-data"C…

GE MRP680489 IS200VTCCH1CBB印刷电路板

信号处理&#xff1a; 这个印刷电路板通常用于信号处理和数据传输&#xff0c;可以与其他设备或模块进行通信&#xff0c;如传感器、执行器或控制器。 通信接口&#xff1a; IS200VTCCH1CBB 可能具有多种通信接口&#xff0c;用于与其他设备和系统进行数据交换&#xff0c;包括…

通过「内网穿透」技术,实现出差期间远程访问企业局域网中的象过河ERP系统

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 概述 ERP系统对于企业来说重要性不言而喻&#xff0c;不管是财务、生产、销售还是采购&#xff0c;都需要用到ERP系统来协助。…

8月31日-9月 第六章 案例:MySQL主从复制与读写分离(面试重点,必记)

本章结构 案例概述 案例前置知识点 详细图示 1、什么是读写分离&#xff1f; 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作&#xff08;INSERT、UPDATE、DELETE&#xff09;&#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导…

基于Python的IOS自动化测试环境搭建

文章目录 一、测试架构介绍1.1 WebDriverAgent原理分析1.2 tidevice原理分析二、环境安装2.1 iOS 设备安装 WebDriverAgent2.2 安装iTunes2.3 安装tidevice2.4 安装facebook-wda自动化三、操作流程一、测试架构介绍 以下为测试架构原理图 手机端的WDA Runner(WebDriverAgent…

如何通过网络远程访问电脑?

怎么远程访问公司电脑&#xff1f; “你好&#xff0c;我想通过网络从外面远程访问公司的电脑&#xff0c;这可能吗&#xff1f;您知道如何通过网络远程访问另一台电脑吗&#xff1f;” 借助远程访问工具&#xff0c;我们是可以通过网络远程访问公司电脑的。通过…

静电离子风棒的联网智能实时监控的操作步骤

静电离子风棒的联网智能实时监控可以通过以下步骤进行&#xff1a; 1. 获取数据&#xff1a;将静电离子风棒上的传感器与网络连接&#xff0c;以获取实时数据。传感器可能包括温度传感器、湿度传感器、电流传感器等&#xff0c;用于监测离子风棒的工作状态和环境信息。 2. 数…

Elasticsearch:自动使用服务器时间设置日期字段并更新时区

在大多数情况下&#xff0c;你的数据包含一个以 create_date 命名的字段。 即使没有日期字段&#xff0c;处理各种格式和时区的日期对数据仓库来说也是一个重大挑战。 与此类似&#xff0c;如果要检测变化的数据&#xff0c;则必须准确设置日期字段。 在 Elasticsearch 中还有…

蓝牙运动耳机哪个牌子好、好用的运动蓝牙耳机推荐

作为一个热爱运动的人&#xff0c;我对耳机非常关注。我相信许多喜欢运动的人在锻炼时都会佩戴耳机&#xff0c;这样可以为运动增添一份乐趣&#xff0c;享受自己喜爱的音乐或聆听有趣的小说&#xff0c;激发内心的动力。但很多人都不知道要怎么选一款优质的运动耳机&#xff0…