网页访问逻辑
请求头(Header): 是HTTP协议中用于传递关于请求的额外信息的部分,主要包含客户端(通常是浏览器或应用程序)与服务器之间进行通信所需的元数据。 请求头的作用包括传递请求的附加信息、控制缓存行为、进行身份验证、控制请求体的格式等。
请求方法:Get、Post、Put、Delete、Head、Options
请求参数(Data): 客户端在发送HTTP请求时传递给服务器的数据。
响应状态(Status):200、201、301、403、404、503
响应数据(Response):Html、Js、Json、Text
响应头:服务端返回元数据
requests库解析
学些Python包相关的网站:programcreek,搜索相关包可以看到这个包怎么用?
常用的方法会排在前面,不常用的排在后面,这样也方便知道先学习哪些内容。
点击进去每个Python包方法里面还会有示例,可以快速了解方法怎么用。
python网络请求requests库使用
- 安装
pip install requests
- 普通请求
import requests as req
url = "https://www.xxxxx.com" # 请求网址
# requests get请求
response = req.get(url=url)
# 获取打印结果
print(response.status_code) # 获取返回状态码
print(response.text) # 获取返回文本
- 带请求头请求
import requests as req
url = "https://www.xxxxx.com"
# 构造请求头
header = {
"cookies": "xxxx-xx-xx-xx",
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
}
# get请求
response = req.get(url=url, header=header)
# 打印请求结果
print(response.status_code) # 获取返回状态码
print(response.text) # 获取返回文本
- 构造url请求(带参数)
import requests as req
url = "https://www.xxxxx.com"
# 构造请求头
header = {
"cookies": "xxxx-xx-xx-xx",
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
}
# 构造请求,例如:https://www.xxxxx.com/?page=2&author="张三"
data = {
"page":2,
"author":"张三",
}
# get请求
response = req.get(url=url, header=header, data=data)
# 打印请求结果
print(response.status_code) # 获取返回状态码
print(response.text) # 获取返回文本
- 获取返回数据
import requests as req
url = "https://www.xxxxx.com" # 请求网址
# requests get请求
response = req.get(url=url)
# 获取文本
response.text
# 获取json
response.json()
正则表达式re模块
import re
# 字符串
text = ""
# 正则规则
pattern = r'\d'
# 生成正则对象
regex = re.compile(pattern)
# 查找正则对象匹配内容(返回出现第一次的位置)
result = re.search(regex,text) # 返回结果:
# 查找正则对象匹配内容(从头开始查找)
result = re.match(regex,text) # 返回结果:
# 查找正则对象匹配内容(所有内容)
result = re.findall(regex,text) # 返回列表或者None
# 查找替换
result = re.sub(regex,text,"替换内容")
表达式 | 内容 |
\d | 数字 |
\D | 英文,空格 |
\s | 空格 |
\S | 非空格(不包括换行) |
\w | 英文、数字、下划线 |
+ | 不限长度 |
. | 数字,字符,空格 (单行) |
[] | 匹配内部字符 |
- | A-Z,a-z, 0-9 |
^ | 非,[^A](除了A) |
\r | 回车符 |
\n | 换行符 |
\t | 制表符 |
Json数据处理
- 普通处理方式:内置json包
import json
json_data = """
{
"name": "人员信息",
"num ": 5,
"area": "欧美",
"list":
[
{
"name": "John",
"age": 30,
"city": "纽约"
},
{
"name": "Jane",
"age": 25,
"city": "伦敦"
},
{
"name": "Jim",
"age": 40,
"city": "巴黎"
}
],
"dict":
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
}
"""
# 解析JSON数据
json_data = json.loads(json_data)
# 获取第一层name的值
name = json_data["name"]
print(name) # 输出:人员信息
# 获取列表内name的值
list_names = [item["name"] for item in json_data["list"]]
print(list_names) # 输出:['John', 'Jane', 'Jim']
# 获取列表中的第一个元素
first_element = json_data["list"][0]
print(first_element) # 输出:{'name': 'John', 'age': 30, 'city': '纽约'}
# 获取第一个元素的年龄
age = first_element["age"]
print(age) # 输出:30
# 获取字典中的值
dict_value = json_data["dict"]["key1"]
print(dict_value) # 输出:value1
- 快速处理方式:jsonpath包(需要 pip install jsonpath)
import json
from jsonpath import jsonpath
json_data = """
{
"name": "人员信息",
"num ": 5,
"area": "欧美",
"list":
[
{
"name": "John",
"age": 30,
"city": "纽约"
},
{
"name": "Jane",
"age": 25,
"city": "伦敦"
},
{
"name": "Jim",
"age": 40,
"city": "巴黎"
}
],
"dict":
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
}
"""
# 将JSON数据转换为Python对象
json_data = json.loads(json_data)
# 使用jsonpath库获取列表中的所有name值
result =jsonpath(json_data, '$.list[*].name')
print(result) # ['John', 'Jane', 'Jim']
# 使用jsonpath库获取字典中的key1值
result = jsonpath(json_data, '$.dict.key1')
print(result) # ['value1']
# 使用jsonpath库获取列表中的age值
result = jsonpath(json_data, '$.list[*].age')
print(result) # [30, 25, 40]
jsonpath可以更快的定位元素位置。
字符 | 含义 | 举例 |
$ | 根节点 | $.list |
@ | 当前节点 | @.list |
. | 后面跟子节点 | .list |
.. | 不管位置递归子节点 | $..list |
* | 所有节点 | list[*] |
[] | 取子节点 | list[*] |