四时宝库

程序员的知识宝库

Python爬虫之网络请求requests,正则表达式re,以及json数据处理

网页访问逻辑

请求头(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库使用

  1. 安装

pip install requests

  1. 普通请求

import requests as req
url = "https://www.xxxxx.com" # 请求网址
# requests get请求
response = req.get(url=url)
# 获取打印结果
print(response.status_code) # 获取返回状态码
print(response.text) # 获取返回文本

  1. 带请求头请求

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) # 获取返回文本

  1. 构造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) # 获取返回文本

  1. 获取返回数据

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[*]

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接