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将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图