最详细爬虫零基础教程09——异步加载和数据结构

本文介绍了异步加载技术如何提高爬虫效率,重点讲解了JSON数据的结构和Python中处理JSON的方法,以及如何使用requests库进行豆瓣电影排行榜的翻页爬取,包括数据格式转换和反爬策略。
摘要由CSDN通过智能技术生成


一、异步加载

异步加载是指通过并发的方式发送多个请求,实现同时加载多个页面,并将页面的内容提取出来。相比于同步加载,异步加载可以大幅提高爬取速度。

简单来说:url表面没有发生变化的情况下 ,加载出了其他数据(内容),是一个动态数据。

产生方式:
1.js代码 触发(鼠标的点击,滑动)
2.ajax异步加载 进度条向下滑动,url没有发生变化,产生新的数据

二、json数据的介绍

JSON(JavaScript Object Notation)是一种用于数据交换的轻量级文本格式。它由键值对组成,类似于Python字典或JavaScript对象。JSON的格式简洁清晰,易于阅读和编写,并且可以被各种编程语言解析和生成。

JSON数据的基本结构是键值对(key-value)形式,键和值之间用冒号分隔,键值对之间用逗号分隔。键必须是字符串类型,值可以是字符串、数字、布尔值、对象(另一个键值对的集合)或数组(值的有序列表)。json是用来填充网页的。

在这里给大家介绍一个解析json文件的网站:json.cn

格式转换
这里需要用到一个库json

  1. json和python数据的转换
import json

if __name__ == '__main__':
    dict_data = {
        "name": "思思",
        "age": 18
    }
    print(dict_data, type(dict_data))  # {'name': '思思', 'age': 18} <class 'dict'>

    # 转化成json类型的数据
    json_data = json.dumps(dict_data, ensure_ascii=False)  # indents表示每一个键值对的缩进空格数量
    print(json_data, type(json_data))  # json在python中实质上是一个字符串,默认使用的是ASCLL编码  {"name": "思思", "age": 18} <class 'str'>
    # 注意:在python中json默认的数据格式是string字符串

    # 将json数据转化成python数据
    python_data = json.loads(json_data)
    print(python_data, type(python_data))  # {'name': '思思', 'age': 18} <class 'dict'>
}
  1. json和文件的转换
import json
# 将Python格式的数据转化为json’文件‘
dict_data = {
    'name': 'sisi',
    'age': 18
}

file_obj = open('json01.json','w')

# 少一个s直接是跟json文件打交道
json.dump(dict_data,file_obj,ensure_ascii=False)

file_obj.close()

# 将json文件转化成一个Python可操作对象
file_obj = open('json01.json','r')
python_data = json.load(file_obj)
file_obj.close()
  1. 记忆技巧

注意:json.dumps()和json.dump(),json.loads()和json.load()的区别,有s的是直接和json数据打交道;没有s的是和json文件打交道

  • python数据 >> json数据 : json.dumps(python数据,ensure_ascii=False)

  • python数据 >> json文件 :json.dump(python字典,json文件对象,ensure_ascii=False)

  • json数据 >> python数据:json.loads(json数据)

  • json文件 >> python数据:json.load(json文件对象)

三、豆瓣翻页爬取

import requests
import time

if __name__ == '__main__':
    pages = int(input('请输入你要抓取的页数:'))
    for page in range(pages):
        url_ = f'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start={page * 20}&limit=20'
        headers_ = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'
        }
        response_ = requests.get(url_, headers=headers_)
        str_data = response_.text
        with open(f'douban{page + 1}.json', 'w', encoding='utf-8') as f:
            f.write(str_data)
        print(f'第{page + 1}页爬取成功!')
        # 每爬取一页等待一会,防止被反爬
        time.sleep(3)

  • 24
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莘薪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值