Python从0到POC编写--模块

2024-05-11 14:36
文章标签 python 模块 编写 poc

本文主要是介绍Python从0到POC编写--模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Requests模块:

requests是一个 HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到。

它可以提取 url 中的信息。

requests库的七个主要方法:

方法解释
requests.request()构造一个请求,支持以下各种方法
requests.get()获取html的主要方法
requests.head()获取html头部信息的主要方法
requests.post()向html网页提交post请求的方法
requests.put()向html网页提交put请求的方法
requests.patch()向html提交局部修改的请求
requests.delete()向html提交删除请求

1. requests.get()

这个我们最常见,也是用的最多的,

基本使用方法:


r = request.get(url,params,kwargs)  
#  这句代码是构造一个服务器请求request,返回一个包含服务器资源的response对象。

其中:

url: 需要爬取的网站地址。
params: 翻译过来就是参数, url中的额外参数,字典或者字节流格式,可选。
kwargs : 12个控制访问的参数


kwargs 有以下参数:

  1. params:字典或字节序列, 作为参数增加到url中,

使用这个参数可以把一些键值对以?key1=value1&key2=value2的模式增加到url中

例如:


>>> import requests  #  导入模块
>>> url = 'http://www.hello.com/index.php'  #  设置 url
>>> payload = {'key1': 'values', 'key2': 'values'}
>>> r = requests.get(url, params=payload) 
>>> print(r.url)
>>> # 输出 http://www.hello.com/index.php?key2=values&key1=values
>>> print(r.status_code)  # 输出 200 (状态码)

这里 r 是自定义的变量名,用来接收返回值 response

注: www.hello.com 是使用phpstudy搭建的虚拟网站


  1. data:字典,字节序或文件对象,重点作为向服务器提交资源,作为request的内容,

与params不同的是,data提交的数据并不放在url链接里,

而是放在url链接对应位置的地方作为数据来存储。,它也可以接受一个字符串对象。


  1. json:  json格式的数据, json合适在相关的html,http相关的web开发中非常常见,也是http最经常使用的数据格式,

他是作为内容部分可以向服务器提交。

例如:


url = 'http://www.hello.com/index.php'
payload = {'key1': 'value1'} 
r = requests.post(url, json=payload)
print(r.json)
>>> # 输出  bound method Response.json of <Response [200]>

  1. headers: 字典是http的相关语,对应了向某个url访问时所发起的http的头字段,

可以用这个字段来定义http的访问头,可以模拟任何浏览器来对url发起访问。

例如:


url = 'http://www.hello.com/index.php'
header = {'user-agent': 'Chrome/10'} 
r = requests.get(url, headers=header)
print(r.headers)

  1. cookies:字典或CookieJar,指的是从http中解析cookie

  1. auth:元组,用来支持http认证功能

  1. files:字典, 是用来向服务器传输文件时使用的字段。

例如:


url = 'http://www.hello.com/index.php'
file = {'files': open('data.txt', 'rb')} 
r = requests.post(url, files=file)
print(r.text)

  1. timeout: 用于设定超时时间, 单位为秒,当发起一个get请求时可以设置一个timeout时间,

如果在timeout时间内请求内容没有返回, 将产生一个timeout的异常。

  1. proxies:字典, 用来设置访问代理服务器。

  2. allow_redirects: 开关, 表示是否允许对url进行重定向, 默认为True。

  3. stream: 开关, 指是否对获取内容进行立即下载, 默认为True。

  4. verify:开关, 用于认证SSL证书, 默认为True。

  5. cert: 用于设置保存本地SSL证书路径


response对象属性:

属性说明
r.status_codehttp请求的返回状态,若为200则表示请求成功。
r.texthttp响应内容的字符串形式,即返回的页面内容
r.encoding从http header 中猜测的相应内容编码方式
r.apparent_encoding从内容中分析出的响应内容编码方式(备选编码方式)
r.contenthttp响应内容的二进制形式

2. requests.head()

head 获取html头部信息的方法 。

例如:


import requestsurl = "https://www.baidu.com"r = requests.get(url)print(r.headers)

3. requests.post()

发送post请求

POST 方法被用于请求源服务器接受请求中的实体作为请求资源的一个新的从属物

例如:


>>> payload = {"key1":"value1","key2":"value2"}
>>> r = requests.post("http://www.hello.com/index.php",data=payload)
>>> print(r.text)
{"args": {}, "data": "", "files": {}, "form": {"key1": "value1", "key2": "value2"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Content-Length": "23", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.4"}, "json": null, "origin": "192.168.1.2", "url": "http://www.hello.com/index.php"
}

