序列化、反序列化和requests模块

一、

序列化: 将数据对象保存成文件

反序列化: 将保存在文件中的数据还原成程序中数据对象

    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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值