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实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

Python处理超大规模数据的4大方法详解

《Python处理超大规模数据的4大方法详解》在数据的奇妙世界里,数据量就像滚雪球一样,越变越大,从最初的GB级别的小数据堆,逐渐演变成TB级别的数据大山,所以本文我们就来看看Python处理... 目录1. Mars:数据处理界的 “变形金刚”2. Dask:分布式计算的 “指挥家”3. CuPy:GPU

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho

利用Python实现可回滚方案的示例代码

《利用Python实现可回滚方案的示例代码》很多项目翻车不是因为不会做,而是走错了方向却没法回头,技术选型失败的风险我们都清楚,但真正能提前规划“回滚方案”的人不多,本文从实际项目出发,教你如何用Py... 目录描述题解答案(核心思路)题解代码分析第一步:抽象缓存接口第二步:实现两个版本第三步:根据 Fea

Python中CSV文件处理全攻略

《Python中CSV文件处理全攻略》在数据处理和存储领域,CSV格式凭借其简单高效的特性,成为了电子表格和数据库中常用的文件格式,Python的csv模块为操作CSV文件提供了强大的支持,本文将深入... 目录一、CSV 格式简介二、csv模块核心内容(一)模块函数(二)模块类(三)模块常量(四)模块异常

Python报错ModuleNotFoundError的10种解决方案

《Python报错ModuleNotFoundError的10种解决方案》在Python开发中,ModuleNotFoundError是最常见的运行时错误之一,通常由模块路径配置错误、依赖缺失或命名冲... 目录一、常见错误场景与原因分析二、10种解决方案与代码示例1. 检查并安装缺失模块2. 动态添加模块