一、
序列化: 将数据对象保存成文件
反序列化: 将保存在文件中的数据还原成程序中数据对象
json 将数据对象保存为文本文件
pickle 将数据对象保存成字节文件
import json
dc = {'name': '张三', 'age': 18}
json.dump(dc, open("data.json", "wt"))load dump 转为数据保存成文件而设计 dump :将数据保存成文件
load : 将文件中的数据还原为对象。
new_dc = json.load(open("data.json","rt"))
print(new_dc['name'],new_dc['age'])
dumps loads 将数据保存为字符串(目的进行数据传递)
message = {'id':'18039291010',"nickname":"猴","头像":"http://123.png"}
s = json.dumps(message) str(message)虽然可以将字典转为字符串,但是str不能把所有的数据类型转为字符串,所以其他类型是没有办法进行转化的
buff = s.encode()
通过tcp udp http https 发送给服务器
s1 = buff.decode()
new_dc = json.loads(s1)
print(new_dc)
二、
requests模块是用来进行http/https请求的模块
get请求可以粗浅等价于下载
post请求可以粗浅的登记与上传
import json
import time
import random
import requests
from lxml import etree
爬虫的本质即使模拟人类上网的行为从网页中获取数据
爬虫的工作流程
1.拉回整个网页的数据
2.检索我们需要的内容
def get(url, h):
time.sleep(0.5 + random.random() * 1.5) 请求之前休息0.5-2秒
return requests.get(url, headers=h)
head = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'}
print("开始下载b站首页数据")
resp = requests.get("http://www.bilibili.com", headers=head)
http请求响应的状态码
200 201 202... 表示成功
403 404 。。。 表示客户端的请求有问题
5... 表示服务器端出现问题
print(resp.status_code)
print("首页数据下载完毕")
html = etree.HTML(resp.text)
page_ls = html.xpath("//h3/a/@href")
count = 0
for page in page_ls:
print(f"开始获取第{count}个视频页面")
resp = get(page, head)
print("页面数据获取成功") 处理页面中的视频信息print(resp.text)
start = resp.text.index("window.__playinfo__")
end = resp.text.index("</script>", start, len(resp.text))
result = resp.text[start:end].replace("window.__playinfo__=", "")
dc = json.loads(result)
video = dc['data']['dash']['video'][0]['baseUrl']
print(f"开始下载第{count}个视频")
resp = get(video, head)
print(f"下载成功")
with open(f"{count}.mp4", "wb") as wf:
wf.write(resp.content)
count += 1