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: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数