python开发二
requests请求模块
requests 是一个常用的 Python 第三方库,用于发送 HTTP 请求。它提供了简洁且易于使用的接口,使得与 Web 服务进行交互变得非常方便。
发送 GET 请求并获取响应
import requestsresponse = requests.get("https://api.example.com/data")
print(response.status_code) # 获取响应状态码
print(response.text) # 获取响应内容
发送带参数的 GET 请求
import requestsresponse = requests.get("https://api.example.com/data")
print(response.status_code) # 获取响应状态码
print(response.text) # 获取响应内容
发送 POST 请求并传递数据
import requestsdata = {"key": "value"}
response = requests.post("https://api.example.com/submit", data=data)
print(response.json()) # 解析响应内容为 JSON 格式
发送带有请求头的请求
import requestsheaders = {"User-Agent": "Mozilla/5.0"}
response = requests.get("https://api.example.com/data", headers=headers)
print(response.text)
可以自定义请求头,例如设置 User-Agent、Referer 等,以模拟不同的浏览器或来源。
处理响应内容
import requestsresponse = requests.get("https://api.example.com/data")
print(response.status_code) # 获取响应状态码
print(response.text) # 获取响应内容
print(response.json()) # 解析响应内容为 JSON 格式
根据需要,可以获取响应的状态码、文本内容或将响应内容解析为 JSON 格式。
处理异常和错误
import requeststry:response = requests.get("https://api.example.com/data")response.raise_for_status() # 如果请求失败,抛出异常
except requests.HTTPError as e:print("HTTP Error:", e)
except requests.RequestException as e:print("Error:", e)
使用 try-except 块来捕获可能发生的异常,如网络连接错误、超时等。
文件上传和下载
import requests# 文件上传
files = {"file": open("file.txt", "rb")}
response = requests.post("https://api.example.com/upload", files=files)# 文件下载
response = requests.get("https://example.com/image.jpg")
with open("image.jpg", "wb") as file:file.write(response.content)
可以使用 files 参数将文件上传到服务器,并使用 response.content 获取返回的二进制数据,然后将其保存到本地文件中。
base64模块
-
- 编码:
b64encode(s): 对给定的字节串(bytes)进行 Base64 编码,返回编码后的字节串。
b64encode(s, altchars): 使用指定的替代字符进行 Base64 编码。
-
- 解码:
b64decode(s): 对给定的 Base64 编码的字节串进行解码,返回解码后的字节串。
b64decode(s, altchars): 使用指定的替代字符进行 Base64 解码。
示例:
import base64# 编码
text = "Hello, World!".encode("utf-8")
encoded_text = base64.b64encode(text)
print(encoded_text) # 输出:b'SGVsbG8sIFdvcmxkIQ=='# 解码
decoded_text = base64.b64decode(encoded_text)
print(decoded_text.decode("utf-8")) # 输出:Hello, World!
编码和解码 URL 安全的 Base64:
URL 安全的 Base64 在编码结果中使用 - 和 _ 替代 + 和 /。可以使用 urlsafe_b64encode() 和 urlsafe_b64decode() 函数进行 URL 安全的编码和解码。
import base64text = "Hello, World!".encode("utf-8")# URL 安全的 Base64 编码
encoded_text = base64.urlsafe_b64encode(text)
print(encoded_text) # 输出:b'SGVsbG8sIFdvcmxkIQ=='# URL 安全的 Base64 解码
decoded_text = base64.urlsafe_b64decode(encoded_text)
print(decoded_text.decode("utf-8")) # 输出:Hello, World!
多行输出和填充字符控制
可以使用 b64encode() 函数的 break_lines 参数来控制是否启用多行输出,并使用 b64encode() 和 b64decode() 函数的 pad 参数来控制是否启用填充字符。
import base64text = "Hello, World!".encode("utf-8")# 启用多行输出和填充字符
encoded_text = base64.b64encode(text, break_lines=True).decode("utf-8")
print(encoded_text)decoded_text = base64.b64decode(encoded_text, pad=True).decode("utf-8")
print(decoded_text)
对文件进行编码和解码
import base64# 编码文件
with open("example.jpg", "rb") as file:encoded_image = base64.b64encode(file.read())print(encoded_image)# 解码文件
with open("decoded_image.jpg", "wb") as file:file.write(base64.b64decode(encoded_image))
etree模块
-
- 解析 XML 数据:
parse(file): 解析给定文件名或文件对象中的 XML 数据,并返回根元素对象。
fromstring(xmlstring): 解析给定的 XML 字符串,并返回根元素对象。
-
- 遍历 XML 树:
iter(): 遍历 XML 树的所有元素。
find(tag): 在当前元素的子元素中查找并返回第一个具有给定标签名的子元素。
findall(tag): 在当前元素的子元素中查找并返回所有具有给定标签名的子元素。
-
- 获取和修改元素内容:
text: 获取或设置元素的文本内容。
attrib: 获取或设置元素的属性字典。
示例:
import xml.etree.ElementTree as etree# 解析 XML 数据
tree = etree.parse("data.xml")
root = tree.getroot()# 遍历 XML 树
for child in root:print(child.tag, child.attrib)# 获取和修改元素内容
element = root.find("element")
print(element.text) # 输出元素的文本内容element.text = "New Text" # 修改元素的文本内容
element.set("attribute", "value") # 设置元素的属性# 生成 XML 字符串
xml_string = etree.tostring(root, encoding="utf-8")
print(xml_string)
创建新的 XML 元素
- Element(tag, attrib={}): 创建具有给定标签名和属性的新元素。
- SubElement(parent, tag, attrib={}): 在父元素下创建具有给定标签名和属性的新子元素。
import xml.etree.ElementTree as etree# 创建根元素
root = etree.Element("root")# 创建子元素
child = etree.SubElement(root, "child")
child.text = "Hello"# 添加属性
child.set("attribute", "value")# 输出 XML 字符串
xml_string = etree.tostring(root, encoding="utf-8")
print(xml_string)
删除元素
- remove(element): 从父元素中删除指定的子元素
import xml.etree.ElementTree as etreetree = etree.parse("data.xml")
root = tree.getroot()# 删除指定的子元素
element_to_remove = root.find("element")
root.remove(element_to_remove)# 输出修改后的 XML 字符串
xml_string = etree.tostring(root, encoding="utf-8")
print(xml_string)
寻找命名空间
- register_namespace(prefix, uri): 注册一个命名空间前缀和 URI 的映射关系。
- QName(uri, localname): 创建具有给定命名空间 URI 和本地名称的 QName 对象。
import xml.etree.ElementTree as etree# 注册命名空间前缀和 URI 映射关系
etree.register_namespace("prefix", "http://example.com/ns")# 创建带有命名空间的元素
element = etree.Element("{http://example.com/ns}tag")# 使用 QName 创建带有命名空间的属性
qname = etree.QName("http://example.com/ns", "attribute")
element.set(qname, "value")
解析和生成字符串
- tostring(element, encoding=‘unicode’): 将给定的元素转换为字符串。
- fromstringlist(sequence): 从字符串列表解析多个 XML 文档。
import xml.etree.ElementTree as etree# 解析多个 XML 文档
xml_list = ['<root><child>1</child></root>', '<root><child>2</child></root>']
for xml_string in xml_list:root = etree.fromstring(xml_string)# 处理每个 XML 文档# 生成 XML 字符串
root = etree.Element("root")
xml_string = etree.tostring(root, encoding="utf-8")
print(xml_string)
xpath解析方式
XPath 是一种用于在 XML 文档中定位元素的语言。etree 模块提供了支持 XPath 的功能,使得可以使用 XPath 表达式来解析和选取 XML 数据。
以下是使用 XPath 解析 XML 数据的示例:
import xml.etree.ElementTree as etree# 解析 XML 数据
tree = etree.parse("data.xml")
root = tree.getroot()# 使用 XPath 选取元素
elements = root.findall(".//element") # 选取所有名为 "element" 的元素
for element in elements:print(element.text)element = root.find(".//element[@attribute='value']") # 选取具有属性值为 "value" 的 "element" 元素
if element is not None:print(element.text)
利用xpath获取网址的域名,标题和IP地址
import requests
from lxml import etree# 发送请求并获取网页内容
url = "https://example.com" # 替换为您要获取信息的网址
response = requests.get(url)
html = response.text# 使用 lxml 解析 HTML
tree = etree.HTML(html)# 使用 XPath 提取域名
domain = tree.xpath("//a/@href")
if domain:domain = domain[0].strip("/")# 使用 XPath 提取标题
title = tree.xpath("//title/text()")[0]# 使用 XPath 提取 IP 地址
ip_address = tree.xpath("//span[@class='ip-address']/text()")[0]# 打印结果
print("Domain:", domain)
print("Title:", title)
print("IP Address:", ip_address)
具体情况需要根据实际情况修改 XPath 表达式,以适应目标网页的结构和元素选择方式。
ftplib库
ftplib 模块提供了一系列方法和功能,用于通过 FTP 协议进行文件传输和管理。以下是 ftplib 的主要功能:
连接和认证:
- FTP(host[, user[, passwd]]): 创建一个 FTP 对象并连接到指定的 FTP 服务器。
- login(user=‘’, passwd=‘’, acct=‘’): 使用给定的用户名、密码和账户信息进行认证。
文件上传和下载:
- storbinary(cmd, file[, blocksize[, callback[, rest]]]): 将本地文件的数据流上传到远程服务器。
- retrbinary(cmd, callback[, maxblocksize[, rest]]): 从远程服务器下载文件的数据流到本地。
- storlines(cmd, file[, callback]): 将本地文件逐行上传到远程服务器。
- retrlines(cmd, callback): 从远程服务器逐行下载文件到本地。
目录和文件管理:
- cwd(path): 更改当前工作目录到指定的路径。
- pwd(): 获取当前工作目录的路径。
- nlst([path]): 列出指定路径下的文件和目录名称(不包含详细信息)。
- dir([path[,…]]): 列出指定路径下的文件和目录详细信息。
- delete(pathname): 删除远程服务器上的指定文件。
- rename(fromname, toname): 重命名远程服务器上的文件或目录。
- mkd(pathname): 在远程服务器上创建新目录。
- rmd(dirname): 删除远程服务器上的指定目录。
其他功能:
- quit(): 关闭 FTP 连接。
- getwelcome(): 获取服务器的欢迎消息。
- sendcmd(cmd): 发送原始 FTP 命令到服务器。
- voidcmd(cmd): 执行无返回值的 FTP 命令。
- voidresp(): 等待服务器的响应,如果响应不是成功的响应码,则引发异常。
示例:
from ftplib import FTP# 连接和认证
ftp = FTP("example.com")
ftp.login(user="username", passwd="password")# 文件上传和下载
with open("local_file.txt", "rb") as file:ftp.storbinary("STOR remote_file.txt", file)with open("local_file.txt", "wb") as file:ftp.retrbinary("RETR remote_file.txt", file.write)# 目录和文件管理
ftp.cwd("/path/to/directory")
current_dir = ftp.pwd()
file_list = ftp.nlst("/path/to/directory")
dir_list = ftp.dir("/path/to/directory")
ftp.delete("/path/to/file.txt")
ftp.rename("/path/from/file.txt", "/path/to/file.txt")
ftp.mkd("/path/to/new_directory")
ftp.rmd("/path/to/directory")# 其他功能
ftp.quit()
welcome_message = ftp.getwelcome()
response = ftp.sendcmd("CMD")
ftp.voidcmd("CMD")
ftp.voidresp()