向 url post 一个字符串,自动编码为 data


>>>r=requests.post("http://www.hello.com/index.php",data='hello world')
>>>print(r.text)
{"args": {}, "data": "hello world", "files": {}, "form": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Content-Length": "10", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.4"}, "json": null, "origin": "192.168.1.2", "url": "http://www.hello.com/index.php"
}

4. requests.put()

PUT 方法请求服务器去把请求里的实体存储在请求URI(Request-URI)标识下。

例如:


>>> payload={"key1":"value1","key2":"value2"}
>>> r=requests.put("http://www.hello.com/index.php",data=payload)
>>> print(r.text)
{"args": {}, "data": "", "files": {}, "form": {"key1": "value1", "key2": "value2"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Content-Length": "23", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.4"}, "json": null, "origin": "192.168.1.2", "url": "http://www.hello.com/index.php"

Requests模块例子

例:

判断状态码是不是 200


import requeststry:url = 'https://www.baidu.com'r = requests.get(url)if r.status_code == 200:print('hello')
except:print('error')

BeautifulSoup:

BeautifulSoup 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库

它通常跟一些第三方解析器一起使用,如 lxml,XML,html5lib 等

例:


import requests
from bs4 import BeautifulSoupurl = 'https://www.baidu.com'r = requests.get(url)r.encoding = 'utf-8'   #  设置编码soup = BeautifulSoup(r.text,'lxml')print(soup.prettify())

r.text 是获取文本内容的意思,lxml 是解析器的意思,注意必须使用引号。

prettify() 是对内容进行格式化处理,看起来没哪里乱。

BeautifulSoup 通常配合 requests 一起使用。


其他一些方法:

find_all() 是一种方法选择器,顾名思义,就是查询所有符合条件的元素

例如:

print(soup.find_all(name='ul'))  # 查询所有 ui 节点

还有一些其他啊,

例如:

print(soup.head)  # 获取head标签
print(soup.p.b)  # 获取p节点下的b节点
soup.p['class']  # 获取p节点class属性

等等一些方法,功能很强大。


urllib:

urllib 是一种 http请求的 Python 库

基本语法:

urllib.request.urlopen(url, data=None, timeout)

参数:

  1. url: 需要打开的网址
  2. data: Post提交的数据
  3. timeout: 设置网站的访问超时时间,单位为秒

常用模块:

  1. urllib.request 请求模块

  2. urllib.error 异常处理模块

  3. urllib.parse url解析模块

  4. urllib.robotparser robots.txt解析模块


常用方法:

  1. print(response.read().decode(‘utf-8’)) # 返回网页内容
  2. print(response.version) # 返回版本信息
  3. print(response.status) # 返回状态码200,404代表网页未找到
  4. print(response.closed) # 返回对象是否关闭布尔值
  5. print(response.geturl()) # 返回检索的URL
  6. print(response.info()) # 返回网页的头信息
  7. print(response.getcode()) # 返回响应的HTTP状态码

例: 判断一个网站的状态码


import urllib.requesturl = 'https://www.baidu.com'r = urllib.request.urlopen(url)print(r.status)

好了,这个模块就先说这么多了。


http.client:

http.client 也是一种发送 http请求的 Python库

他跟 request 很像。

例如:


import http.clientconn = http.client.HTTPConnection("www.baidu.com")  # 请求地址conn.request("GET","/index.php")  # 发送 GET请求,路径是 /index.phpres = conn.getresponse()  # 接收返回值print(res.read().decode('utf-8'))  # 打印返回值

带中文参数的 GET请求:


import http.client
import urllib.parseconn = http.client.HTTPConnection("www.baidu.com")url = urllib.parse.quote("/index.php?name=张三&age=18",safe=':/?=&')conn.request("GET",url)res = conn.getresponse()print(res.read().decode('utf-8'))

这里需要使用到 urllib模块,

quote 是 urllib 的一个子模块,

他的作用是对 url进行编码。

safe 是一个 安全过滤器,默认会将斜杠转换成 %2F ,语法: safe='这里放不需要处理的字符'

这里如果使用 urllib 模块来打开 url ,如果存在中文会报错,

为了使他原原本本的输出,需要将一些符号排除在过滤之外。


POST 请求 :


import http.client
import urllib.parseconn = http.client.HTTPConnection("www.baidu.com")data = urllib.parse.urlencode({"name":"张三","age":18}).encode("utf-8")  #  对url进行编码以及utf-8编码conn.request("POST",'index.php',data)res = conn.getresponse()print(res.read().decode('utf-8'))

这篇关于Python从0到POC编写--模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979812

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e