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使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操