当前位置: 首页 > article >正文

【Python_requests学习笔记(七)】基于requests模块 实现动态加载数据的爬取

基于requests模块 实现动态加载数据的爬取

前言

此篇文章中介绍基于requests模块 实现动态加载数据的爬取,并以 抓取Cocos中文社区中:热门主题下的帖子名称及id数据 为例进行讲解。

正文

1、需求梳理

抓取Cocos中文社区中:热门主题下的帖子名称及id数据
在这里插入图片描述

2、动态加载网站

在写爬虫思路之前先介绍下 数据动态加载网站
动态加载网站:其源码页中没有出现想要爬取的数据,只有JS 代码,这样的网站为动态加载网站。
其主要特点为:

  1. 右键、查看网页源码中没有具体数据;
  2. 滚动鼠标滑轮或其他动作时数据才会加载;
  3. 页面局部刷新时数据加载。

3、爬虫思路

  1. F12打开控制台,执行页面动作开始抓取网络数据包

  2. 抓取返回 XHR:异步加载的网络数据包 下的 json文件的网络数据包
    在这里插入图片描述

  3. General->Request URL:返回JSON数据的URL地址
    在这里插入图片描述

  4. QueryStringParameters(查询参数)-观察规律
    在这里插入图片描述

  5. 通过分析请求的url规律,获取对应的数据连接
    即:https://forum.cocos.org/top.json?page={}&per_page=50

  6. 通过得到的url地址,查看数据格式,确定想要爬取的数据真实存在
    在这里插入图片描述
    所需数据 “id和title” 在 “topic_list” 下的 “topics” 下存在。

  7. 编写程序框架、完善程序,详情见: 4、程序实现

4、程序实现

  1. 初始化函数
    def __init__(self):
        self.url = "https://forum.cocos.org/top.json?ascending=false&order=default&page={}&per_page=50"  # url地址

  1. 请求获取响应内容html
    def get_html(self, url):
        """
        function:  请求获取响应内容html
              in:  url:url地址
             out:  None
          return:  int >0 ok, <0 some wrong
          others:  Get Response Html Func
        """
        headers = {"User-Agent": UserAgent().random}  # 构造随机请求头
        html = requests.get(url=url, headers=headers).json()  # 此处使用.json(),直接获取python数据类型
        self.parse_html(html)  # 调用 提取解析html内容函数
  1. 提取解析html内容函数
    def parse_html(self, html):
        """
        function:  提取解析html内容函数
              in:  html:响应内容
             out:  None
          return:  None
          others:  Extract & Parse Html  Func
        """
        item = {}  # 定义一个空字典
        for dic in html["topic_list"]["topics"]:
            item["id"] = dic["id"]
            item["名称"] = dic["title"]
            print(item)
  1. 程序入口函数
    def run(self):
        """
        function:  程序入口函数
              in:  None
             out:  None
          return:  None
          others:  Program Entry Func
        """
        for page in range(3):  # 爬取1-3页的内容
            url = self.url.format(page)  # url地址拼接
            self.get_html(url)  # 调用 获取响应内容方法
            time.sleep(random.randint(1, 2))  # 随机休眠1-2s

5、完整代码

import time
import random
import requests
from fake_useragent import UserAgent

class CocosSpider:
    """
    抓取Cocos中文社区中:热门主题下的帖子名称及id数据
    """

    def __init__(self):
        self.url = "https://forum.cocos.org/top.json?ascending=false&order=default&page={}&per_page=50"  # url地址

    def get_html(self, url):
        """
        function:  请求获取响应内容html
              in:  url:url地址
             out:  None
          return:  int >0 ok, <0 some wrong
          others:  Get Response Html Func
        """
        headers = {"User-Agent": UserAgent().random}  # 构造随机请求头
        html = requests.get(url=url, headers=headers).json()  # 此处使用.json(),直接获取python数据类型
        self.parse_html(html)  # 调用 提取解析html内容函数

    def parse_html(self, html):
        """
        function:  提取解析html内容函数
              in:  html:响应内容
             out:  None
          return:  None
          others:  Extract & Parse Html  Func
        """
        item = {}  # 定义一个空字典
        for dic in html["topic_list"]["topics"]:
            item["id"] = dic["id"]
            item["名称"] = dic["title"]
            print(item)

    def run(self):
        """
        function:  程序入口函数
              in:  None
             out:  None
          return:  None
          others:  Program Entry Func
        """
        for page in range(3):  # 爬取1-3页的内容
            url = self.url.format(page)  # url地址拼接
            self.get_html(url)  # 调用 获取响应内容方法
            time.sleep(random.randint(1, 2))  # 随机休眠1-2s


if __name__ == '__main__':
    spider = CocosSpider()
    spider.run()

6、实现效果

在这里插入图片描述


http://www.kler.cn/a/2745.html

相关文章:

  • 防止密码爆破debian系统
  • (六)优化 ChatGPT 交互:任务式 Prompt 的力量
  • 【Elasticsearch】文档操作:添加、更新和删除
  • [读书日志]从零开始学习Chisel 第一篇:书籍介绍,Scala与Chisel概述,Scala安装运行(敏捷硬件开发语言Chisel与数字系统设计)
  • AWS DMS基础知识
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现
  • 基于微信小程序的投票评选系统小程序
  • 详细介绍less(css预处理语言)
  • 解忧杂货铺(五续集):用了无法离开的网站资源
  • 【STM32】STM32内存映射以及启动过程(超详细过程)
  • 【蓝桥杯集训·每日一题】AcWing 1051. 最大的和
  • 【C陷阱与缺陷】----语法陷阱
  • Android APP检查设备是否为平板
  • 华为笔试题OD
  • 半导体器件基础08:MOS管结构和原理(2)
  • 小程序和Vue写法的区别
  • OpenHarmony基于BearPi-HM Micro开发板,App常用组件使用 -- 上篇
  • ArcGIS:如何进行建筑密度分析?
  • 动词语气(虚拟语气)
  • python实战应用讲解-【numpy科学计算】应用小技巧(一)(附python示例代码)
  • Python模块
  • Springboot+vue开发的图书借阅管理系统项目源码下载-P0029
  • Fuzzing101系列 Exercise 1 - Xpdf
  • 关于肺结节实时的目标检测
  • Nautilus Chain主网上线在即空投规则公布,如何获得更多的空投?
  • 大数据 | Hadoop集群搭建(完全分布式)